Блог им. asytyi

Quik: отлавливаем заявки на скорость с помощью Lua и колбэков

    • 08 октября 2021, 22:15
    • |
    • FatCat
  • Еще

Строя автоматизированную торговлю на базе Квик, нет-нет да и столкнёшься с ситуацией, когда отправленная заявка исполняется совсем не так быстро как хотелось бы. Удивляться тут нечему, производительность квиковских серверов брокера не резиновая, на всплесках нагрузки могут изрядно подтупливать. Что с этим делать?
Запилить торговую систему через прямое подключение к бирже задача совсем другого уровня сложности по сравнению с демократичным Квиком со встроенным языком Lua. Что же, будем выкручиваться с имеющимся инструментарием.

Для получения информации о выставлении или перестановке заявки можно использовать колбэки OnTransReply (со значением поля status = 3) или OnOrder. Сильно ли они отличаются между собой по скорости? Для ответа на этот вопрос я прикрутил логгирование задержек срабатывания этих колбэков от момента вызова функции отправки заявки на сервер до срабатывания соответствующего колбэка. Логгирование выполнялось на дельтахеджере и опционном котировщике. Данные собирались в течение месяца не первом сервере в Открывашке, сам Квик работал на VDS-хостинге.

Результаты замера можно посмотреть на графике. Каждая точка — это одна заявка на выставление, перестановку или снятие приказа в координатах задержек OnTransReply и OnOrder.
Quik: отлавливаем заявки на скорость с помощью Lua и колбэков


Что же, OnTransReply вполне достоин более блестящей медальки по сравнению с OnOrder :

  1. В диапазоне задержек срабатывания OnOrder до одной секунды OnTransReply показывает существенно более быструю реакцию
  2. С увеличением задержки отличие становится не столь существенным, тупят оба колбэка
  3. Лучик света — один OnTransReply, прилетевший на порядки быстрее залипшего почти на 20 секунд OnOrder
  4. Несколько занятных глитчей, когда OnOrder прилетал быстрее OnTransReply
 
★6
11 комментариев
А какой конфиг вдски?
Спасибо.
avatar
GoGo, 2x2.2ГГц, 2Гб RAM со средней загрузкой процессора в районе 3%
avatar
Когда-то я из Питера получал в Церих-кэпитале срабатывание OnTransReply — 100 мсек.
Но никакой медали OnTransReply не заслуживает, т.к. он всего лишь сообщает, что заявка отвергнута брокером или принята (например, поставлена в очередь на бирже).
А сигнал OnOrder по хэлпу Квика: «Функция вызывается терминалом QUIK при получении новой заявки или при изменении параметров существующей заявки» — это ни о чём. Внутренние дела между клиентом и брокером.
А вот сигнал OnTrade даёт полную информацию о выполнении заявки на бирже.
В Церихе я получал срабатывание OnTrade через 200 мсек после подачи заявки.
avatar
Rostislav Kudryashov, OnTransReply со статусом 3 уже содержит в order_num биржевой 19-ти значный номер заявки. Т.е. до биржи заявка долетела 
avatar
FatCat, Квик не даст снять заявку пока она не попадет в OnOrder() с нужным статусом. С перестановкой сработает?
avatar

Браво! Гениальный кот, который еще и переводится с английского, как «денежный мешок». Вы на верном пути, сэр! Мы тоже в Qlua...

Всем котам — срочно переходить на АЛГО-ТОРГОВЛЮ !!

avatar
Манул Кот, шлю тёплый кошачий привет! 
avatar
А гистограмму можно?
Пункт 3 — это крайняя правая точка? Подписи на осях перепутаны?

Как заказ данных делается — руками в настройках инструменты и параметры выбираются или по открытым таблицам? По идее куча лишнего может приходить, можно попробовать уменьшить поток ненужной инфы.
avatar
Максим, не, оси не перепутаны. У меня заказан минимум необходимых данных: несколько фьючей и несколько опционных серий. В плане быстродействия улучшение почувствовал только после отключения трансляции тиковых данных.



avatar
FatCat, ага, спасибо. Так а какие тогда параметры у крайней правой точки? Выглядит, будто OnTransReply=~20s и OnOrder=~0.1s

Другие сервера не пробовали? Я что-то разницы не заметил.
avatar
Максим, OnTransReply по красному пунктиру, OnOrder — по зелёному


avatar

теги блога FatCat

....все тэги



UPDONW
Новый дизайн