Таблица всех сделок. Доступ через MQL5 - страница 5

 
prostotrader:

Вот же в моём коде предотвращение дублирования:

Ну тогда :) в вашем коде заложена потеря тиков.
 
Yury Kulikov:
Ну тогда :) в вашем коде заложена потеря тиков.

:) но почему то они лишние :)

Спасибо Вам большое Юрий, щас буду разбираться. 

 

Действительно, при переходе на COPY_TICKS_TRADE - пропала ошибка с перемешиванием тиков, но вместе с этим в режиме COPY_TICKS_TRADE нельзя получить флаги 

  • TICK_FLAG_BUY – тик возник в результате сделки на покупку
  • TICK_FLAG_SELL – тик возник в результате сделки на продажу

 
Karputov Vladimir:

Действительно, при переходе на COPY_TICKS_TRADE - пропала ошибка с перемешиванием тиков, но вместе с этим в режиме COPY_TICKS_TRADE нельзя получить флаги 

  • TICK_FLAG_BUY – тик возник в результате сделки на покупку
  • TICK_FLAG_SELL – тик возник в результате сделки на продажу

На реале флаги приходят (я щас тестирую на реале)
 
Yury Kulikov:
Ну тогда :) в вашем коде заложена потеря тиков.

Юрий, попробуйте мой индикатор (посмотрите внимательно)

Я ожидаю появление тиков, а не смотрю их в истории.

Каждый раз копирую, до появлении новых тиков

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_TRADE,start_time,0);

"0" - сколько вновь поступило тиков. 

Если copied = 0, то нет новых тиков. 

 Если убрать эту "подпорку"

if(start_time==ulong(ticks[copied-1].time_msc)) return;

 То однозначно будет дублирование.

Задача не просматривать тиковую историю, а отображение ленты сделок в реальном времени.

 
prostotrader:
На реале флаги приходят (я щас тестирую на реале)

 Да, всё верно. Я перепутал с COPY_TICKS_INFO.

Добавлено:

тем не менее, в режиме COPY_TICKS_ALL тики, некоторые, поступаю в перемешанном порядке

 
prostotrader:

Юрий, попробуйте мой индикатор (посмотрите внимательно)

В вашем коде слишком много букв :)

Алгоритм простой. В OnCalculate()  смотрите реальный объем, если он изменился, то загружаете последние тики, запоминаете сколько тиков пришлось на последний  момент времени(одинаковое значение time_msc), что бы при следующем вызове CopyTicks() отсечь эти тики из расчета.

 
Yury Kulikov:

В вашем коде слишком много букв :)

Алгоритм простой. В OnCalculate()  смотрите реальный объем, если он изменился, то загружаете последние тики, запоминаете сколько тиков пришлось на последний  момент времени(одинаковое значение time_msc), что бы при следующем вызове CopyTicks() отсечь эти тики из расчета.

Спасибо, я кажется знаю как решить проблему...
 
Yury Kulikov:

В вашем коде слишком много букв :)

Алгоритм простой. В OnCalculate()  смотрите реальный объем, если он изменился, то загружаете последние тики, запоминаете сколько тиков пришлось на последний  момент времени(одинаковое значение time_msc), что бы при следующем вызове CopyTicks() отсечь эти тики из расчета.

Юрий, ещё раз огромное спасибо за грамотный совет.

Всё сделал и отлично работает, но вот уже более 3-х часов нет ситуации, которую

я описывал :) 

 

Ну, наконец-то! Сработало!

Всё правильно и тики теперь не дублируются и не теряются.

Демо в ZIP фпйле, а кто хочет сам проверить дебаг-версия в подвале 

Файлы:
Причина обращения: