Задача
Криптовалютный рынок фрагментирован: один и тот же актив торгуется на нескольких централизованных биржах, в разных DEX и пулах ликвидности, в нескольких сетях, в native-, wrapped- и bridged-представлениях, против разных стейблкоинов.
Для ручной торговли это набор ловушек. Данные приходят с разными схемами и задержками, символы и precision не совпадают, комиссия зависит от аккаунта и объёма, а котировка DEX меняется от размера сделки. Межсетевой маршрут — это не одна операция, а swap, bridge и повторный swap, каждый со своим gas и price impact, и актив может прийти в другую сеть тогда, когда спред уже исчез. Исполнение одной ноги не гарантирует исполнение второй, а транзакция может зависнуть или откатиться. В сумме сделка, прибыльная до расходов, оказывается убыточной после исполнения.
Решение
Данные, которым можно доверять. Коллекторы собирают трейды, свечи, стаканы Level 2, funding rates, балансы, состояние пулов DEX, котировки и оценки gas; каждое сообщение получает timestamps, sequence и quality flags. При потере последовательности локальный стакан перестраивается из снапшота и инкрементов, и стратегия не работает с потоком, пока консистентность не восстановлена. Инструмент получает каноническую идентичность отдельно от символа биржи — только так один актив сопоставляется в разных парах, сетях и контрактах.
Аналитика объёма. Относительный объём сравнивается не с абстрактной средней, а с распределением для того же инструмента, таймфрейма и периода суток — иначе обычный пик торговой сессии выглядит как аномалия. Дальше идут VWAP, volume profile, кумулятивная дельта по стороне агрессора и дисбаланс стакана с учётом расстояния до mid-price. Отдельно оценивается средняя цена исполнения заданного объёма: видимый спред и реально доступный результат после market impact — разные величины.
Жизненный цикл стратегии. Стратегия описывается конфигурацией и версионируется: версия immutable для уже совершённых сделок. Исторический реплей прогоняет рыночные события в исходной последовательности через ту же strategy runtime, что работает в live, и учитывает комиссии, спред, проскальзывание, глубину стакана, задержку исполнения, gas, bridge fee и время межсетевого перевода. Дальше — paper trading на реальных данных с симулятором исполнения, и только потом live, для которого нужны отдельное разрешение и назначенный торговый счёт.
Арбитраж как граф. Сканер строит граф, где узлы — актив, сеть и площадка, а рёбра — сделка на CEX, вывод, депозит, swap на DEX, bridge transfer, wrap и unwrap. Кандидат оценивается целиком: ожидаемый выход каждой ноги, комиссии, gas по каждой сети, bridge fee, price impact, резерв на проскальзывание, задержка и время блокировки капитала. Маршрут допускается к исполнению, только если чистый edge превышает порог, а перед каждой критичной ногой котировка запрашивается заново.
Инвентарь вместо последовательного перевода. Гонять актив по цепочке слишком медленно для арбитража, поэтому капитал распределяется заранее — с целевым балансом, минимальным резервом и лимитом экспозиции для каждой сети. Ноги исполняются параллельно за счёт инвентаря, а сервис ребалансировки восстанавливает распределение позже.
План исполнения. До отправки ордеров формируется неизменяемый execution plan: снимок возможности, версии рыночных данных, ноги маршрута, максимальное проскальзывание, дедлайны, компенсирующие действия и ключи идемпотентности. Оркестратор ведёт план через конечный автомат и фиксирует каждый переход.
Bridge как процесс, а не действие. Перевод проходит состояния от котировки и подготовки транзакции в исходной сети до подтверждения в целевой. Пока актив не подтверждён на целевой сети, капитал считается заблокированным. Таймаут не означает автоматический повтор — сначала проверяются исходная транзакция, сообщение бриджа и события целевой сети, чтобы не создать двойную операцию.
Что делать, если прошла только одна нога. В политике маршрута заранее заданы компенсирующие сценарии: повторная котировка, хедж на резервной площадке, unwind исполненной ноги, перевод позиции в инвентарь или передача оператору.
Риск и ключи. Risk engine работает до, во время и после сделки: pre-trade проверки, лимиты по активу, сети, площадке и стратегии, дневной лимит убытка, kill switch, reduce-only, изоляция сбойной площадки. Приватные ключи не живут в клиентском приложении: отдельные read- и trade-доступы, запрет прав на вывод, allowlist адресов, изолированный сервис подписи. Стратегия формирует intent, но ключа не получает.
Результат
Платформа не обещает доходность — она делает результат объяснимым. PnL раскладывается по стратегии, боту, активу, площадке, сети, маршруту и ноге исполнения, а валовой результат отделяется от комиссий, gas, bridge-fee, проскальзывания, стоимости ребалансировки и цены неудачных исполнений. Видно, где стратегия создаёт ценность, а где теоретический спред съедается исполнением.
Сверка сравнивает внутренний ledger с внешними балансами, ордерами и транзакциями блокчейна, а расхождения уходят в очередь операторов. Аудит хранит для каждого решения версию стратегии, входные события, признаки, сигнал, решение риск-движка, котировку, план и ответы площадок — можно ответить, почему бот совершил сделку, какие данные он видел и где возникло отклонение.
Доступ разделяет исследование и реальную торговлю: исследователь работает с бэктестами, трейдер запускает paper и запрашивает деплой в live, риск-менеджер утверждает лимиты, оператор ведёт инциденты, не видя приватных ключей. Критичные изменения — credentials, live-капитал и риск-лимиты — требуют двойного подтверждения.