я потому и спрашиваю :-)
что приходится SymbolInfoTick перезапрашивать в мелком цикле
но с ним и мороки меньше и событие более редкое.. OnBookEvent более частое и лишний цикл там очень не хочется
Это как?
но с ним и мороки меньше и событие более редкое.. OnBookEvent более частое и лишний цикл там очень не хочется
Если после MarketBookGet идет код с возможным лагом - имеет смысл после этого кода проверить на актуальность.
Это как?
Если после MarketBookGet идет код с возможным лагом - имеет смысл после этого кода проверить на актуальность.
примерно так :
// в классе - есть поле tick куда заполняется наиболее актуальный void XXXX::CheckTick(void) { MqlTick tmp; if (!SymbolInfoTick(_Symbol,tmp)) { return; } if (tmp.time>tick.time || (tmp.volume>=tick.volume && tmp.bid!=tick.bid && tmp.ask!=tick.ask)) { tick=tmp; for(int pass=0;pass<8;pass++) { if (!SymbolInfoTick(_Symbol,tmp)) break; if (tmp.time==tick.time && tmp.volume==tick.volume && tmp.ask==tick.ask && tmp.bid==tick.bid) break; tick=tmp; } OnRealTick(); } }
CheckTick() вызывается первым внутри всех обработчиков OnXXX, включая OnTick, кроме OnBookEvent (там отдельная свистопляска)
тогда выгребается последний тик максимально быстро.
PS/ вот ради такого :
быстро-быстро взять маковкуCheckTick() вызывается первым внутри всех обработчиков OnXXX, включая OnTick
тогда выгребается последний тик максимально быстро.
SymbolInfoTick всегда отдает последний известный на момент вызова тик. Вызывать функцию в цикле без всякой задержки (предположительно, расчетов, выполняемых после предыдущего вызова) не имеет смысла.
однако нет...
Может быть имеете в виду что-то другое, но вводите людей в заблуждение. SymbolInfoTick всегда отдает последний известный на момент вызова тик. Если получаете из функции разные значения, значит между вызовами функции прошло достаточно много времени, чтобы проскочил как минимум 1 тик.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Может ли быть ситуация, когда вызван OnBookEvent но есть ещё буферизованные (более свежие) сообщения стакана.
То есть имеет-ли смысл там несколько раз вызывать MarketBookGet (с перепроверкой результатов конечно) чтобы получить максимально актуальные данные ?