Разработка алгоритма triangular арбитража для криптобирж

Ручной поиск связок отнимает время, а прибыльные окна закрываются за секунды. Мы разрабатываем алгоритм triangular арбитража под ключ: от расчёта связок до автономного исполнения сделок. Наши инженеры настраивают контур так, чтобы решения принимались быстрее ручных, а результат был предсказуемым.
Часто задаваемые вопросы

Triangular арбитраж: где алгоритм теряет прибыль

Triangular арбитраж выглядит как безрисковая операция: алгоритм замечает расхождение между тремя парами и проходит замкнутый цикл внутри одной площадки. На бумаге прибыль считают по последним сделкам, но связка из трёх пар исполняется последовательно — и каждая нога меняет условия для следующей.

Первый источник потерь — проскальзывание при исполнении. Пока вторая нога доходит до стакана, лучшая цена уже выбрана соседними роботами, и ордер проходит по уровням ниже. На узких парах даже небольшой объём сдвигает котировку на десятые доли процента, а таких сдвигов в цикле три, и они складываются.

Второй — комиссии торговых площадок. Их платят на каждом плече, плюс спред, плюс перевод средств между биржами, если цикл межбиржевой. Разница, которую ловит алгоритм, нередко сопоставима с суммой издержек, поэтому расчёт по верхним котировкам показывает прибыль там, где её нет.

Третий и самый опасный — частичное исполнение ордера вместе с задержкой отклика площадок. Пока третья нога ждёт подтверждения, цена уходит, и половина связки остаётся открытой: вместо замкнутого цикла мы получаем направленную позицию, которую рынок может развернуть против нас.

Дальше разбираем, как это закрывается: где ставить фильтры по ликвидности, как считать прибыль с учётом издержек на всех трёх участках и что делать с ногами, которые не исполнились.

Что даёт автоматический поиск связок в реальном времени

Ручной поиск связок ограничен вниманием трейдера: пока считается один треугольник, цена в двух других ногах уже ушла. Автоматический поиск связок работает иначе — контур непрерывно перебирает треугольники по трём инструментам, считает результат с учётом комиссий, спреда и доступной глубины стакана и отбрасывает циклы, где издержки съедают разницу. Ключевая метрика здесь не «сколько связок нашлось», а доля прибыльных циклов — доля тех, что дошли до закрытия всех трёх ног с положительным итогом.

Скорость реакции контура решает, дойдёт ли сигнал до стакана: между расчётом и выставлением первой ноги есть окно, в котором цена меняется. Поэтому три заявки строятся параллельно, а не последовательно, и оставшиеся ноги пересчитываются сразу при частичном исполнении — цикл либо закрывается целиком, либо разбирается с минимальным остатком. Отдельная часть работы — учёт лимитов биржи: на Binance частота запросов пересчитывается динамически, и темп снижается заранее, а не после блокировки.

Контроль риска на сделку задаётся до старта: лимит объёма на цикл, лимит на инструмент и на биржу, запрет пересекающихся треугольников. Если одна нога не набралась, срабатывает правило выхода — разворот в рынок или отмена остатка. Журнал исполнения пишет каждую ногу: время отправки и срабатывания, фактическую цену, объём и причину отказа. По нему видно, где именно теряется результат — в задержке, в комиссии или в ликвидности.

Режимы исполнения: сравнение подходов к сделкам

Автономность контура — переменная, а не свойство. Один и тот же треугольный арбитраж можно вести в трёх режимах: от наблюдения за связками до полного автоисполнения. Разница в том, кто принимает решение о входе и сколько проверок стоит между сигналом и ордером.

Режим Когда подходит Что ограничивает
Режим мониторинга Первичная проверка гипотезы, незнакомые площадки, тонкие пары Сделки вручную — реакция запаздывает, окно расхождения закрывается до входа
Полуавтоматическое исполнение Робот считает связку и готовит ордера, человек подтверждает Подтверждение добавляет задержку, часть связок не переживает ожидания
Полное автоисполнение Отработанные сценарии, стабильная ликвидность Ошибка настройки тиражируется без остановки — нужны жёсткие лимиты

Независимо от режима контур собираем с лимитами на позицию: предел на объём одной связки, на объём по каждой площадке и на суммарный объём по всем парам. В распределённом контуре узлы мониторинга и исполнения разнесены — сбой одной площадки не останавливает остальные связки, а очередь сигналов продолжает обрабатываться.

Переключение режимов делаем параметром, а не переписыванием логики. Вы начинаете с наблюдения, включаете подтверждение сделок, затем снимаете его на сценариях, которые отработали без расхождений.

