上个月看新闻,德国那边制造业PMI数据出来之后欧元瞬间跳了一波,我当时正好挂着一个欧美的EA,结果它在该出手的时候一动不动,我还以为逻辑写崩了。后来翻日志才发现,不是策略的问题,是服务器时区跟我回测时用的时区对不上,这件事让我彻底重视起时区这个老生常谈的话题。
去年年底我写了一套基于亚盘开盘波动率的欧美突破策略,主要逻辑是抓东京时段早盘那段流动性比较薄的时候的假突破,然后在伦敦开盘前平仓。在MT4策略测试器里跑2022到2023年的数据,盈利因子大概1.6,最大回撤不到12%,看起来能用。我直接挂到VPS上实盘跑,用的是IC Markets的True ECN账户,点差平均0.1到0.3,1:500杠杆,手数控制得很保守。这是我一开始的想法。结果实盘跑了三周,亚盘的盈利几乎全部回吐,美盘反而出现了一堆莫名其妙的开仓。我一开始怀疑是滑点,查了成交记录,滑点并不大。又怀疑是点差扩大,对比了一下凌晨三点的点差,也就0.4左右,可以接受。折腾了两周,我甚至把策略逻辑重写了一遍,还是那个鸟样。
真正让我开窍的是有一天我把EA的日志和服务器时间对照着看。MT4服务器时间通常是GMT+2或GMT+3,取决于经纪商有没有走夏令时。而我在策略测试器里用的时间偏移设置是GMT+0。也就是说,我回测里认定的“东京早上8点”,在实际运行的时候变成了服务器时间的10点或者11点,那会儿伦敦盘都开了,波动结构完全变了。亚盘那套窄幅震荡的逻辑,拿到伦敦盘的波动环境里去跑,当然会被反复打止损。
我后来的做法其实不复杂,就是在EA初始化的时候加了一个时区校验函数,用TimeGMT()跟TimeLocal()的差值来判断服务器偏移,然后所有跟交易时段相关的判断都基于GMT时间来做,不再直接读服务器小时数。另外回测的时候,我在测试器里把时间偏移设置成跟实盘服务器完全一致的GMT偏移值。改完之后再跑实盘,亚盘的表现跟回测基本能对上了,误差在可以接受的范围内。
所以我的看法是,如果你的策略跟特定交易时段强相关,比如只做亚盘、只做非农前后、或者只做伦敦开盘那一波,那时区这一步绝对不能省。很多人把精力全花在优化指标参数上,却忽略了时间基准这个底层问题,方向错了,参数调出花来也没用。你们有没有遇到过类似的情况,是时区问题还是别的原因,可以在下面聊聊。
补一句:后来我干脆把VPS和回测的时区全统一成UTC+2,亚盘那套才恢复正常,你们挂EA前一定先对一遍服务器时间。
去年年底我写了一套基于亚盘开盘波动率的欧美突破策略,主要逻辑是抓东京时段早盘那段流动性比较薄的时候的假突破,然后在伦敦开盘前平仓。在MT4策略测试器里跑2022到2023年的数据,盈利因子大概1.6,最大回撤不到12%,看起来能用。我直接挂到VPS上实盘跑,用的是IC Markets的True ECN账户,点差平均0.1到0.3,1:500杠杆,手数控制得很保守。
“回测跟实盘能差多少?参数都一样,逻辑都一样,能差到哪儿去。”
真正让我开窍的是有一天我把EA的日志和服务器时间对照着看。MT4服务器时间通常是GMT+2或GMT+3,取决于经纪商有没有走夏令时。而我在策略测试器里用的时间偏移设置是GMT+0。也就是说,我回测里认定的“东京早上8点”,在实际运行的时候变成了服务器时间的10点或者11点,那会儿伦敦盘都开了,波动结构完全变了。亚盘那套窄幅震荡的逻辑,拿到伦敦盘的波动环境里去跑,当然会被反复打止损。
我后来的做法其实不复杂,就是在EA初始化的时候加了一个时区校验函数,用TimeGMT()跟TimeLocal()的差值来判断服务器偏移,然后所有跟交易时段相关的判断都基于GMT时间来做,不再直接读服务器小时数。另外回测的时候,我在测试器里把时间偏移设置成跟实盘服务器完全一致的GMT偏移值。改完之后再跑实盘,亚盘的表现跟回测基本能对上了,误差在可以接受的范围内。
所以我的看法是,如果你的策略跟特定交易时段强相关,比如只做亚盘、只做非农前后、或者只做伦敦开盘那一波,那时区这一步绝对不能省。很多人把精力全花在优化指标参数上,却忽略了时间基准这个底层问题,方向错了,参数调出花来也没用。你们有没有遇到过类似的情况,是时区问题还是别的原因,可以在下面聊聊。
补一句:后来我干脆把VPS和回测的时区全统一成UTC+2,亚盘那套才恢复正常,你们挂EA前一定先对一遍服务器时间。
