Свой брокер
Объяснение для тех, кому нужен брокер, которого в 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
- Крейт протокола (
brokapi-<брокер>-protocol): HTTP, WebSocket или gRPC брокера, без логики библиотеки. - Крейт коннектора (
brokapi-<брокер>): трейты выше. - Имитацию в
brokapi-mocksи прогон общих сценариев на ней. - Строку брокера в
brokapi-client, флаг вbrokapi, страницу брокера в книге и строку в Покрытии API.
Начните с issue в репозитории: что за брокер, где документация его API, есть ли песочница. Так проще договориться до того, как написано много кода.
Листать можно клавишами Влево и Вправо.