用SymbolInfoSessionTrade函数获取平台交易时间,因夏令时平台交易时间有所改变,但代码仍然按照更改之前的时间执行代码,请问如何解决?

 

部分代码展示:

    MqlDateTime  fwqtime;

   TimeToStruct(TimeCurrent(),fwqtime);

   ENUM_DAY_OF_WEEK week=(ENUM_DAY_OF_WEEK)fwqtime.day_of_week; 

   datetime from,to; 

   datetime a=SymbolInfoSessionTrade(Symbol(),week,0,from,to); 

   string fromtime=StringSubstr((string)from,StringFind((string)from, " ")+ 1,StringFind((string)from, ":")- 1);

   string totime=StringSubstr((string)to,StringFind((string)to, " ")+ 1,StringFind((string)to, ":")- 1);

   datetime StartTime=StringToTime(TimeToString(TimeCurrent(),TIME_DATE)+" "+fromtime);

   datetime EndTime=StringToTime(TimeToString(TimeCurrent(),TIME_DATE)+" "+totime);

通过上述代码获取了平台的交易开始时间和结束时间,只有在交易的时间段内,才执行某某代码,由于平台因夏令时修改了交易开始时间和结束时间,但代码并未按照获取的最新的交易时间执行代码,还是按照平台修改前的时间执行相关代码。

请教各位大神,该问题如何解决?(我知道图表重新加载EA可以解决,总不能每次夏令时与冬令时转换时,我都重新加载解决吧?)

 

你在Init獲取信息就需要重新加載

把獲取信息放在OnTick或是OnTime 持續檢查交易跟報價時間就可以

 
Hung Wen Lin #:

你在Init獲取信息就需要重新加載

把獲取信息放在OnTick或是OnTime 持續檢查交易跟報價時間就可以

上述代码我没有放在OnInit里,就是放在 OnTick里的。不知为何我有些时候修改 OnTick里的一些代码后,回测也是按照之前代码执行,重启MT5平台就按照最新代码执行,当然这种现象是偶发。
 
chengshizairen #:
上述代码我没有放在OnInit里,就是放在 OnTick里的。不知为何我有些时候修改 OnTick里的一些代码后,回测也是按照之前代码执行,重启MT5平台就按照最新代码执行,当然这种现象是偶发。

不會有這樣的問題 

代碼沒有按照預期來運行 通常都是代碼順序出了問題 檢查一下 並逐步驗證

 
Hung Wen Lin #:

不會有這樣的問題 

代碼沒有按照預期來運行 通常都是代碼順序出了問題 檢查一下 並逐步驗證

已经检查过代码并无顺序问题,在导航-EA交易-找到相关EA右键修改,不改变任何代码,点击编写,就能获得最新的交易时间(自定义品种,自己修改交易时间进行测试)。实在不知是什么原因导致,用智能工具询问表示可能是缓存问题,难道是编写可以更新缓存?
原因: