inferno
inferno личный блог
13 мая 2012, 00:56

Алготрейдинг: Путь Заявки

Трейдеры, торующие руками, редко задумываются над тем, что происходит с заявкой после нажатия кнопки бай/селл. В нормальных условиях это приводит к выводу ее на биржу во мгновение ока, что визуально подтверждается в торговом терминале. Но иногда заявки теряются. Возможно каждый замечал, что клик по кнопке, бывает не срабатывает. Что это? Возможно кривые руки, а возможно заявка где то застряла. При этом совсем неочевидо, к каким финансовым последствиям это может привести.
При разработке торговых роботов эта проблема стоит наиболее остро.
Итак, торговый робот имеет сигнал и готов подать заявку (трейдер — нажать бай/селл). Что дальше?
  1. Робот отправляет ее в брокерский софт на локальной машине (трейдер — в терминал)
  2. Софт брокера пытается заслать заяку на сервер брокера.
  3. Если с интернетом порядок, заявка покидает локальный компьютер
  4. Гуляет по хостам в интернете
  5. Если сервер брокера доступен, добирается до него
  6. Если софт на сервере в порядке, регистрируется в БД брокера, и пытается уйти набиржу
  7. Если канал с биржей стабилен, добирается туда.
  8. Софт на бирже фиксирует получение заявки
  9. Выводит ее на рынок, и фиксирует этот факт
  10. и отправляет результат брокеру



дальше в обратном порядке


  1. софт биржи отправляет результат брокеру
  2. канал биржа-брокер
  3. софт брокера
  4. интернет канал трейдера
  5. клиентский софт брокера у трейдера
  6. торговый робот (терминал)

Общеизвестно, что любой софт иногда глючит, а интернет каналы нестабильны. Поэтому, путь заявки может прерваться на любом из перечисленных шагов. Что делать если это таки случилось?
Руко-трейерам проще, можно применить аналитическое мышление и прочее, хотя и здесь, при форсмажорных обстоятельствах, многие умудряются закрывать миллионные прибыли по позициям, которые они не открывали, а наутро получать открытые позы в обратную сторону.
При разработке роботов следует учитывать каждое из этих мест, где заявка сдохнет.
Особенно для хфт, которые не ждут ответа по каждой заявке, перед отправкой следующей, а фигачат без остановки.
И что делать, если заявка потерялась?

Для начала, удостовериться, что она действительно потерялась :)
Как? Даже это не легкая задача. Установить таймаут? Так ведь раундтрип в разные периоды, взависимости от условий, может варьироваться от 10 мс. до 30 и более сек.
В любом случае, прекратить торговлю незамедлительно, до выяснения обстоятельств.

Фухх… Устал писать…
Видимо, продолжение следует...
 
42 Комментария
  • berensh
    13 мая 2012, 01:14
    Это какой брокер и какая прога так тебя???
  • Mikhail Sukhov
    13 мая 2012, 01:23
    На самом деле не так страшен черт… Практически все нормальные SDK имеют встроенную поддержку таймаутов. Тоесть, даже если сигнал потерялся в интернете, все равно клиенская часть обязана оповестить робота, что произошел тайм-аут при регистрации заявки. Тоже самое справедливо и для брокерской стороны.

    Насчет остановки работы. Тут все зависит от логики. Если это не принципиальная заявка, то можно и продолжить работу (например, заявка на усреднение позиции), если позволяет ММ. Если это критическая заявка (переворот, стоп-сигнал), то да, лучше остановить работу.

    Вообще тайм-ауты лучше вообще не отслеживать. Потому что они вносят только шум в алгоритм. Получили тайм-аут, а спустя секунду нормальный ответ, что заявка встала в стакан. Лучше следить не за таймаутами, а за потоком данных. Именно он является хорошим индикатором того, что что-то не так с данными. А заявку всегда можно ручками «поправить», чтобы робот не перезапускать.
  • Sekator
    13 мая 2012, 01:25
    Ждём продолжение, особенно про решения
  • А. Г.
    13 мая 2012, 01:53
    А что мешает проверять по таблице заявок квика. Качаете ее по dde или odbc в программу проверки и все дела. Это если задержка в 0,5-1 сек. некритична. А если критична, то лучше сразу озаботиться тем, чтобы избавиться от кучу промежуточных звеньев в Вашей схеме. Правда последнее уже будет стоить денег.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн