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

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

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

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

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

Изменения

Что появилось в библиотеке и что поменять в своем коде. Новое сверху.

Следующая версия

  • Файлы .proto гейтвея собираются protoc и buf. В 0.1.0-alpha.5 и раньше protoc отказывался от gateway.proto: вызовы Portfolio, OrderBook, TradingParams, TradingStatus и Schedule закрывали одноименные типы ответа ("Portfolio" is not a message type). Сборка на Rust этого не замечала. Теперь тип ответа у них записан полным именем, сообщения и номера полей не менялись, клиенты на Rust и Python пересобирать не нужно. Клиент на другом языке берите из main или из следующего выпуска. Проверка tools/proto-check собирает файлы protoc и клиент на Go на каждой правке. В Бот на другом языке - команда генерации для Go.

0.1.0-alpha.5: Bybit

  • Bybit: пятый коннектор. Крейты brokapi-bybit и brokapi-bybit-protocol, флаг bybit в главном крейте, brokapi.connect("bybit") и mock_bybit() в Python, broker = "bybit" в конфиге гейтвея. Поддержана категория linear API V5 (контракты с расчетом в USDT), спота пока нет. Общего replace нет (изменение заявки у биржи оставляет заявку и ее orderLinkId), стоп-заявки только «до отмены», свечи без 10 минут. Демо-счет с виртуальными деньгами (env="demo", у него своя пара ключей BYBIT_DEMO_API_KEY и BYBIT_DEMO_API_SECRET). Страница: Bybit, в ней же что проверено вживую и что нет.
  • В ядре новый вид инструмента InstrumentKind::Perpetual (бессрочный контракт, без срока и с ставкой финансирования). Если вы разбираете InstrumentKind исчерпывающим match, добавьте ветку. Справочник gRPC получил значение INSTRUMENT_KIND_PERPETUAL = 9, старые клиенты видят его как неизвестное. БКС, Т-Банк и АЛОР на поиск по этому виду отвечают Unsupported.
  • Книга: быстрый старт на Python начинается с запуска на имитации без токена, добавлены правило 0 (боевой токен выдает человек, чей это счет), разделы «Где взять токен и счет» на страницах брокеров, первый день на Финаме, страницы Аварийная остановка бота и Если вы пришли с tinkoff-investments.
  • Client.schedule и Client.candles в Python описывают, что передавать в exchange у каждого брокера и что даты должны быть с часовым поясом.

