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

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

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

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

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

Свой брокер

Объяснение для тех, кому нужен брокер, которого в brokapi нет: как его подключить сейчас и что для этого есть.

Сейчас: через pull request

Пять брокеров встроены в клиент (brokapi-client): по их списку работают Python, гейтвей и программа brokapi. Список закрыт, поэтому новый брокер попадает туда только через pull request в репозиторий. Открытой точки расширения, чтобы подключить свой коннектор к Python и гейтвею без форка, пока нет, она будет после беты. Почему так: встроенный брокер проходит общие сценарии на своей имитации и попадает в каждую проверку выпуска, а коннектор, подключенный снаружи, такой гарантии не дает.

На Rust свой коннектор можно держать и у себя, без pull request: библиотека работает через трейты, и ваш тип, который их реализует, ваш код использует так же, как встроенные коннекторы.

Что реализует коннектор

Трейты из brokapi-core (справочник Rust). Коннектор рыночных данных и коннектор счета - два типа, как у встроенных брокеров:

ТрейтЧто даетКто реализует
Connectorвозможности (caps) и остановкаоба
InstrumentSourceпоиск инструмента, правила торговли, статус, расписаниерыночные данные
OrderBookSourceстакан и подписка на негорыночные данные
MarketDataSourceлента, котировки, свечи и подписки на нихрыночные данные
OrderExecutorзаявки: place, cancel, replace, order_state, reconcileсчет
ExecutionSourceсделки и подписка на нихсчет
PortfolioSourceпортфель, позиции и подпискасчет
StopOrderExecutorстоп-заявки, если брокер их держит у себясчет, по желанию

Правила, которые коннектор обязан держать (номер заявки cid, Unknown вместо догадки, шлюз команд до сверки, лимиты), собраны в Контракте для агентов и разобраны в Круге команд и Круге жизни.

Как проверить свой коннектор

Крейт brokapi-conformance (на crates.io с версии 0.1.0-alpha.9) - 36 общих сценариев, которые проходят все встроенные брокеры: постановка и отмена, отказ, повтор cid, потерянный ответ, стоп-заявки, история, потоки, сверка. Сценарий - async fn, он принимает ваш коннектор и падает с понятным сообщением [conformance:<сценарий>], если контракт нарушен. Пример вызова и список того, что должна уметь имитация вашего брокера, - в документации крейта на docs.rs.

Имитацию своего брокера пишете вы: сервер на 127.0.0.1, который говорит на протоколе брокера по его документации. Как устроены наши, видно по brokapi-mocks (тоже на crates.io с версии 0.1.0-alpha.9).

Что приложить к pull request

  1. Крейт протокола (brokapi-<брокер>-protocol): HTTP, WebSocket или gRPC брокера, без логики библиотеки.
  2. Крейт коннектора (brokapi-<брокер>): трейты выше.
  3. Имитацию в brokapi-mocks и прогон общих сценариев на ней.
  4. Строку брокера в brokapi-client, флаг в brokapi, страницу брокера в книге и строку в Покрытии API.

Начните с issue в репозитории: что за брокер, где документация его API, есть ли песочница. Так проще договориться до того, как написано много кода.

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

brokapi by RunInfra