Задача
Криптовалютный рынок фрагментирован: один и тот же актив торгуется на нескольких централизованных биржах, в разных DEX и пулах ликвидности, в нескольких сетях, в нативном, обёрнутом и перенесённом через бридж виде, против разных стейблкоинов.
Для ручной торговли это набор ловушек. Данные приходят с разными схемами и задержками, символы и точность не совпадают, комиссия зависит от аккаунта и объёма, а котировка DEX меняется от размера сделки. Межсетевой маршрут состоит из обмена, бриджа и повторного обмена, у каждого шага свой gas и своё влияние на цену. Актив может прийти в другую сеть тогда, когда спред уже исчез. Исполнение одной ноги не гарантирует исполнение второй, а транзакция может зависнуть или откатиться. В сумме сделка, прибыльная до расходов, оказывается убыточной после исполнения.
Решение
Данные, которым можно доверять. Коллекторы собирают трейды, свечи, стаканы Level 2 и ставки финансирования. Туда же попадают балансы, состояние пулов DEX, котировки и оценки gas. Каждое сообщение получает метки времени, порядковый номер и флаги качества. При потере последовательности локальный стакан перестраивается из снапшота и инкрементов, и стратегия не работает с потоком, пока консистентность не восстановлена. Инструмент получает каноническую идентичность отдельно от символа биржи, и по ней один актив сопоставляется в разных парах, сетях и контрактах.
Аналитика объёма. Относительный объём сравнивается с распределением для того же инструмента, таймфрейма и периода суток, иначе обычный пик торговой сессии выглядел бы аномалией. Дальше идут VWAP, профиль объёма, кумулятивная дельта по стороне агрессора и дисбаланс стакана с учётом расстояния до mid-price. Отдельно оценивается средняя цена исполнения заданного объёма: результат после влияния сделки на рынок отличается от видимого спреда.
Жизненный цикл стратегии. Стратегия описывается конфигурацией и версионируется: версия, по которой уже прошли сделки, неизменна. Исторический реплей прогоняет рыночные события в исходной последовательности через ту же среду исполнения стратегий, что работает в реальной торговле. Реплей учитывает комиссии, спред, проскальзывание, глубину стакана и задержку исполнения. Для операций в блокчейне добавляются gas, комиссия бриджа и время межсетевого перевода. Затем идёт бумажная торговля на реальных данных с симулятором исполнения. Только после неё стратегия выходит на реальный рынок, и для этого нужны отдельное разрешение и назначенный торговый счёт.
Арбитраж как граф. Сканер строит граф, где узлы — актив, сеть и площадка. Рёбра — сделка на CEX, вывод, депозит, обмен на DEX, перевод через бридж, wrap и unwrap. Кандидат оценивается целиком: ожидаемый выход каждой ноги, комиссии, gas по каждой сети и комиссия бриджа, влияние на цену и резерв на проскальзывание. Учитываются и задержка, и время, на которое блокируется капитал. Маршрут допускается к исполнению, только если ожидаемое преимущество (edge) после всех издержек выше порога, а перед каждой критичной ногой котировка запрашивается заново.
Инвентарь в каждой сети. Гонять актив по цепочке слишком медленно для арбитража, поэтому капитал распределяется заранее: у каждой сети целевой баланс, минимальный резерв и лимит экспозиции. Ноги исполняются параллельно за счёт инвентаря, а сервис ребалансировки восстанавливает распределение позже.
План исполнения. До отправки ордеров формируется неизменяемый план: снимок возможности, версии рыночных данных, ноги маршрута, максимальное проскальзывание, дедлайны, компенсирующие действия и ключи идемпотентности. Оркестратор ведёт план через конечный автомат и фиксирует каждый переход.
Бридж как процесс. Перевод проходит состояния от котировки и подготовки транзакции в исходной сети до подтверждения в целевой. Пока актив не подтверждён на целевой сети, капитал считается заблокированным. По таймауту перевод не повторяется автоматически: сначала проверяются исходная транзакция, сообщение бриджа и события целевой сети, чтобы не создать двойную операцию.
Что делать, если прошла только одна нога. В политике маршрута заранее заданы компенсирующие сценарии: повторная котировка, хедж на резервной площадке, обратная сделка по исполненной ноге, перевод позиции в инвентарь или передача оператору.
Риск и ключи. Риск-движок работает до, во время и после сделки: предторговые проверки, лимиты по активу, сети, площадке и стратегии, дневной лимит убытка. Есть аварийная остановка, режим, в котором позиции можно только сокращать, и изоляция сбойной площадки. Приватные ключи не живут в клиентском приложении: отдельные доступы на чтение и торговлю, запрет прав на вывод, белый список адресов, изолированный сервис подписи. Стратегия формирует намерение сделки, но ключа не получает.
Результат
Платформа не обещает доходность. Она объясняет результат: PnL раскладывается по стратегии, боту, активу, площадке, сети, маршруту и ноге исполнения. Валовой результат отделён от комиссий, gas, платы за бридж, проскальзывания, стоимости ребалансировки и цены неудачных исполнений. Видно, где стратегия создаёт ценность, а где теоретический спред съедается исполнением.
Сверка сравнивает внутренний реестр с внешними балансами, ордерами и транзакциями блокчейна, а расхождения уходят в очередь операторов. Для каждого решения аудит хранит версию стратегии, входные события, признаки и сигнал. Рядом лежат решение риск-движка, котировка, план и ответы площадок, и по этой записи можно ответить, почему бот совершил сделку, какие данные он видел и где возникло отклонение.
Доступ разделяет исследование и реальную торговлю: исследователь работает с бэктестами, трейдер запускает бумажную торговлю и запрашивает выход на реальный рынок, риск-менеджер утверждает лимиты, оператор ведёт инциденты, не видя приватных ключей. Критичные изменения — учётных данных, капитала для реальной торговли и риск-лимитов — проходят только с двойным подтверждением.