Указание даты начала и окончания торгов
Я просто добавил возможность указывать дату начала и окончания торговли в своем советнике, однако обнаружил странное поведение!
Если я указал дату начала торговли с 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()
моделируется по историческим данным.