Указание даты начала и окончания торгов

Я просто добавил возможность указывать дату начала и окончания торговли в своем советнике, однако обнаружил странное поведение!

Если я указал дату начала торговли с
2016.05.01 00:00:00
и дата окончания
2016.05.10 00:00:00
советник торгует с 2015.05.02 00:00 в 2016.05.12 14:02
но если бы я указал дату от
2016.06.01 00:00:00 в 2016.06.10 00:00:00
это торгует от
2016.06.01 00:00 в 2016.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;
   }

Я не знаю, что здесь не так, любая помощь будет высоко ценится.

Заранее спасибо.

1 ответ

Самая простая часть:

Учитывая StartDate == 2016.05.01 00:00, там действительно рынок закрыт (и призыв к TimeCurrent() функция будет возвращать только некоторые старые datetime значение с последнего тика с последней недели апреля).

Поскольку рынок еще не закрыт, нет OnTick() -прибегающее событие (сообщение) будет поступать (тем меньше будет возможна любая торговля) 2016.05.02 (Понедельник) начинается и первый " новый " QUOTE сообщение действительно поступает со стороны сервера, основываясь на некоторых дополнительных деталях.

Документация предупреждает:

datetime TimeCurrent();
Возвращает последнее известное время сервера, время получения последней котировки для одного из символов, выбранных в окне "Обзор рынка". в OnTick() Обработчик, эта функция возвращает время полученного обработанного тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и т. д.) это время получения последней котировки для любого символа, доступного в окне "Обзор рынка", время, указанное в заголовке этого окна. Значение времени формируется на торговом сервере и не зависит от настроек времени на вашем компьютере.


Несколько сложных моментов:

  • Смещение по Гринвичу настройки сервера Broker (не проблема на самой стороне сервера / сервера) datetime в перспективе, иначе да)

  • FX-инструмент (_Symbol) торговые условия (Драгоценные металлы и индексы обычно начинаются с дополнительных временных смещений и не следуют за 24*5 часами рыночной торговли майоров).

  • Специфичные для брокера изменения торговых часов / сбоев, объявленные заранее.

  • Терминал 4 MetaTrader [ Strategy Tester ] может работать неожиданно на неполных данных ( Gaps in History Center), и документация предупреждает об этом просто "косвенно":

    Во время тестирования в тестере стратегий, TimeCurrent() моделируется по историческим данным.

Другие вопросы по тегам