Зацикленный индикатор без возврата

 
fxsaber:

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

Предполагаю, что если в OnChartEvent у одного индикатора идет тяжелый расчет (несколько мс.), то у второго индикатора, когда до него доходит очередь, то ChartEvent-событие игнорируется. Хотя, это все равно не объясняет проблему.

Проблема проявляется только на бирже. На форекс все срабатывает. 

Может ли индикатор, который завершает всегда выполнение всех своих On-функций не делать возврата? Сервисдеск утверждает, что у меня зацикленный индикатор без возврата. Но как такое может быть, если все On-функции завершаются? Конкретно об индикаторе можно будет говорить, когда опубликуют.

А чисто теоретически, как такое может быть? 

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2016.10.11 09:11

2016.10.10 16:27:45.066 Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
2016.10.10 16:27:45.066 Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700K  @ 3.50GHz, RAM: 11432 / 16301 Mb, HDD: 5856 / 30000 Mb, GMT+02:00
2016.10.10 16:27:45.066 Terminal        BCS Broker MetaTrader 5 Terminal x64 build 1445 started (BCS Broker)

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

Предполагаю, что если в OnChartEvent у одного индикатора идет тяжелый расчет (несколько мс.), то у второго индикатора, когда до него доходит очередь, то ChartEvent-событие игнорируется. Хотя, это все равно не объясняет проблему.

Проблема проявляется только на бирже. На форекс все срабатывает. 


 
fxsaber:

А чисто теоретически, как такое может быть?

Приоритет выполнения тиковой очереди выше, чем приоритет индикаторной очереди. Это значит, что если за время выполнения On-функции пришел тик, то будет вызван еще один OnCalculate, а не произойдет возврат на другой индикатор в очереди.

Такая особенность "зацикливает" индикаторы (не передает управление другим индикаторам), которые выполняются медленней, чем приходят тики. Такие "зацикленные" индикаторы не производят впечатления зависших у пользователя.

Примерно оценить длину тиковой очереди по выходу из On-функции позволяет CopyTicks, поток выполнения которого не синхронизирован с индикаторным. За счет такого контроля возможно "расцикливание" тяжелых индикаторов.

 
fxsaber:

Приоритет выполнения тиковой очереди выше, чем приоритет индикаторной очереди. Это значит, что если за время выполнения On-функции пришел тик, то будет вызван еще один OnCalculate, а не произойдет возврат на другой индикатор в очереди.

Такая особенность "зацикливает" индикаторы (не передает управление другим индикаторам), которые выполняются медленней, чем приходят тики. Такие "зацикленные" индикаторы не производят впечатления зависших у пользователя.

Примерно оценить длину тиковой очереди по выходу из On-функции позволяет CopyTicks, поток выполнения которого не синхронизирован с индикаторным. За счет такого контроля возможно "расцикливание" тяжелых индикаторов.

Это ошибочный вывод. Вот ответ из Сервисдеск

Апплай тиков имеет приоритет. Т.е. сначала процессинг тиков и только потом процессинг очереди.

Т.е. если индикатор безнадежно не успевает процессить поток тиков, то до процессинга очереди событий дело может не дойти.

Когда идет возврат после тяжелого индикатора, запускается следующий индикатор. Во время выполнения тяжелого образуется тиковая очередь, которую должен полностью отработать следующий индикатор. И если эта очередь велика, то до очереди событий (ChartEvent и т.д.) дело может не дойти. Т.е можно столкнуться с ситуацией, когда легкий индикатор не принимает ChartEvent-события из-за тяжелого индикатора.

Причина обращения: