События и возможности
Справочник: что приходит в общий канал, в каком виде, и как спросить у коннектора, что он умеет. Откуда берутся
события и что происходит, когда бот отстает: Круг событий. Каждое поле, вариант и метод до последней
строки - в Справочнике API (крейт brokapi_core).
Python. Конверт - brokapi.Envelope, события - классы OrderBookSnapshot, OrderBookIncrement, MarketTrade, Quote, Candle, OrderSnapshot (событие Order), Execution, Portfolio, PositionsUpdate, BalancesUpdate, Resync, Overflow, Reconnected (поля sub и gap_from: время, когда коннектор заметил обрыв потока заявок или исполнений, шлюз закрыт до reconcile). Вид события, который пакет еще не знает, приходит как UnknownEvent, а цикл не падает. Возможности - await client.caps(). Справочник: Справочник API: Python.
Конверт события
Каждое событие приходит в конверте Envelope:
| Поле | Что это |
|---|---|
schema | версия формата конверта (сейчас 1). Растет только вперед, правки только добавляют поля |
source | метка коннектора, которую бот задал в конфиге ("tbank-ud-iis"). Библиотека ее не разбирает. Нужна, чтобы различать коннекторы в общем канале |
sub | номер подписки (SubscriptionId). Его вернул subscribe_*. Уникален только внутри одного коннектора, поэтому событие адресуется парой source + sub. Поле пустое у событий вне подписки. Например, переходы заявки после place, если бот не вызывал subscribe_order_state: Т-Банк в этом случае шлет их без sub |
ts | время (Timestamps) |
payload | само событие (Event) |
Время в ts:
| Поле | Что это | Для чего |
|---|---|---|
rx_ts | время получения по настенным часам | логи и сопоставление |
rx_mono | монотонные часы при получении. При записи конверта в файл или сеть не сохраняется | единственный источник для замеров задержки и таймаутов |
broker_ts | время, которое назвал брокер. Может отсутствовать, быть неточным или идти назад | для расчета задержек не используйте |
События (Event)
| Событие | Что значит |
|---|---|
OrderBook | стакан. У всех брокеров приходит полным снимком (Snapshot), не приращением |
MarketTrade, Quote, Candle | сделка рынка, котировка (лучшая покупка и продажа), свеча |
Order | новое состояние заявки (OrderSnapshot). Всегда несет cid |
Execution | своя сделка. Если связь с заявкой известна, несет cid |
Portfolio, Positions, Balances | состояние счета |
Resync | стакан мог потерять данные, прежний выбросить и ждать новый снимок |
Overflow | буфер подписки переполнился, торговля остановлена до сверки |
Reconnected | поток своих заявок или исполнений оборвался и открыт снова, за обрыв могли пройти события, которых бот не видел. Торговля остановлена до сверки |
Что делать с Resync, Overflow и Reconnected: Ошибки и что с ними делать и
Если что-то пошло не так, при обрыве потока заявок.
Возможности коннектора (caps())
У каждого коннектора есть метод caps(): что он умеет. Так бот может не предполагать, а спросить.
| Поле | БКС | Т-Банк | Финам | АЛОР | Bybit |
|---|---|---|---|---|---|
| Макс. глубина стакана (MD) | 20 | 50 | 50 | 50 | 1000 |
| Стакан приращениями (MD) | нет | нет | нет | нет | нет |
Изменение заявки (supports_replace) | да | да | нет | да | нет |
Стоп-заявки (supports_stop_orders) | да | да | да | да | да |
Поток своих сделок (streams_executions) | да | да | да | да | да |
Песочница (sandbox) | нет | по настройке | нет | нет | на демо-счете |
Повтор cid (place_idempotency) | LabelOnly | LabelOnly | LabelOnly | LabelOnly | LabelOnly |
LabelOnly значит: «cid для брокера лишь метка, повтор той же заявки создаст вторую». Это осторожное
значение по умолчанию. Что делает брокер с повтором, зависит от брокера, и в любом
случае библиотека заявку не повторяет.
Многопоточность
Все публичные типы Send + Sync, асинхронные вызовы Send. Нужен обычный многопоточный tokio. Коннекторы можно
вызывать из нескольких задач одновременно.
Листать можно клавишами Влево и Вправо.