Как строится алгоритм: этапы инженерной работы

Цена ошибки в арбитражной цепочке — не неверный расчёт, а нога, повисшая без закрытия: проскальзывание и задержка между площадками съедают спред быстрее, чем приходит сигнал. Поэтому алгоритм собираем этапами, и каждый этап заканчивается артефактом, по которому принимается решение о переходе дальше.

  1. Аудит торговых площадок. Отбираем биржи с нужными парами, сопоставимой ликвидностью и предсказуемыми комиссиями. Проверяем лимиты на вывод, методы пополнения и стабильность потока котировок — цепочка не должна упираться в инфраструктуру площадки.
  2. Схема связок. Строим граф пар вида A→B→C→A и отсекаем цепочки, где комиссии съедают спред. Для каждой связки фиксируем порог входа и допустимое проскальзывание.
  3. Математическая модель. Считаем размер позиции с учётом комиссий тейкера и мейкера, глубины стакана и задержки между площадками. Определяем, как распределяется объём по ногам и где ставится стоп.
  4. Проверка на истории. Прогон на накопленных данных с реальными комиссиями, отказами и задержками. Смотрим, сколько связок выживает после издержек, и убираем ложные сигналы.
  5. Исполнительный контур. Отправка ордеров, контроль частичного исполнения и логика аварийного закрытия ноги. Отдельно прописываем правила остановки при расхождении баланса.
  6. Запуск на малых объёмах. Работа на реальном рынке с ограниченным размером позиции: сверяем фактические издержки с модельными и правим пороги входа.
  7. Передача в эксплуатацию. Отдаём контур с настройками, оповещениями и регламентом остановки, обучаем команду заказчика.

Последовательность не даёт перейти к реальной торговле, пока модель не подтверждена издержками рынка.

Что входит в поставку: код, конфигурации, регламенты

Сдача проекта — это не демонстрация удачной связки на экране, а комплект, с которым ваши инженеры могут самостоятельно запускать, сопровождать и развивать контур. Каждый артефакт передаём в том виде, в котором сами им пользуемся: с описанием параметров, границ применимости и порядка действий при отклонениях.

  • Исходный код контура — модули сбора рыночных данных, расчёта связок, планирования и выставления заявок, учёта балансов. Репозиторий с историей изменений и воспроизводимой сборкой, без закрытых зависимостей, которые вы не сможете поддерживать своими силами.
  • Файлы конфигурации — пороги доходности, лимиты на размер одной позиции и суммарный объём открытых позиций, ограничения по времени ожидания ответа, перечни торговых пар и площадок. Разделены по средам, чтобы тестовый прогон физически не мог отправить реальную заявку.
  • Панель наблюдения — активные связки, отклонённые сигналы с указанием причины отказа, состояние каналов получения данных, задержка исполнения и расхождение между расчётным и фактическим результатом сделки.
  • Регламент эксплуатации — порядок запуска и остановки, действия при расхождении балансов, обрыве потока данных или серии отклонённых заявок, процедура возврата на предыдущую версию.
  • Права доступа к ключам — схема разделения ролей: торговые ключи без права вывода средств, отдельные учётные записи для тестового и рабочего контуров, ротация и порядок отзыва.
  • Описание параметров и журнал решений — почему выбран такой горизонт расчёта и порог входа, какие гипотезы проверяли и почему отклонили.

Приёмка идёт по чек-листу: запускаем контур на вашей инфраструктуре, прогоняем типовые сбои и убеждаемся, что регламент позволяет вашей команде восстановиться без нас.

Кейс: от ручных сделок к автономному контуру

Заказчик — команда, которая вела triangular арбитраж вручную: трейдер держал перед собой стаканы трёх бирж, считал цепочку A→B→C→A в таблице и успевал собрать связку только тогда, когда расхождение держалось несколько минут. На 40+ парах ручной обход занимал 40–60 секунд, часть маршрутов не проверялась вовсе, а расхождение успевало закрыться раньше, чем уходила заявка. Отдельная боль — частично исполненные связки: одна нога проходила, две нет, и позиция висела в неверной валюте до ручного разбора.

Собрали автономный контур: потоковые стаканы с бирж сходятся в граф маршрутов, расчёт учитывает комиссии, лимиты и проскальзывание по каждому плечу, заявки уходят пакетом с жёстким ограничением по времени. Перед отправкой контур сверяет ликвидность по всем ногам — если хотя бы одна не проходит, связка отбрасывается до сделки, а не после. Для отсева битых котировок подключили CoinGecko как независимый источник сверки курсов.