0.1.0-alpha.4: Gateway, программа brokapi

  • Gateway: программа brokapi. Одна программа из двух частей. Служба (brokapi up) держит связь со счетами БКС, Т-Банка, Финама и АЛОР за все ваши боты и отдает им gRPC, поэтому боты на любом языке делят один счетчик лимитов и не переподключаются к брокеру при каждом своем перезапуске. Команды управляют службой (ps, top, start, stop, reload), читают счет (portfolio, book, quote с ключом --json) и снимают заявки (cancel-all). Несколько служб с разными конфигами работают на одной машине. Для ботов на Rust есть клиент RemoteClient, для остальных языков - файлы .proto и справочник. Страницы: Gateway, быстрый старт, Подключить бота, команды.
  • Программа ставится готовым файлом для Linux, macOS и Windows со страницы выпусков или командой cargo install brokapi-gateway --version 0.1.0-alpha.4 --locked (Установка). Клиента для ботов на Go нет, подключение по .proto описано в Подключить бота.
  • Python: подключение к гейтвею тем же Client. await brokapi.connect_gateway("bcs-main", bot="my-bot") возвращает тот же brokapi.Client, что и brokapi.connect: бот переезжает с брокера на гейтвей заменой одной строки, а все его вызовы и async for по client.events остаются. Под Client тот же код на Rust, что у RemoteClient, поэтому события, пропуски и сверка работают так же. Потеря событий приходит событием brokapi.Gap, торговля после нее закрыта (Degraded) до reconcile, как после Overflow. Различия с прямым подключением: нет client.limiter (счетчик общий на гейтвей), close() закрывает только соединение бота. В brokapi.testing появились mock.start_gateway() и gateway.restart(). Страница: Подключить бота.
  • В гейтвее Caps теперь сообщает предел одного запроса истории свечей по таймфреймам (поле candle_spans в .proto), клиент режет по нему длинную историю на окна. Старые клиенты поле не читают, ничего не ломается.
  • Rust: у RemoteClient появились feed() (поток событий, который сам переоткрывается и сообщает о потере как FeedItem::Gap), close(), wait_ready() и необязательная защита команд (ConnectOptions::trading_gate: NotReconciled и Degraded до сверки, как у коннектора, по умолчанию выключена). Крейт brokapi-client получил трейт Account и call_by_name для любого клиента счета.
  • В книге больше нет отдельного раздела «CLI»: командная строка - часть Gateway. Старый адрес cli/index.html ведет на Команды.
  • Gateway на macOS: длинный путь до каталога состояния. Гейтвей не стартовал, если путь до его сокета был длиннее 103 байт (path must be shorter than SUN_LEN), а в ~/Library/Application Support/... или при длинном имени гейтвея это обычное дело. Теперь такой сокет лежит в личном коротком каталоге (права 700), а адрес берется из gateway.addr и service.addr. Тот же отказ на Linux был при пути длиннее 107 байт. Подробности: Какие файлы где лежат.
  • Gateway на Windows: справка называет программу brokapi, а не brokapi.exe, как на остальных системах.
  • Gateway на Windows: бот переподключался не к тому порту. Гейтвей на Windows слушает свободный порт, и после перезапуска порт другой. Бот, подключенный по каталогу состояния (connect_gateway в Python, RemoteClient::connect_dir и feed() в Rust), шел по старому адресу и не получал ни событий, ни пропуска (Gap). Теперь адрес читается из gateway.addr при каждом переподключении, а ключ из access.key перечитывается, если гейтвей его отверг. На Linux и macOS адрес сокета не менялся, там это не проявлялось.
  • brokapi status и top: память - вместо 0 B. Пока служба не прочитала память нового процесса, команды печатали 0 B. Теперь там -.
  • Т-Банк: стоп-заявка с потерянным ответом возвращается в списке с вашим cid. Раньше после Unknown у place_stop стоп у брокера стоял, а active_stop_orders показывал его с cid: None, и код вида «нет стопа с моим cid, значит ставлю заново» ставил второй стоп. Теперь коннектор связывает стоп с cid, когда подходит ровно один (подробности: Т-Банк). Если подходящих стопов два, cid по-прежнему пуст.
  • Что поменять у себя: после Unknown смотрите не только стоп с вашим cid, но и стопы без cid на той же бумаге и в ту же сторону: ваш мог оказаться среди них, второй не ставьте. Рецепт для всех брокеров: Стоп-заявки, Python. protect_once в примере теперь возвращает Placement, а не стоп или None.
  • Python: brokapi.testing получил mock.lose_stop_answers(): брокер принимает стоп-заявки, а ответ теряется. Для проверки своего кода на этом сбое.

0.1.0-alpha.3: subscribe_* возвращается, когда поток открыт

  • У БКС, Т-Банка и АЛОРа subscribe_* возвращается, когда поток открыт: заявку можно ставить сразу после подписки на статусы и исполнения. Если за subscribe_ack_timeout (3 секунды, у Т-Банка request_timeout) поток не открылся, придет Transport, подписку можно повторить. Что считается открытым потоком, по брокерам: Круг событий.
  • У Финама по таймауту subscribe_* по-прежнему вернет Ok, поток дооткроется в фоне (sub_status).
  • БКС: рыночная подписка, которую брокер отклонил, теперь возвращает Rejected { subscription_refused }, как у остальных.
  • Что поменять у себя: ничего, если вы подписывались до заявки. В UserDataConfig и MarketDataConfig БКС появилось поле subscribe_ack_timeout. Если вы полагались на фоновое открытие при медленном АЛОРе, теперь придет Transport: повторите вызов.

0.1.0-alpha.2: АЛОР Брокер

  • Новый брокер АЛОР: флаг alor у крейта brokapi, brokapi.connect("alor") в Python. Заявки и замена лимитной, стоп-заявки и стоп-лимиты, стакан до 50 уровней, котировки, лента, свечи, свои сделки, портфель, справочник. Страница: АЛОР.
  • Нет расписания торгов, справочника по ISIN и потока стоп-заявок. Рыночную заявку заменить нельзя.
  • Все остальные методы брокера доступны через raw(). Таблица: Покрытие API.
  • Исправлено: brokapi.testing из PyPI падал на машине пользователя.

0.1.0-alpha.1: открытая альфа

  • Код открыт: https://github.com/runinfra/brokapi, лицензия MIT OR Apache-2.0.
  • Пакеты опубликованы: cargo add brokapi --features bcs и pip install brokapi. Для Python готовые пакеты под Linux x86_64, macOS и Windows, на остальных системах расширение собирается при установке.
  • Коннекторы БКС, Т-Банка и Финама: рыночные данные, заявки, стоп-заявки, сверка со счетом, лимиты запросов, любой метод брокера через raw(). В Python те же возможности, плюс запись событий в файл и проигрыш (brokapi.record).
  • Как сообщить об уязвимости: SECURITY.md.

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

brokapi by RunInfra