В тестере относительно терминала время сдвинуто?

 

Добрый вечер. Сегодня я решил прогнать бота, которого пишу и решил сверить котировки т.к. в терминале входы другие, а в тестере другие. В общем, я накинул шаблон для тестера такой же, как и в терминале, соответственно, сохранил шаблон, который мне нужен для анализа графика под названием tester.

Ниже видно, как разнится время начала торговой сессии в терминале (верхний скрин) и в тестере (нижний). Почему так? Очередной баг?


 
Viktar Dzemikhau:
время начала торговой сессии

А это что такое? Кто вычисляет время начала торговой сессии? Терминал или ваш код?

Viktar Dzemikhau:
Очередной баг?

Скорее всего очередной баг в вашем коде.

 

Давайте тыкать пальцем в небо, других вариантов вы не оставляете, так как не предоставили никакой информации.

https://www.mql5.com/ru/docs/dateandtime/timelocal

TimeLocal

При работе в тестере стратегий локальное время TimeLocal() всегда равно моделируемому серверному времени TimeCurrent().

Вполне себе вероятная причина (в рамках тыканья пальцем в небо).


Хотя не, вряд-ли индикатор использует TimeLocal.

Ну смысл вы поняли. Ищите проблему в коде, который вычисляет вот это

Локализуйте проблему и опубликуйте короткий код для ее воспроизведения. Тот код, который в тестере и в лайве работает по-разному.

 
Vladislav Boyko #:

А это что такое? Кто вычисляет время начала торговой сессии? Терминал или ваш код?

Индикатор рисует торговые сессии. Я не писал индикатор. Код мой, конечно.


Vladislav Boyko #:

Скорее всего очередной баг в вашем коде.

Так тогда возникает вопрос, как может быть баг, если я опираюсь на цены открытия баров и на TimeCurrent(). Это же время локальное, как я понимаю. Или всё же серверное?

 
Vladislav Boyko #:

Давайте тыкать пальцем в небо, других вариантов вы не оставляете, так как не предоставили никакой информации.

Да я думаю, как лучше задать вопрос.

Индикатор отображает данные так же, как и бот сделки открывает. Т.е. у индикатора и бота торгового время одинаковое.

Индикатор я брал здесь.

По скринам можно увидеть как он отображает время в терминале на реальном графике и в тестере.

По индикатору я всю информацию предоставил.

А по поводу бота так у меня сделка открывается тогда, когда время больше определённого значения времени (фиксированные значение часа).

В боте я инициализирую класс DateTimeInstance, который работает со временем. По сути, это удобная обёртка для работы с MqlDateTime.

curDayDt = new DateTimeInstance(TimeCurrent());

Ниже я прикрепил сам класс DateTimeInstance. Там всё просто. Конструктор класса DateTimeInstance принимает значение времени:

DateTimeInstance :: DateTimeInstance(const datetime dt) {
  TimeToStruct(dt, m_dtStructure);

И, соот-но, время присваивается в структуру  MqlDateTime.

А дальше уже из структуры  MqlDateTime возвращаю значения времени..

Интересно, что я передают в класс  DateTimeInstance значение TimeCurrent(). Как его значение в тестере может отличаться от значения в самом терминале? 

Trading Sessions Open - Close
Trading Sessions Open - Close
  • www.mql5.com
Индикатор торговых сессий.
Файлы:
 
Viktar Dzemikhau #:
Индикатор я брал здесь.

Бегло посмотрел код. Теоретически, проблема может быть связанна с вот этим (но это не точно)

https://www.mql5.com/ru/code/16790

void DrawTimeZone(datetime Start, int Index)
{
   int rates_total,shift,shift_end,_startIndex=Index-ShiftTime;
   double iHigh[], iLow[], HighSession, LowSession;
   datetime AsiaStart, AsiaEnd, EuropaStart, EuropaEnd, AmericaStart, AmericaEnd;
   datetime _start=Start+(TimeTradeServer()-TimeGMT());

 Сделайте простой тест. Измените время компьютера таким образом, что бы оно совпадало со временем сервера (и перезапустите терминал, а лучше и компьютер тоже). Если после этого в тестере и в лайве индикатор начнет показывать одинаковые сессии, то, можно копнуть в сторону того, что я подсветил выше.

Ну или можете сразу попробовать печатать значение _start из DrawTimeZone() и сравнивать значение в лайве и тестере. Для всех баров печатать плохая идея, выберите один бар и печатайте только когда функция выполняется для того бара.

 
Тестер так написан (и про это в документации есть), что время сервера всегда считается равным GMT. Чтобы это исправить люди пишут всякие обходные маневры (эмпирические), потому что историческая таймзона сервера нигде не хранится (а она меняется обычно как минимум 2 раза в год при смене летнего/зимнего времени, но брокер может иногда и просто перейти из, например, CET в EET), и в тестере как правило вся история требует корректировки глобального времени - вообще говоря, у баров каждой недели может быть своя таймзона.
 

Добрый вечер. Помогите пожалуйста разобраться с проблемой. 

Есть робот, который выставляет отложенные ордера. Почему-то при тестировании в тестере стратегий,  отложенные ордера срабатывают, но потом открывшиеся позиции не закрываются ни по стоп-лоссу ни по тейк-профиту, и не могу понять, что стоп-лосс, или что тейкпрофит. 

В эксперте никаких действий с открытыми позициями не совершается после выставления.

Файлы:
r1uoooy.png  143 kb
 
AndreyF #:

Добрый вечер. Помогите пожалуйста разобраться с проблемой. 

Есть робот, который выставляет отложенные ордера. Почему-то при тестировании в тестере стратегий,  отложенные ордера срабатывают, но потом открывшиеся позиции не закрываются ни по стоп-лоссу ни по тейк-профиту, и не могу понять, что стоп-лосс, или что тейкпрофит. 

В эксперте никаких действий с открытыми позициями не совершается после выставления.

Вы просто не там смотрите