关于EA开仓时间窗口控制,这篇可能最接地气

神帖很热89.4
登录发帖
XM 推荐平台

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

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
zhangshuang6295
zhangshuang6295 楼主 2026-8-19 20:35:56 浏览 594 回复 12 阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 4 帖数 10 积分 887 汇币 536
1楼
说到时间窗口控制,我先算一笔返佣账。一个中等频率的EA,假设每天开平仓20次,每次0.5手欧美,点差1.2,返佣按每手8刀算,一天下来就是20*0.5*8=80刀的返佣。但如果你把交易限制在流动性最好的时段,比如伦敦开盘到纽约午盘,滑点平均能减少0.3个点,一个月按22个交易日算,光滑点节省就是20*0.5*0.3*10*22=660刀——这还没算那些因为避开低流动性时段而躲掉的异常止损。所以时间窗口不是锦上添花,是实打实的利润。
我最早用MT4自带的TimeHour()函数做限制,写的是if(Hour()>=8 && Hour()<=22)这种,看起来没问题吧?结果跑了一个月,发现凌晨两点偶尔还是会开仓。查了半天日志才明白,这个Hour()取的是服务器时间,而我的VPS在美东,经纪商服务器在伦敦,夏令时冬令时一换算,我的“晚上8点”其实是服务器凌晨2点。后来我改成用TimeCurrent()配合TimeToStruct()解析,再统一转成自己定义的“交易时区”,才算彻底解决。

  • 第一步,先确定你想要的核心交易时段。比如我做镑美,只做伦敦开盘(北京时间15:00)到纽约午盘(北京时间24:00),这段流动性最好,点差最稳定。
  • 第二步,写窗口判断函数。别直接用Hour(),用TimeToStruct(TimeCurrent())取小时,然后加一个时区偏移常量。我的做法是在EA参数里加一个“ServerGMTOffset”的输入项,手动填服务器和本地的时差,比如我VPS用UTC,服务器是GMT+2,那偏移就是-2。
  • 第三步,开仓条件里必须加一个StartTime和EndTime的双重判断,注意跨日的情况。比如你要做22:00到02:00这个夜盘窗口,直接写Hour()>=22 && Hour()<=2是永远不成立的,必须拆成两个条件:一个是Hour()>=22,另一个是Hour()<2,用OR连接。

踩过最大的坑是回测和实盘的“时间错位”。MT4策略测试器里默认用的是服务器时间,但你在图表上看到的K线时间轴可能是经纪商给你调过偏移的。我有个EA在回测里明明严格遵守了窗口,实盘却频繁在窗口外开仓。后来对比了测试报告和实盘日志,发现测试器里的BarStartTime是服务器时间,而我实盘VPS上的Docker容器时区是UTC+8,EA里拿到的Hour()又变成了容器时间。一个EA三个时间基准,不乱才怪。
我的解决办法是彻底抛弃系统时间,直接用 iTime(NULL, PERIOD_H1, 0)取当前K线的开盘时间,然后换算成UTC再做窗口判断。这样无论VPS在哪个时区,还是经纪商服务器在哪个时区,只要K线时间轴是统一的,逻辑就一致。另外,节假日和夏令时切换日必须特殊处理,我建议在EA里加一个“禁止交易日期表”,把每年三月和十月的最后一个周日前后两天都手动填进去,因为那些日子流动性异常,即使时间窗口内也容易出幺蛾子。
最后说个细节:窗口判断最好放在一切开仓条件的最前面,用“早退机制”减少不必要的计算。我见过很多人把时间判断放在再说前面跑了一堆指标计算,结果发现时间不对直接return,纯粹浪费CPU,VPS负载高了还容易造成延迟。而且注意,平仓也要设时间窗口,别只限制开仓。我有一次只限制了开仓,结果EA在凌晨三点流动性枯竭的时候平了一单,滑了4个点,把当天利润吃回去一半。
顺便问一句,你们做多品种对冲的时候,时间窗口是怎么统一协调的?我最近想加一个US30的跨品种套利进去,但美股盘前盘后流动性太差,正在纠结要不要单独给这个品种设一套独立的窗口参数。有人搞过类似的吗?

