Как добавить вторую биржу, не переписывая первую
Мультибиржевость — это не про поддержку большего числа площадок. Это про то, чтобы в коде было ровно одно место, знающее, чем именно странна конкретная площадка.
Инженеры Vizanix · об авторе
- РАЗДЕЛ
- Архитектура ботов
- ОПУБЛИКОВАНО
- 2026-08-31
- ГЛАВ
- 5
- ЧИТАТЬ ДАЛЬШЕ
- 3
- ЯЗЫК
- написано на русском
Запрос обычно приходит как «а Binance он тоже сможет?», и ответ полностью зависит от решения, принятого месяцами раньше: было ли поведение, специфичное для площадки, изолировано или размазано по коду.
Граница адаптера
Один интерфейс, реализованный по площадке. Всё, что выше него, говорит в нормализованных терминах и никогда не видит поле, специфичное для биржи.
class Venue(Protocol):
async def instruments(self) -> list[Instrument]: ...
async def place(self, order: Order) -> OrderAck: ...
async def cancel(self, order_id: str) -> None: ...
async def positions(self) -> list[Position]: ...
async def subscribe(self, topics: list[Topic]) -> AsyncIterator[Event]: ...
# Всё выше этой линии не зависит от площадки.
# Всё ниже знает причуды ровно одной площадки и больше ничего.Проверка, настоящая ли граница: можете ли вы написать тест стратегии, использующий фиктивную площадку и не импортирующий ничего биржеспецифичного? Если нет, абстракция протекает, и вторая биржа обернётся переписыванием.
Что на самом деле различается между площадками
| Аспект | Как варьируется |
|---|---|
| Именование символов | BTCUSDT, BTC-USDT, BTC/USDT, XBTUSD |
| Единицы количества | Базовая валюта, контракты или номинал |
| Модель позиции | One-way, hedge mode или оба с разными флагами |
| Типы ордеров | Reduce-only, post-only, conditional — различаются поддержка и семантика |
| Лимиты запросов | Другие оси, другие окна, другие заголовки |
| Правила точности | Шаг цены и лота и то, где применяется округление |
| Коды ошибок | Совершенно разные пространства с пересекающимися смыслами |
| Время | Миллисекунды, микросекунды и разная дисциплина часов |
Каждое — мелочь, которая порождает тонкий баг при протечке наверх. Единицы количества — классика: бот, предполагающий базовую валюту и встретивший площадку, которая котирует в контрактах, поставит ордер в сто раз больше нужного — и сделает это успешно.
Реестр инструментов оправдывает своё место
Одна структура на торгуемый инструмент, заполняемая адаптером и потребляемая всем остальным. Площадка, категория, символ как его пишет площадка, канонический символ как его пишет ваша система, шаг цены, шаг лота, минимальное количество, минимальный номинал, множитель контракта и что означает единица количества.
Обновляйте по расписанию. Площадки меняют лотность и добавляют инструменты, а реестр, закэшированный в момент деплоя, со временем начинает ставить ордера, отклоняемые по причинам, которые никто не может воспроизвести.
Риск общий, иначе это не риск
Важнейшее следствие мультибиржевости не техническое. Если у каждой площадки свой учёт риска, то бот, у которого лонг BTC на одной бирже и лонг BTC на другой, считает, что держит две независимые позиции.
Он держит одну. Экспозиция, лимиты просадки и группы корреляции должны считаться по всей книге, в одной валюте, на один момент. Это тот же аргумент, что в риск-движке, и мультибиржевость — то место, где он перестаёт быть теоретическим.
Чего не надо строить
- Универсальный тип ордера. Поддерживайте реально существующее пересечение. Синтетический тип, эмулируемый по-разному на каждой площадке, — источник сюрпризов.
- Межбиржевой неттинг, которого биржи не делают. Ваша модель должна совпадать с тем, что площадки реально рассчитывают, а не с тем, что было бы удобно.
- Агрегированные стаканы, если они вам не нужны. Объединённый стакан по площадкам с разными комиссиями, задержками и расчётами — это не стакан, против которого можно торговать.
- Абстракцию площадок до появления второй площадки. Постройте первую чисто, с границей на месте. Обобщайте, когда есть два реальных случая, а не один воображаемый.
Последний пункт практический. Хорошо структурированная одноплощадочная система расширяется за дни. Преждевременно обобщённая расширяется неделями и содержит догадки о площадке, которую ещё никто не интегрировал.
Статья описывает инженерную практику. Это не инвестиционная рекомендация. Vizanix разрабатывает программное обеспечение и не обещает торговую доходность.