Особенности языка mql5, тонкости и приёмы работы - страница 27

 

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

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

fxsaber, 2017.02.07 13:41

SymbolInfoTick в индикаторах работает совсем не так, как в советниках.

В индикаторе она возвращает всегда тот тик, который был инициатором вызова OnCalculate. И эти инициаторные тики в индикаторе не должны пропускаться  - идеология разработчиков. Проблема в формировании очереди этих тиков.

В советнике же SymbolInfoTick в OnTick вовсе не возвращает тик, который инициировал запуск OnTick, а делает полноценный запрос на текущее состояние.

 
fxsaber:

Иными словами:

В индикаторе при поступлении пачки тиков будет показан первый тик из всего пакета, а в советнике - последний.

Верно понимаю?

 
Artyom Trishkin:

Иными словами:

В индикаторе при поступлении пачки тиков будет показан первый тик из всего пакета, а в советнике - последний.

Верно понимаю?

Да. OnCalculate вызовется не каждом тике пачки в порядке очереди.
 
fxsaber:
Да. OnCalculate вызовется не каждом тике пачки в порядке очереди.

НА каждом тике? А то вы НЕ написали...

Получается, что с приходом пакета тиков, индикатор будет запускаться в порядке очереди тиков в пришедшем пакете?

Интересно, а если пакет пришёл на открытии нового бара - сколько раз за эту пачку тиков индикатор сделает полный перерасчёт?

 
Artyom Trishkin:

НА каждом тике? А то вы НЕ написали...

Наверное, много чего не написал.

Получается, что с приходом пакета тиков, индикатор будет запускаться в порядке очереди тиков в пришедшем пакете?

Интересно, а если пакет пришёл на открытии нового бара - сколько раз за эту пачку тиков индикатор сделает полный перерасчёт?

Calculate-событие генерируется на КАЖДОМ тике. Поэтому есть очередь тиков для индикаторов. Если она доходит до определенного количества, в журнал идет предупреждение, что индикатор слишком медленный.

Сами бары по природе своей являются индикаторами и формируются по Calculate-событиям. Поэтому, если ТФ M1 и сейчас 10:15:00.020 и приходит пачка на 50 мс, то первый тик в ней еще имеет время 10:14:59.970. И все индикаторы вызываются сначала на этом Calculate-событии - сначала индикатор таймсерий, затем кастомные индикаторы с этими таймсериями. Т.е. при таком раскладе 10:15-бар еще не сформирован, как нулевой. А нулевой - 10:14.


Далее, когда пачка начнет раскручиваться через Calculate-события, появится и 10:15-бар. Вроде, подробно расписал.

 
fxsaber:

Наверное, много чего не написал.

Calculate-событие генерируется на КАЖДОМ тике. Поэтому есть очередь тиков для индикаторов. Если она доходит до определенного количества, в журнал идет предупреждение, что индикатор слишком медленный.

Сами бары по природе своей являются индикаторами и формируются по Calculate-событиям. Поэтому, если ТФ M1 и сейчас 10:15:00.020 и приходит пачка на 50 мс, то первый тик в ней еще имеет время 10:14:59.970. И все индикаторы вызываются сначала на этом Calculate-событии - сначала индикатор таймсерий, затем кастомные индикаторы с этими таймсериями. Т.е. при таком раскладе 10:15-бар еще не сформирован, как нулевой. А нулевой - 10:14.


Далее, когда пачка начнет раскручиваться через Calculate-события, появится и 10:15-бар. Вроде, подробно расписал.

Благодарю.
 

Как следствие, вполне нормальная ситуация, когда советник получил тик еще не сформированного бара. Но это такой тонкий момент, что даже специально воспроизвести - надо постараться. В общем, больше теоретический, чем практический.


ЗЫ Если параноидально нужна скорость, использование индикаторов (и баров, конечно) - не вариант. Все в советнике.

 

fxsaber:

Далее, когда пачка начнет раскручиваться через Calculate-события, появится и 10:15-бар. Вроде, подробно расписал.

Интересная информация.
А определить, что пришла пачка, проигнорировать из нее первые тики и взять на обработку только последний тик, каким-то образом можно?
 
Vasiliy Pushkaryov:
А определить, что пришла пачка, проигнорировать из нее первые тики и взять на обработку только последний тик, каким-то образом можно?
В OnCalculate через CopyTicks.
 
fxsaber:
В OnCalculate через CopyTicks.
Спасибо, возьму на вооружение.
Причина обращения: