EA多周期信号确认策略实现这几个细节很多人忽略

新帖
登录发帖
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
frank78
frank78 楼主 2 小时前 浏览 3 回复 0 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 3 帖数 9 积分 20 汇币 20
1楼
前两天帮一个汇友看他那个跑欧美M15的EA,日志里同一根K线居然开了三单,方向还都是多的。我问他是不是加了多周期过滤,他说加了,H1和H4都判断了趋势。结果我把源码翻出来一看,问题全出在调用方式上。这种事儿其实挺常见的,多周期信号确认听起来简单,真写起来细节一个比一个坑。
先说最典型的一个:iCustom或者iMA取高周期数据时没做数据同步判断。MT4里你直接拿PERIOD_H1的指标值,如果H1那根K线刚开盘,指标可能还没算完,返回的是空值或者上一根的值。我自己的做法是在OnTick开头加一层判断,用iTime(_Symbol, PERIOD_H1, 0) != lastH1Time来确认H1确实换线了再取信号,不然M15每跳一次你都去读H1,读到的可能是半成品数据。这个坑我踩了差不多两个月才发现,之前一直以为是EA逻辑写错了。
第二个坑是多周期信号的时间对齐。比如你想让H4趋势向上、H1回调到位、M15出进场信号,三个条件同时满足才开单。但实际跑起来你会发现,H4的“向上”在H4收盘后才确定,而M15的信号可能在H4还没收盘时就出现了。我的处理方式是高周期只认已收盘的K线,也就是用shift=1而不是shift=0,低周期才用shift=0抓实时信号。这样虽然会晚一点进场,但胜在信号稳定,不会出现H4中途转向把单子套住的情况。镑美这种波动大的品种尤其明显,H4一根K线走完之前什么妖蛾子都可能出来。
再说说具体实现思路,我一般分这么几步走:
  • 第一步,把每个周期的信号单独封装成函数,比如CheckH4Trend()返回1或-1,CheckH1Pullback()返回布尔值,别全堆在OnTick里,不然改起来要命
  • 第二步,用全局变量记录每个周期上次的信号状态,只在状态变化时才触发判断,减少重复计算
  • 第三步,开单前加一道信号有效期检查,比如M15信号超过3根K线没被确认就作废,防止拿旧信号去凑新条件
  • 第四步,日志里把每个周期的返回值都打出来,方便回测时对时间轴

最后提一个容易被忽略的点:回测和实盘的多周期数据量不一样。回测时MT4会一次性加载所有历史数据,高周期指标算得飞快;实盘刚挂上去那会儿,H4的数据可能只有最近几百根,指标值跟回测对不上。我的习惯是EA初始化时用Bars(_Symbol, PERIOD_H4)检查一下数据够不够,不够就等,别急着开单。之前有个跑黄金的EA就是栽在这上面,实盘第一天信号乱飞,后来加了数据量校验才正常。
你们跑多周期EA的时候,高周期信号是用shift=0还是shift=1?有没有遇到过回测和实盘信号对不上的情况,在下面聊聊。
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 点差和滑点怎么理解,交流