Как гарантированно получить корректную информацию о сделках?

 
Всех с Новым Годом!

Скрипт анализирует результаты торговли советника по величине прибыли, которые берет из истории сделок за период HistorySelect(t0,t1) функцией HistoryDealGetDouble(ticket, DEAL_PROFIT, deal_profit). Проблема в том, что ИНОГДА скрипт выдает правильные результаты, а иногда - кривые. Для того, чтобы убедиться, что расчет верный, приходится проверять по истории сделок на платформе МТ5. Если результаты не совпадают, то  запускаю скрипт несколько раз, пока не выдаст результат, совпадающий с платформой. Алгоритм скрипта собираюсь зашить в советник для самоанализа. Поэтому, такой расчет, который приходится перепроверять, мне не годится. Ставил задержку Sleep() после HistorySelect() — не помогает. Также, использую вариант bool HistoryDealGetDouble(), надеялся, что покажет ошибки чтения - не помогло, ошибок чтения не выдает.
Как добиться, чтобы гарантированно получить от платформы корректную информацию о сделках?
Спасибо.

 
Leonids Drics:
Всех с Новым Годом!

Скрипт анализирует результаты торговли советника по величине прибыли, которые берет из истории сделок за период HistorySelect(t0,t1) функцией HistoryDealGetDouble(ticket, DEAL_PROFIT, deal_profit). Проблема в том, что ИНОГДА скрипт выдает правильные результаты, а иногда - кривые. Для того, чтобы убедиться, что расчет верный, приходится проверять по истории сделок на платформе МТ5. Если результаты не совпадают, то  запускаю скрипт несколько раз, пока не выдаст результат, совпадающий с платформой. Алгоритм скрипта собираюсь зашить в советник для самоанализа. Поэтому, такой расчет, который приходится перепроверять, мне не годится. Ставил задержку Sleep() после HistorySelect() — не помогает. Также, использую вариант bool HistoryDealGetDouble(), надеялся, что покажет ошибки чтения - не помогло, ошибок чтения не выдает.
Как добиться, чтобы гарантированно получить от платформы корректную информацию о сделках?
Спасибо.

С большой долей вероятности проблема в скрипте. 

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

HistoryPosition - неопубликованный функционал MQL5-языка.
HistoryPosition - неопубликованный функционал MQL5-языка.
  • 2023.11.22
  • www.mql5.com
HistoryPositionsTotal Возвращает количество всех закрытых позиций в истории. HistorySelect() не влияет на результат данной функции. int HistoryPositionsTotal(); Возвращаемое значение Значение типа
 
Aleksandr Slavskii #:

С большой долей вероятности проблема в скрипте. 

Вот здесь  fxsaber выложил удобную библу, которая работает с закрытыми позициями, то есть то же, что ваш скрипт. Попробуйте её.это

По Вашей ссылке находится "HistoryPosition - неопубликованный функционал MQL5-языка. 22 ноября 2023, 00:14"
А сейчас уже 04.01.2026 этот функционал уже и опубликован, и дополнен. Я им и пользуюсь.  Проблема в том, что скрипт в разные моменты времени получает от платформы разную информацию об одних и тех же закрытых сделках. Уточню свой вопрос - Как добиться в скрипте, чтобы гарантированно получить от платформы корректную информацию о сделках? Я пробовал ставить временные задержки от выбора тикета до считывания (HistoryDealGet...) - не помогло. Пробовал считывать  несколько раз подряд пока снятая информация не  совпадет - но это тоже не помогает, потому что она всегда совпадает. 
Как добиться в скрипте, чтобы гарантированно получить от платформы корректную информацию о сделках?

 
Leonids Drics #:

По Вашей ссылке находится "HistoryPosition - неопубликованный функционал MQL5-языка. 22 ноября 2023, 00:14"
А сейчас уже 04.01.2026 этот функционал уже и опубликован, и дополнен. Я им и пользуюсь.  Проблема в том, что скрипт в разные моменты времени получает от платформы разную информацию об одних и тех же закрытых сделках. Уточню свой вопрос - Как добиться в скрипте, чтобы гарантированно получить от платформы корректную информацию о сделках? Я пробовал ставить временные задержки от выбора тикета до считывания (HistoryDealGet...) - не помогло. Пробовал считывать  несколько раз подряд пока снятая информация не  совпадет - но это тоже не помогает, потому что она всегда совпадает. 
Как добиться в скрипте, чтобы гарантированно получить от платформы корректную информацию о сделках?

Понятно. 

Вот здесь обсуждалось проблема. Может в этом причина, если нет, то извините, чем смог...

 
Aleksandr Slavskii #:

Понятно. 

Вот здесь обсуждалось проблема. Может в этом причина, если нет, то извините, чем смог...

Нет, там другая проблема обсуждалась. В моем случае все DEAL_ENTRY_IN и DEAL_ENTRY_OUT в списке есть, но DEAL_ENTRY_OUT иногда содержат неверные данные по прибыли. 
 
Leonids Drics #:
Нет, там другая проблема обсуждалась. В моем случае все DEAL_ENTRY_IN и DEAL_ENTRY_OUT в списке есть, но DEAL_ENTRY_OUT иногда содержат неверные данные по прибыли. 

Уже почти страницу исписали и ни одной строчки кода нет...

99% ошибка в коде. Как историю выделяете? ДО какого времени? Там надо TimeCurrent()+60 делать или как-то так. Немного в будущее забирать чтобы вся история влезла.