Особенности языка mql5, тонкости и приёмы работы - страница 27
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2017.02.07 13:41
SymbolInfoTick в индикаторах работает совсем не так, как в советниках.
В индикаторе она возвращает всегда тот тик, который был инициатором вызова OnCalculate. И эти инициаторные тики в индикаторе не должны пропускаться - идеология разработчиков. Проблема в формировании очереди этих тиков.
В советнике же SymbolInfoTick в OnTick вовсе не возвращает тик, который инициировал запуск OnTick, а делает полноценный запрос на текущее состояние.
Иными словами:
В индикаторе при поступлении пачки тиков будет показан первый тик из всего пакета, а в советнике - последний.
Верно понимаю?
Иными словами:
В индикаторе при поступлении пачки тиков будет показан первый тик из всего пакета, а в советнике - последний.
Верно понимаю?
Да. OnCalculate вызовется не каждом тике пачки в порядке очереди.
НА каждом тике? А то вы НЕ написали...
Получается, что с приходом пакета тиков, индикатор будет запускаться в порядке очереди тиков в пришедшем пакете?
Интересно, а если пакет пришёл на открытии нового бара - сколько раз за эту пачку тиков индикатор сделает полный перерасчёт?
НА каждом тике? А то вы НЕ написали...
Наверное, много чего не написал.
Получается, что с приходом пакета тиков, индикатор будет запускаться в порядке очереди тиков в пришедшем пакете?
Интересно, а если пакет пришёл на открытии нового бара - сколько раз за эту пачку тиков индикатор сделает полный перерасчёт?
Calculate-событие генерируется на КАЖДОМ тике. Поэтому есть очередь тиков для индикаторов. Если она доходит до определенного количества, в журнал идет предупреждение, что индикатор слишком медленный.
Сами бары по природе своей являются индикаторами и формируются по Calculate-событиям. Поэтому, если ТФ M1 и сейчас 10:15:00.020 и приходит пачка на 50 мс, то первый тик в ней еще имеет время 10:14:59.970. И все индикаторы вызываются сначала на этом Calculate-событии - сначала индикатор таймсерий, затем кастомные индикаторы с этими таймсериями. Т.е. при таком раскладе 10:15-бар еще не сформирован, как нулевой. А нулевой - 10:14.
Далее, когда пачка начнет раскручиваться через Calculate-события, появится и 10:15-бар. Вроде, подробно расписал.
Наверное, много чего не написал.
Calculate-событие генерируется на КАЖДОМ тике. Поэтому есть очередь тиков для индикаторов. Если она доходит до определенного количества, в журнал идет предупреждение, что индикатор слишком медленный.
Сами бары по природе своей являются индикаторами и формируются по Calculate-событиям. Поэтому, если ТФ M1 и сейчас 10:15:00.020 и приходит пачка на 50 мс, то первый тик в ней еще имеет время 10:14:59.970. И все индикаторы вызываются сначала на этом Calculate-событии - сначала индикатор таймсерий, затем кастомные индикаторы с этими таймсериями. Т.е. при таком раскладе 10:15-бар еще не сформирован, как нулевой. А нулевой - 10:14.
Далее, когда пачка начнет раскручиваться через Calculate-события, появится и 10:15-бар. Вроде, подробно расписал.
Как следствие, вполне нормальная ситуация, когда советник получил тик еще не сформированного бара. Но это такой тонкий момент, что даже специально воспроизвести - надо постараться. В общем, больше теоретический, чем практический.
ЗЫ Если параноидально нужна скорость, использование индикаторов (и баров, конечно) - не вариант. Все в советнике.
fxsaber:
Далее, когда пачка начнет раскручиваться через Calculate-события, появится и 10:15-бар. Вроде, подробно расписал.
А определить, что пришла пачка, проигнорировать из нее первые тики и взять на обработку только последний тик, каким-то образом можно?
А определить, что пришла пачка, проигнорировать из нее первые тики и взять на обработку только последний тик, каким-то образом можно?
В OnCalculate через CopyTicks.