对了,忘提一句,那个Hour()函数判断里建议用>=和<=同时限制,别只写单边条件,不然凌晨时段容易漏单。
2 回复 众裁0 复制
#1
南城
南城 #2· 2026-8-19 21:06:03
2楼
说到时间窗口控制,你算的返佣账很实在,我也有同感。但TimeHour()写条件时容易犯边界错,我之前就吃过亏,比如Hour()>=22却漏了等于0的情况,建议用>=和<组合更稳。
赞 回复 众裁0 复制
2026-8-19 21:06:03 #2
MistyMeadow
MistyMeadow #3· 2026-8-20 15:00:37
3楼
南城说的边界问题我也遇到过,不过更想问下楼主,你算的滑点0.3个点是用固定值还是回测出来的?我这EA跑欧美老是在凌晨莫名止损,是不是也该调窗口?
赞 回复 众裁0 复制
2026-8-20 15:00:37 #3
MistyMeadow
MistyMeadow #4· 2026-8-21 10:17:03
4楼
楼主你这返佣算得挺细,我EA也是欧美跑凌晨老止损。想问下0.3滑点如果按固定值算,会不会高估啊?实际数据能差多少?
赞 回复 众裁0 复制
2026-8-21 10:17:03 #4
秋叶随行
秋叶随行 #5· 2026-8-22 15:35:07
5楼
楼主这返佣账算得实在,凌晨止损大概率是流动性差导致的。滑点按固定值确实保守,建议用回测里的实际平均滑点对比,更贴近真实情况。
赞 回复 众裁0 复制
2026-8-22 15:35:07 #5
王哥来了
王哥来了 #6· 2026-8-24 16:02:26
6楼
楼主这返佣账算得真通透,尤其那句“时间窗口不是锦上添花,是实打实的利润”直接点醒我。我自己也在MT5上跑欧美EA,用TimeHour()时确实踩过边界坑,后来改用BarTime对比就稳了。滑点我回测取的是平均0.25,伦敦时段明显更顺,凌晨那阵真别碰。
赞 回复 众裁0 复制
2026-8-24 16:02:26 #6
晚风入巷
晚风入巷 #7· 2026-8-27 09:15:03
7楼
楼主这返佣账算得真扎实,我跑澳美时尤其明显。不过TimeHour()边界问题确实头疼,我后来直接用SessionInfo()判断时段,凌晨那波异常止损基本绝迹了 😄
赞 回复 众裁0 复制
2026-8-27 09:15:03 #7
john6631
john6631 #8· 2026-8-27 09:28:03
8楼
楼主这返佣账算得确实细,不过我这边实测同一套EA在MT5上跑,滑点0.3用回测数据反而偏保守,凌晨那波异常止损更多是点差拉宽导致的,建议把开仓条件再加个点差上限过滤。
赞 回复 众裁0 复制
2026-8-27 09:28:03 #8
MellowBreeze
MellowBreeze #9· 2026-8-31 20:27:05
9楼
楼主这返佣账算得是真细,时间窗口那笔账直接戳中我痛点。我自己也跑欧美EA,凌晨那波止损确实肉疼,后来干脆加了点差上限过滤,比单控时段稳多了。👍
赞 回复 众裁0 复制
2026-8-31 20:27:05 #9
摸鱼达人
摸鱼达人 #10· 2026-9-1 09:18:05
10楼
john6631说的对,加个点差上限过滤确实比单纯卡时段稳。我遇到过凌晨点差瞬间拉到3个点,直接把止损打穿,后来加了过滤才解决。
赞 回复 众裁0 复制
2026-9-1 09:18:05 #10
amber65
amber65 #11· 2026-9-1 20:15:05
11楼
楼主这返佣账确实算得细,但TimeHour()那段有笔账我补充下:直接用Hour()判断边界时,注意它返回的是服务器时间,如果VPS时区跟经纪商不一致,晚上8点那单可能直接漏掉。我建议用iTime(NULL,0,0)取当前K线开盘时间再拆分小时,顺便加个TimeCurrent()做双重校验,比单纯改边界条件稳。另外回测时得把点差固定成实际值,不然凌晨那波滑点模拟出来全是假的。
赞 回复 众裁0 复制
2026-9-1 20:15:05 #11
晚风拾光
晚风拾光 #12· 2026-9-8 22:38:07
12楼
楼上这笔账算得真细,TimeHour边界那段让我省了排查功夫。我自己也踩过服务器时间跟VPS差一小时的坑,后来干脆全用iTime取开盘时间再拆。
赞 回复 众裁0 复制
2026-9-8 22:38:07 #12
阿斌哥
阿斌哥 #13· 2026-9-10 11:00:43
13楼
你算的返佣账我认,但“伦敦开盘到纽约午盘”这个窗口我MT5上实测过,欧美下午五点后点差反而更稳。我自己也吃过亏:早先只卡小时,没管周五提前休市,EA硬在低流动性里加仓,滑点比返佣还贵。后来在MT5里用iTime配合点差过滤才压住。
赞 回复 众裁0 复制
2026-9-10 11:00:43 #13
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 好的交易是从无聊开始的 下一帖 → EA跑了半年收益和回撤复盘,从亏损到盈利我做对了什么