说出来你可能不信,我上个月复盘时发现,同一个EA在美盘夏令时切换那一周,回测和实盘的信号差了整整17笔,其中好几笔还是反向的。查了两天才反应过来,不是EA逻辑写错了,是我压根没管服务器时间和本地时间的时差问题。今天就把这个坑掰开揉碎讲一遍,给刚上手EA的朋友省点弯路。
先搞明白一件事:你的MT4/MT5服务器时间,和你的电脑本地时间,和经纪商所在时区,是三回事。绝大多数经纪商服务器用的是GMT+2或GMT+3,夏令时切换时还会自动跳一小时。而你的EA里如果写死了时间判断,比如“只在8点到12点开仓”,那这个8点到底是服务器时间还是本地时间,必须想清楚。我第一次就是吃了这个亏,EA按北京时间写的逻辑,结果跑在GMT+3服务器上,等于每天早开了5个小时,把亚盘的震荡全吃进去了。
具体怎么处理,我现在的习惯是这几步:
还有个细节,回测的时候MT5的策略测试器用的是历史数据自带的时间戳,跟你实盘服务器时间不一定对得上。我现在回测前会先把“使用服务器时间”这个选项勾上,再跑一遍对比,不然回测漂亮实盘拉胯,白高兴一场。
说到底,时间这东西在EA里就像地基,看不见但决定楼歪不歪。新手最容易犯的错就是盯着开仓信号调参数,却忽略了时间基准这个底层逻辑。你们平时挂EA会专门核对服务器时差吗,还是直接默认跑?
先搞明白一件事:你的MT4/MT5服务器时间,和你的电脑本地时间,和经纪商所在时区,是三回事。绝大多数经纪商服务器用的是GMT+2或GMT+3,夏令时切换时还会自动跳一小时。而你的EA里如果写死了时间判断,比如“只在8点到12点开仓”,那这个8点到底是服务器时间还是本地时间,必须想清楚。我第一次就是吃了这个亏,EA按北京时间写的逻辑,结果跑在GMT+3服务器上,等于每天早开了5个小时,把亚盘的震荡全吃进去了。
具体怎么处理,我现在的习惯是这几步:
- 第一步,先在MT5里点右下角看服务器时间,同时记下你电脑的本地时间,算出固定偏移量。比如服务器比北京时间慢5小时,那这个-5就是你要在EA里用的核心参数。
- 第二步,EA里不要直接写死小时数,用TimeGMT()或TimeCurrent()配合偏移量做换算,把“交易时段”统一换算成服务器时间再判断。
- 第三步,夏令时切换那两周要单独处理。欧美一般在3月和11月切换,服务器时间会跟着经纪商调整,但你的EA不会自动改。我的做法是切换前后手动核对一次偏移量,或者干脆在EA里加个判断,用TimeDaylightSavings()读取当前是否处于夏令时。
- 第四步,挂VPS的朋友注意,VPS的系统时区也要设对,不然日志时间全乱,排查问题时能把人逼疯。
还有个细节,回测的时候MT5的策略测试器用的是历史数据自带的时间戳,跟你实盘服务器时间不一定对得上。我现在回测前会先把“使用服务器时间”这个选项勾上,再跑一遍对比,不然回测漂亮实盘拉胯,白高兴一场。
说到底,时间这东西在EA里就像地基,看不见但决定楼歪不歪。新手最容易犯的错就是盯着开仓信号调参数,却忽略了时间基准这个底层逻辑。你们平时挂EA会专门核对服务器时差吗,还是直接默认跑?
