Горячие клавиши

← и →: предыдущая и следующая глава

S или /: поиск по книге

?: показать эту подсказку

Esc: закрыть подсказку или поиск

События и возможности

Справочник: что приходит в общий канал, в каком виде, и как спросить у коннектора, что он умеет. Откуда берутся события и что происходит, когда бот отстает: Круг событий. Каждое поле, вариант и метод до последней строки - в Справочнике 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)205050501000
Стакан приращениями (MD)нетнетнетнетнет
Изменение заявки (supports_replace)даданетданет
Стоп-заявки (supports_stop_orders)дадададада
Поток своих сделок (streams_executions)дадададада
Песочница (sandbox)нетпо настройкенетнетна демо-счете
Повтор cid (place_idempotency)LabelOnlyLabelOnlyLabelOnlyLabelOnlyLabelOnly

LabelOnly значит: «cid для брокера лишь метка, повтор той же заявки создаст вторую». Это осторожное значение по умолчанию. Что делает брокер с повтором, зависит от брокера, и в любом случае библиотека заявку не повторяет.

Многопоточность

Все публичные типы Send + Sync, асинхронные вызовы Send. Нужен обычный многопоточный tokio. Коннекторы можно вызывать из нескольких задач одновременно.

Листать можно клавишами Влево и Вправо.

brokapi by RunInfra