Руководство по интеграции
### Введение
При торговле лимитными ордерами (Limit Orders) биржа исполняет их по принципу **FIFO** (First-In, First-Out): ордера, выставленные раньше по той же цене, исполняются первыми. Знание своей позиции в очереди (Queue Position) позволяет оценивать вероятность исполнения ордера до изменения цены и вовремя отменять неэффективные заявки.
### Моделирование позиции в очереди стакана
Поскольку биржи не раскрывают точные индентификаты ордеров в публичном потоке данных L2 (Order Book Updates), позиция ордера в очереди оценивается математически.
При отправке ордера объемом \(D\) по цене \(p\), текущий объем на этом ценовом уровне равен \(V_0\). В этот момент перед нашим ордером находится объем \(Q_0 = V_0\). Со временем позиция в очереди меняется из-за сделок (рыночные ордера уменьшают очередь спереди) и отмен (cancel events уменьшают как спереди, так и сзади нас).
### Расчет остаточного объема перед ордером
В момент времени \(t\) объем перед нашим ордером \(Q_t\) рассчитывается по приближенной формуле:
\[ Q_t = Q_{t-1} - Trade_t - C_t \cdot \frac{Q_{t-1}}{V_{t-1}} \]
Где:
- \(Trade_t\) — объем сделок, совершенных по цене \(p\) за шаг времени,
- \(C_t\) — объем отмененных лимитных ордеров на данном уровне,
- \(\frac{Q_{t-1}}{V_{t-1}}\) — вероятность того, что отмененный ордер находился в очереди перед нами (предполагая равномерное распределение отмен).
### Оценка вероятности исполнения (Fill Probability)
Вероятность исполнения ордера за время \(T\) оценивается на основе интенсивности входящих рыночных сделок \(\lambda_{mkt}\):
\[ P(\text{Execution}) = 1 - e^{-\lambda_{mkt} \frac{T}{Q_t}} \]
Если оценка вероятности исполнения \(P(\text{Execution})\) падает ниже `min_fill_probability` (0.65) или время нахождения в очереди превышает `max_queue_delay_ms` (3 секунды) без исполнения, ордер отменяется (`cancel_limit_order`), так как удержание старого ордера в хвосте очереди повышает риск неблагоприятного отбора при развороте цены.
При торговле лимитными ордерами (Limit Orders) биржа исполняет их по принципу **FIFO** (First-In, First-Out): ордера, выставленные раньше по той же цене, исполняются первыми. Знание своей позиции в очереди (Queue Position) позволяет оценивать вероятность исполнения ордера до изменения цены и вовремя отменять неэффективные заявки.
### Моделирование позиции в очереди стакана
Поскольку биржи не раскрывают точные индентификаты ордеров в публичном потоке данных L2 (Order Book Updates), позиция ордера в очереди оценивается математически.
При отправке ордера объемом \(D\) по цене \(p\), текущий объем на этом ценовом уровне равен \(V_0\). В этот момент перед нашим ордером находится объем \(Q_0 = V_0\). Со временем позиция в очереди меняется из-за сделок (рыночные ордера уменьшают очередь спереди) и отмен (cancel events уменьшают как спереди, так и сзади нас).
### Расчет остаточного объема перед ордером
В момент времени \(t\) объем перед нашим ордером \(Q_t\) рассчитывается по приближенной формуле:
\[ Q_t = Q_{t-1} - Trade_t - C_t \cdot \frac{Q_{t-1}}{V_{t-1}} \]
Где:
- \(Trade_t\) — объем сделок, совершенных по цене \(p\) за шаг времени,
- \(C_t\) — объем отмененных лимитных ордеров на данном уровне,
- \(\frac{Q_{t-1}}{V_{t-1}}\) — вероятность того, что отмененный ордер находился в очереди перед нами (предполагая равномерное распределение отмен).
### Оценка вероятности исполнения (Fill Probability)
Вероятность исполнения ордера за время \(T\) оценивается на основе интенсивности входящих рыночных сделок \(\lambda_{mkt}\):
\[ P(\text{Execution}) = 1 - e^{-\lambda_{mkt} \frac{T}{Q_t}} \]
Если оценка вероятности исполнения \(P(\text{Execution})\) падает ниже `min_fill_probability` (0.65) или время нахождения в очереди превышает `max_queue_delay_ms` (3 секунды) без исполнения, ордер отменяется (`cancel_limit_order`), так как удержание старого ордера в хвосте очереди повышает риск неблагоприятного отбора при развороте цены.