1

我刚刚在我的 EA 中添加了指定交易开始和结束日期的功能,但是,我发现了一个奇怪的行为!

如果我指定了交易的开始日期和结束日期,则 EA 交易的日期为至,但如果我指定了日期为从至,则交易的日期为至
2016.05.01 00:00:00

2016.05.10 00:00:00
2015.05.02 00:002016.05.12 14:02

2016.06.01 00:00:002016.06.10 00:00:00

2016.06.01 00:002016.06.10 14:53

这是我的代码:

   extern datetime StartDate = __DATETIME__;
   extern datetime EndDate   = __DATETIME__;

   int isTrading = 0;

   if (  StartDate < EndDate ) {
         if (  TimeCurrent() > StartDate
            && TimeCurrent() < EndDate
               ) isTrading = 1;
   } else {
         if (  TimeCurrent() > StartDate
            || TimeCurrent() < EndDate
               ) isTrading = 1;
   }

我不知道这里出了什么问题,任何帮助将不胜感激。

先感谢您。

4

1 回答 1

0

最简单的部分:

鉴于StartDate == 2016.05.01 00:00,市场确实关闭了(并且对函数的调用将只返回4 月最后一周最后一次报价的TimeCurrent()一些旧值)。datetime

由于市场尚未关闭,没有OnTick()触发事件(消息)将到达(任何交易将能够发生的更少)直到2016.05.02(星期一)开始并且第一个“QUOTE消息确实从服务器端到达,基于一些进一步的细节。

文档警告:

datetime TimeCurrent();
返回最后一个已知的服务器时间,即在“市场观察”窗口中选择的一个交易品种的最后一个报价接收时间。OnTick()处理程序中,此函数返回接收到的处理滴答的时间。在其他情况下(例如,调用处理程序OnInit(),等等),这是“市场观察”窗口中任何可用交易品种的最后一次报价接收时间,该时间显示在该窗口的标题中OnDeinit()OnTimer()时间值是在交易服务器上形成的,不依赖于您计算机上的时间设置。


几个比较难的点:

  • 代理服务器端设置的 GMT 偏移量(在这个服务器端/服务器端的datetime角度来看不是问题,否则是的)

  • 外汇工具 ( _Symbol) 交易条件(贵金属和指数通常以额外的时间偏移开始,并且不遵循主要市场的 24*5 市场交易时间)。

  • 经纪商特定的交易时间变更/中断提前公布。

  • MetaTrader 终端 4 [策略测试器] 可能会在不完整的数据(历史中心的差距)上表现出令人惊讶的行为,并且文档只是“间接地”警告这一点:

    在 Strategy Tester 中进行测试时,TimeCurrent()会根据历史数据进行模拟。

于 2016-12-18T21:10:24.150 回答