请教MQL5中Market Closed这个错误该如何避免?

 

如题,我获取了交易品种的时间来判断,但实际上不同交易商真正的开市时间都不同,该如何避免呢?

 
研究一下SymbolInfoSessionTrade
 
jianbin huang:
如题,我获取了交易品种的时间来判断,但实际上不同交易商真正的开市时间都不同,该如何避免呢?

这种情况很久很久才会偶尔碰到,Market Closed一般出现在交易商的00:00:00时,也就是在交易商服务器的零点时出现短暂的市场关闭,如果EA在这个时候对持仓单进行操作,就会出现这个错误提示,市场关闭是无法避免的,但是在查看日志后发现,市场关闭后很快又恢复正常了,你可以查看日志的时间,计算从Market Closed到客户端正常联网的时间间隔,如果EA在零点时检测到自动操作失败,就让EA休眠,并且在休眠后让EA再重试操作持仓单,比如你计算得出Market Closed到正常联网的时间间隔为3分钟(一般不会这么久),也就是说断网3分钟,你可以试着这样操作,把3分钟(即3*60*1000毫秒)平分成5次休眠时间,也就是让EA检测到自动操作失败后Sleep(36000毫秒),一共这样循环重复尝试6次(时间加起来是6*36000毫秒),尝试时间刚好覆盖了断网的时间(因为6*36000毫秒大于5*36000毫秒(3分钟)),这样在3分钟后市场正常了以后,EA再做最后一次尝试即可。当然了,如果EA在第6次(或者10次)重复尝试还是失败,那只能让EA发送通知信息到手机进行手动确认了。祝你好运!

 
hbsbill #:

这种情况很久很久才会偶尔碰到,Market Closed一般出现在交易商的00:00:00时,也就是在交易商服务器的零点时出现短暂的市场关闭,如果EA在这个时候对持仓单进行操作,就会出现这个错误提示,市场关闭是无法避免的,但是在查看日志后发现,市场关闭后很快又恢复正常了,你可以查看日志的时间,计算从Market Closed到客户端正常联网的时间间隔,如果EA在零点时检测到自动操作失败,就让EA休眠,并且在休眠后让EA再重试操作持仓单,比如你计算得出Market Closed到正常联网的时间间隔为3分钟(一般不会这么久),也就是说断网3分钟,你可以试着这样操作,把3分钟(即3*60*1000毫秒)平分成5次休眠时间,也就是让EA检测到自动操作失败后Sleep(36000毫秒),一共这样循环重复尝试6次(时间加起来是6*36000毫秒),尝试时间刚好覆盖了断网的时间(因为6*36000毫秒大于5*36000毫秒(3分钟)),这样在3分钟后市场正常了以后,EA再做最后一次尝试即可。当然了,如果EA在第6次(或者10次)重复尝试还是失败,那只能让EA发送通知信息到手机进行手动确认了。祝你好运!

非常感谢你的详细的回复,但其实检测Market Closed状态并没有实际的意义,我的目标是,能够识别出市场关闭,进而防止EA报这个错,因为在MQL市场中发布EA,有错误校验会无法通过。

 
jianbin huang:

如题,我获取了交易品种的时间来判断,但实际上不同交易商真正的开市时间都不同,该如何避免呢?

可设置新的K线(new bar)出现时再继续,否则return