Изменения
Что появилось в библиотеке и что поменять в своем коде. Новое сверху.
Следующая версия
- Файлы
.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"в конфиге гейтвея. Поддержана категорияlinearAPI 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.
Листать можно клавишами Влево и Вправо.