Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Находился за компом, никаких расчетов не делал. Ничем не нагружал CPU.
19 и 48 мс длилось выполнение SymbolInfoTick. Несколько десятков случаев, когда длительность была сотни микросекунд. Но их не стал приводить.
Видимо, для воспроизведения нужно запускать на сутки боевые советники, а потом только смотреть. По-моему, нереально разобраться, что является инициатором таких лагов.
Иногда комп может качать обновления или выполнять какие-то служебные задачи. Ещё перепад напряжения сети может влиять. Так можно добраться до программируемых сетевых карт, где вся логика бота на уровне железа зашита :) но и там будут задержки, связанные с флюктуациями квантового поля
Разработчики сделали все, что могли. И без этого в ветке предоставлен код, который показывает, как стакан отстает от Обзора рынка и наоборот. Как нарушена последовательность прихода тиков и, наверное, что-то еще. В общем, неприятный валидный код выложен для воспроизведения других ситуаций.
SymbolInfoTick отдает данные, полученные от сервера брокера. Что сервер прислал, то вы и получаете.
Подскажите, функция SymbolInfoTick() в блокирующим режиме выполняется или в неблокирующем?
Например она находится в теле цикла while, и пропала связь или рынок закрыт на выходные,
то она заблочится остановив цикл? или выполнится асинхронно?
как стакан отстает от Обзора рынка и наоборот.
т.е SymbolInfoTick ловит новый тик, а через опрос стакана (не дожидаясь события изменение стакана) получаем другие Ask и Bid ? Где то год назад такое было невозможно. SymbolInfoTick и CopyTick и опрос стакана всегда приводили к одному и тому же тику. Если же получать тики через всякие OnXXX функции, конечно что-то получите через одни функции, что-то через другие...
т.е SymbolInfoTick ловит новый тик, а через опрос стакана (не дожидаясь события изменение стакана) получаем другие Ask и Bid ?
Здесь.
Здесь.
Как я и думал вы занимаетесь тестом OnBookEvent и OnTick, а не MarketBookGet и SymbolInfoTick. Если бы вы тестировали по такой схеме у вас бы все совпадало:
p.s Прочитал ваши посты ниже. Вижу вы и сами это понимаете. Зачем вам вообще нужны OnBookEvent и OnTick ? В моем примере Sleep(1) выполняется 1-2 миллисекунды. Запрос и тика с помощью SymbloInfoTick меньше МИКРОсекунды. Процесор и так 99.9% времени если нет тиков отдыхает. В чем выгода использования OnBookEvent и OnTick ?
Как я и думал вы занимаетесь тестом OnBookEvent и OnTick, а не MarketBookGet и SymbolInfoTick. Если бы вы тестировали по такой схеме у вас бы все совпадало:
p.s Прочитал ваши посты ниже. Вижу вы и сами это понимаете. Зачем вам вообще нужны OnBookEvent и OnTick ? В моем примере Sleep(1) выполняется 1-2 миллисекунды. Запрос и тика с помощью SymbloInfoTick меньше МИКРОсекунды. Процесор и так 99.9% времени если нет тиков отдыхает. В чем выгода использования OnBookEvent и OnTick ?
Без намека на дипломатию, несете ахинею. Sleep(1) - это десяток миллисекунд. Вижу только одно теоретизирование.
Пользователи в OnTick хотят видеть свежий тик, а не тот, что пришел в Терминал когда-то. В исходный код можно запихать SymbolInfoTick сразу после MarketBookGet.
Разработчики своим молчанием полностью признали наличие двух проблем.
Без намека на дипломатию, несете ахинею. Sleep(1) - это десяток миллисекунд. Вижу только одно теоретизирование.
Пользователи в OnTick хотят видеть свежий тик, а не тот, что пришел в Терминал когда-то. В исходный код можно запихать SymbolInfoTick сразу после MarketBookGet.
Разработчики своим молчанием полностью признали наличие двух проблем.
Не всегда и не везде десяток миллисекунд. Проверяется простым скриптом
Вот мой лог
Пользователи OnTick всегда видят свежайший тик.
Пользователи OnBookEvent всегда видят свежайший тик.
Но если Вы хотите сравнить тики, полученный в OnTick и полученный в OnBookEvent, тогда вас ждёт разочарование, так как обработка событий производится последовательно, а не параллельно. О чём Вам попытался сказать пользователь pivomoe
Не всегда и не везде десяток миллисекунд. Проверяется простым скриптом
Вот мой лог
Ну а вот мой лог.
Результат.
Пользователи OnTick всегда видят свежайший тик.
Пользователи OnBookEvent всегда видят свежайший тик.
Результат запуска советника на единственном чарте с машины, которая ничем не занята.
Пометил одинаковые тики, которые получены в разных On-функциях соответствующими методами. Отставание может доходить до десятков миллисекунд, если запустить не на одном чарте, а на шести, например.
Но если Вы хотите сравнить тики, полученный в OnTick и полученный в OnBookEvent, тогда вас ждёт разочарование, так как обработка событий производится последовательно, а не параллельно. О чём Вам попытался сказать пользователь pivomoe
Если практически пустой OnBookEvent/OnTick срабатывает на 20 миллисекунд позже соответствующего почти пустого OnTick/OnBookEvent, то это нормально?
ЗЫ Раз обратили внимание на ветку, то здесь еще один воспроизводящий код есть. Там в Обзор рынка приходят тики со временем более ранним, чем время Обзора рынка до этого.
Если практически пустой OnBookEvent/OnTick срабатывает на 20 миллисекунд позже соответствующего почти пустого OnTick/OnBookEvent, то это нормально?
Очередь эксперта - это блокируемый ресурс. Когда в очередь записывается событие, эксперт ждёт (если конечно эксперт в данный момент не обрабатывает какое-либо событие)
События для эксперта поступают из очереди событий соответствующего графика, которые в свою очередь поступают из цикла обработки соответствующего символа. И этот цикл обработки не только раздаёт события своим графикам, но и занимается кучей разных дел.
Я уже Вам говорил, что ОС Windows не является операционной системой реального времени.