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

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

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

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

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

Что это

brokapi - единый интерфейс к торговым API. Один и тот же код бота работает с любым брокером. Начинаем с API брокеров российского рынка: БКС, Т-Банк, Финам и АЛОР, есть также технический коннектор к API Bybit (страница). Дальше другие брокеры и биржевые протоколы под тот же интерфейс.

Для ИИ-агентов: llms.txt / llms-full.txt. Для тех, что пишут на Python: python/llms.txt

Стадия: открытая альфа. Интерфейс до беты может меняться. Перед первой заявкой на настоящем счете: Перед боевым счетом.

Выберите путь

В книге одна общая часть (как устроено, брокеры, ошибки, события) и у каждого продукта свой раздел. Общее написано один раз и верно для любого пути. Работают Rust, Python и Gateway (все в альфе).

  • Rust альфа

    Ядро: рыночные данные, заявки, стоп-заявки, сверка, портфель, любой метод брокера через raw(). Работает сейчас. Быстрый старт и инструкции.

  • Python альфа

    Тонкая обертка над ядром: события через async for, деньги как Decimal, те же правила и ошибки, что у ядра. Работает сейчас. Быстрый старт и инструкции. pip install brokapi.

  • Gateway альфа

    Программа brokapi: служба держит связь со счетами за все ваши боты, боты на любом языке подключаются к ней по gRPC, один счетчик лимитов на всех. Команды той же программы запускают службу, показывают гейтвеи (brokapi ps, brokapi top) и читают счет (brokapi quote, вывод --json для скриптов и ИИ-агентов). Бесплатно, ставится у себя: готовый файл для Linux, macOS и Windows или cargo install. Работает сейчас.

Что общее у всех путей

  • Переводчик. Бот говорит на одном языке (заявка, стакан, событие) со всеми брокерами. Разница протоколов (REST, WebSocket, gRPC) спрятана внутри. Сменить брокера - поменять коннектор, код бота почти не меняется.
  • Предохранитель. Главная задача библиотеки - чтобы бот никогда не поставил заявку дважды и не торговал вслепую. Поэтому команда без ответа не повторяется, а торговля закрывается, когда данные о своих заявках могли потеряться.
  • Без памяти. Между запусками библиотека ничего не хранит. Журнал заявок ведет бот, библиотека дает номер cid в каждом событии заявки и сверку со счетом.

Книга устроена так: сначала общая часть (как устроено, брокеры), затем разделы продуктов со своим быстрым стартом и инструкциями, в конце справочник. Код на общих страницах дан вкладками Rust и Python там, где он есть.

Что умеет

ВозможностьЧто внутри
Рыночные данныестакан (снимок и поток), сделки рынка, котировки, свечи, справочник инструментов, лот и шаг цены, статус торгов, расписание
Заявкипостановка, отмена, изменение (где оно есть у брокера), статус по номеру бота, список активных, поток статусов
Свои сделкиистория и поток исполнений
Портфельснимок и поток: деньги и позиции
Стоп-заявкистоп-лосс, тейк-профит, стоп-лимит одним набором методов
Сверка после рестартабот приносит список своих заявок, библиотека сравнивает его с брокером
Лимиты запросовобщий счетчик на область, где брокер считает лимит
Любой другой метод брокерачерез raw(), с теми же токеном, адресом и счетчиком лимитов

Из чего состоит

У каждого брокера два коннектора: MD (рыночные данные, один на брокера) и UD (заявки, свои сделки, портфель, один на счет). Как они связаны с ботом, с лимитами и между собой, показывает Карта.

Общие трейты (OrderBookSource, OrderExecutor, StopOrderExecutor и другие) закрывают то, что умеют все брокеры. Бот, написанный на них, работает с любым брокером. Все остальное, что есть у брокера (купоны, отчеты, избранное, новые методы), доступно через метод raw() каждого коннектора: raw. Сколько методов брокера закрыто общим интерфейсом, а сколько только raw(): Покрытие API.

Три правила, на которых все держится

  1. cid придумывает бот и записывает у себя до отправки. Это единственная нить, по которой можно спросить брокера о заявке без ответа. Если номер выдает библиотека, он теряется вместе с ответом, и после падения бот не знает, что за заявка могла встать. Подробно: Круг команд.
  2. Команда без ответа не повторяется. Unknown выясняется у брокера, новая попытка идет с новым cid. Заявка без ответа могла встать, и повтор дал бы две заявки на счете. Что делать вместо повтора: Если что-то пошло не так.
  3. Торговля только после сверки. После старта, после перегрузки, при сомнении. Пока бот не знает, какие заявки уже стоят у брокера, новая команда может задвоить заявку или спорить с той, которую бот не видит. Подробно: Круг жизни.

Чего библиотека не делает

  • Не придумывает номер заявки. cid создает бот, по нему он узнает свою заявку после рестарта.
  • Не повторяет команды. Заявка, на которую не пришел ответ, не отправляется второй раз. Ни при каких условиях.
  • Не хранит состояние на диске. Журнал своих заявок ведет бот.
  • Не собирает общий портфель по счетам и не выбирает счет для заявки. Это слой над коннекторами.
  • Не трогает чужие заявки. Заявки, поставленные руками или другим роботом, она только показывает.
  • Не снимает заявки при остановке. Заявка на бирже переживает процесс бота.

С чего начать

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

brokapi by RunInfra