Что изменилось за первый месяц: время от обнаружения расхождения до заявки — 1–2 секунды вместо 40–60, доля исполненных связок выросла с 55% до 88% за счёт отсева неликвидных маршрутов, класс отказов «зависшая нога» не повторился ни разу. Ручные связки оставили только как контрольный режим для проверки новых маршрутов — основной поток идёт автономно.

Чем triangular арбитраж отличается от межбиржевого

Triangular арбитраж замыкается внутри одной площадки: три ноги — A→B, B→C, C→A — исполняются в её же стакане, расчёт идёт в единой учётной единице биржи. Актив не покидает контур площадки: между ногами нет блокчейн-перевода, только ордера.

Межбиржевая связка устроена принципиально иначе. Одну ногу закрывают на первой бирже, вторую — на второй, а между ними позицию нужно физически перенести. Этот перенос и есть источник всех различий — по риску, скорости и стоимости.

Он же порождает риск перевода средств: пока актив идёт по сети, его нет ни в торговом балансе, ни в управлении. Зачисление зависит от загрузки сети, числа подтверждений и внутренних правил площадки на приём, а сетевая комиссия списывается с каждой такой операции.

Скорость закрытия связки отличается по той же причине. Внутри площадки три ноги уходят почти одновременно, окно измеряется секундами, расхождение курсов закрывается на одном балансе. При переносе окно задаёт не трейдер, а сеть: за время ожидания спред схлопывается, и связка закрывается уже по другим ценам.

Поэтому межбиржевую схему строят не на переводе под каждую сделку, а на заранее подготовленных балансах на обеих площадках — тогда перенос уходит в фон. Triangular такой подготовки не требует, но жёстче к глубине стакана и уровню комиссий, а межбиржевой вариант чувствителен именно к стоимости и времени перевода.

Технические сомнения перед началом работ

Перед стартом обсуждаем не только логику поиска треугольников, но и поведение системы в момент сбоя. Ниже — вопросы, которые задают чаще всего: устойчивость к нагрузке, лимиты площадок и защита ключей доступа.

Что происходит при всплеске волатильности или обрыве связи с площадкой?

Поток котировок идёт через очередь с ограничением одновременных запросов, ордера отправляются идемпотентно — повтор не создаёт дубль. При разрыве соединения стратегия уходит в пассивный режим: позиции сверяются с фактическими балансами и историей сделок перед возобновлением, а расхождение останавливает торговлю вместо «догоняния» рынка.

Как система реагирует на изменение правил площадки?

Комиссии, шаг цены и минимальный размер ордера читаются из конфигурации площадки, а не зашиты в код. Если правила сместились, треугольник перестаёт быть прибыльным — расчёт пересчитывается до постановки ордера, а сигналы с неактуальными параметрами отбрасываются.

Как устроена защита ключей доступа?

Ключи лежат в защищённом хранилище секретов, выдаются отдельно на каждую площадку и стратегию и ротируются по расписанию. Право на вывод у торговых ключей отключено, доступ ограничен списком разрешённых адресов — утечка не даёт доступа к балансу.

Кто останавливает торговлю и как учитываются лимиты на вывод?

Есть ручной стоп и автоматические триггеры: серия отказов площадки, аномальный спред, просадка сверх порога, потеря связи дольше заданного окна. Лимиты на вывод учитываются в резерве: система не отправит актив, если это нарушит суточное ограничение площадки или оставит стратегию без оборотных средств.

Обсудим задачу и вернёмся с планом работ

Чтобы стартовать по triangular арбитражу, нужна согласованная картина задачи: биржи и пары в периметре, ограничения по объёму позиции и кто на стороне заказчика принимает результат. Ниже — что потребуется от вас и как выглядит первый шаг.

  • Постановка задачи: перечень бирж, торговых пар и контуров, допустимая просадка, лимиты на размер позиции и число одновременных сделок.
  • Доступы и данные: ключи с правами только на чтение и торговлю, без вывода средств; доступ к потокам котировок и истории сделок.
  • Модель издержек: комиссии по уровням объёма, спред и глубина стакана по каждой паре — от них зависит порог входа в сделку.
  • Инфраструктура: где размещается исполнительный контур, какие каналы связи и требования к задержке исполнения.
  • План работ: разбор задачи, прототип на исторических данных, тестовый контур, вывод в рабочий режим, сопровождение.
  • Оценка сроков: по этапам, с точками сверки после прототипа и после тестового прогона.
  • Порядок согласования: ответственный за приёмку, критерии готовности, правила остановки и отката при отклонении от расчётной доходности.

Опишите задачу и текущую инфраструктуру — вернёмся с оценкой сроков и планом работ по этапам.

Направления блокчейн-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139