Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Посмотрите на время лога. Это все в одну мс произошло, и рядом (в эту же мс) куча ОнБук-ов.
Можно посчитать все события счетчиками, но даже визуально видно, что ОнБуков больше.
Вы вроде писали, что используете Async ордера?
Стало интересно, каким алгоритмом вы контролируете исполнение сделок?
Андрей, там числа это зафиксированные микросекунды при срабатывании ОнФункций, а принтуется все вместе потом из массива. ОнБуков всего в итоге может и больше - посчитаю, но непонятно почему в очереди они пропускают вперёд ОнТики чтоли. Или не каждому ОнТик соответствует ОнБук?
добро пожаловать в мир сетевых технологий ))))
самое простое под администратором запустить: Netstat - a -b
увидите порты и софт, не хочу ковыряться, но думаю сервер МТ5 асинхронно гоняет пакеты с разной инфой, которую терминал уже раскладывает по нужным "полочкам"
ЗЫ: про Print() и пропуски принтов если много за раз выводите в курсе? - пишите в файл свою инфу - так точно все и по порядку сохраните, но не забудьте файл закрыть перед закрытием. В теории и Print() в логах в файле должен быть полный, но не проверял и в целом не доверяю если много данных выводить. Тут обсуждали https://www.mql5.com/ru/forum/329730 , очень часто "пропажа принтов" обсуждается ))) - поиском
Андрей, там числа это зафиксированные микросекунды при срабатывании ОнФункций, а принтуется все вместе потом из массива. ОнБуков всего в итоге может и больше - посчитаю, но непонятно почему в очереди они пропускают вперёд ОнТики чтоли. Или не каждому ОнТик соответствует ОнБук?
Понял.
Ну так рядом все равно куча ОнБук-ов. С таким логом делать какие-то выводы сложно.
Вы вроде писали, что используете Async ордера?
Стало интересно, каким алгоритмом вы контролируете исполнение сделок?
В OnTradeTransaction() + функция проверки, если долго нет ответа сервера.
Вообщем по magic.
Я для каждого символа, при установки советника, резервирую 65535 магиков,
а при отправке ордера, присваиваю ему уникальный магик, который никак не
не пересекается с другими инструментами.
Вот так я присваиваю начальный магик для символа
Magic - ulong (8 байт) Н-р
GAZR-3.12
Байт[7] (старший байт) - "G"
Байт[6] - "A"
Байт[5] - "Z"
Байт[4] - "R"
Байт[3] - "3"
Байт[2] - "12"
Байт[1] и Байт[0] - резерв для магиков (65535)
В вот так перебираю магики, при отправке ордера:
Но это работает только для ФОРТС, т.к имена символов стандартизированы!
Добавлено
И если ордер успешно отправлен, то
запоминаю время
А дальше (если нет ответа в OnTradeTransaction)
Ну и сама функция FindOrderBuyMagic
Добавлено
"По хорошему" в автомагик в 1-ый байт нужно добавить идентификатор советника (0-255),
но мне, пока, не надо, вот и не сделал :)
В OnTradeTransaction() + функция проверки, если долго нет ответа сервера.
Спасибо, за подсказку.
1. Второй и последующие терминалы у брокера - платные, и у меня нет стратегий, где я торгую только акциями (портфелями акций).
2. Если Вы собираетесь выводить накопленные GetMicrosecondCount(), то
сделайте это без таймера в OnDeinit(), при выходе советника все распечатается.
киньте плз ссыль на брокера, можно в ЛК.
Интересная ветвь получилась... :-)
добро пожаловать в мир сетевых технологий ))))
самое простое под администратором запустить: Netstat - a -b
увидите порты и софт, не хочу ковыряться, но думаю сервер МТ5 асинхронно гоняет пакеты с разной инфой, которую терминал уже раскладывает по нужным "полочкам"
ЗЫ: про Print() и пропуски принтов если много за раз выводите в курсе? - пишите в файл свою инфу - так точно все и по порядку сохраните, но не забудьте файл закрыть перед закрытием. В теории и Print() в логах в файле должен быть полный, но не проверял и в целом не доверяю если много данных выводить. Тут обсуждали https://www.mql5.com/ru/forum/329730 , очень часто "пропажа принтов" обсуждается ))) - поиском
Игорь, пропажа принтов обсуждается у тех кто не додумался файл лога открыть, сто раз и сам Ринат Фаткуллин писал что в файл лога ничего не теряется. Но чтоб ваш пост не был зря :) я добавил вывод в отдельный файл, кроме того, сделал ещё и второй файл, куда вывожу немного по другому (накапливая все события в CArrayObj) чтобы обойти возможные косяки своей конструкции которая упорядочивает два массива, т.е. я пихаю всё в CArrayObj из двух массивов, потом сортирую по микросекундам и вывожу с пометкой что за событие Тик или Бук.
И да, причём здесь порты, что это даст? Я же просто тестирую очередь событий эксперта. Если пришёл тик, должны формироваться два события - ОнТик, и соотвутствующий ему ОнБук, при этом ОнБук ставится в очередь всегда, а ОнТик может пропасть, если в очереди уже есть ОнТик (так в мануале), т.е. ситуация когда друг за другом идут ОнТики без ОнБуков может быть только если 1. ОнТики проходят "без очереди" 2. есть системная задержка ОнБука, это я и хочу проверить, этим может и объясняется лаг в секунды, ранее выявленный коллегами. Всего ОнБуков в 2+ раза больше за день вышло, но почему они отстают? Если эта задержка из-за асинхронности пакетов и раскладывания по полочкам, возможно, но проверяю пока лишь факт дохода их в эксперт. Как протестить с учетом остальных нюансов, не задумывался пока.
Вот новый код, по открытию протестирую корректность работы и запущу на день.
з.ы. причина еще может быть в том: если Тик прошёл по тем же ценам без изменения стакана - ОнБУк не формируется? я не спец в биржевой торговле, кто подскажет. Я думал ОнТик всегда вызывает ОнБук.
А вот интересно, топикстартер удовлетворен ответами на свой вопрос?
Все ответы я уже получил и выводы для себя сделал.
Мне нужно анализировать ленту сделок за фиксированный период времени - цены сделок, реализованные объемы и т.д.
А также нужно моделировать работу алгоритма в тестере стратегий.
Событие OnTick прекрасно с этим справляется, результаты реальной торговли и результаты моделирования в тестере сходятся с небольшой погрешностью, которая меня удовлетворяет.
Если нужно более быстрый анализ ленты сделок, то можно применять OnTimer.
И не обязательно каждый пришедший в терминал тик должен попадать в OnBook - это специфика исполнения рыночных ордеров.
И не обязательно каждый пришедший в терминал тик должен попадать в OnBook - это специфика исполнения рыночных ордеров.
Как раз наоборот, каждый тик(событие) пришедший в обработчик ОнТик, должен быть синхронен с ОнБук.
Смотри, в обработчике ОнТик есть три события, изменение цены лучшего бид, изменение цены лучшего аск, и трейд(last).
Если измениться цена бид или цена аск без трейда, это будет событие, и в ОнТик придут эти события.
И ОнБук так же эти события должен отловить, только свои события, своего обработчика, иначе будут рассогласования цен бид аск между обработчиками.
А если в ОнТик приходит событие last, значит прошёл трейд.
Трейд порождает событие в ОнБук, ведь после трейда цена или объем банда, изменяться в стакане.
Получается замкнутый круг.
Как в ОнТик так и в ОнБук, есть события лучший бид и лучший аск.
Эти события должны быть всегда синхронны в обоих обработчиках.
А событие last само по себе, оно порождает событие в ОнБук после трейда.
По этому любое событие пришедшее в обработчик ОнТик, должно синхронно отражаться в ОнБук.