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

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Разработка алгоритма triangular арбитража
Сложный
~1-2 недели
Часто задаваемые вопросы

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

Этапы блокчейн-разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    902
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1122
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    859

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

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

Принцип triangular арбитража

Цикл из трёх пар: A → B → C → A

Пример:

  • BTC/USDT: 45,000 (1 BTC = 45,000 USDT)
  • ETH/USDT: 3,000 (1 ETH = 3,000 USDT)
  • ETH/BTC: 0.0668 (1 ETH = 0.0668 BTC)

Теоретически: 1 ETH должен стоить 3000/45000 = 0.0667 BTC. Реально: 1 ETH = 0.0668 BTC. Неcоответствие = 0.01 BTC (~$45).

Торговый цикл:

  1. Продаём 45,000 USDT → покупаем 15 ETH (по ETH/USDT 3000)
  2. Продаём 15 ETH → получаем 1.002 BTC (по ETH/BTC 0.0668)
  3. Продаём 1.002 BTC → получаем 45,090 USDT (по BTC/USDT 45,000)

Profit: 90 USDT − fees. Если 3 × taker fee 0.04% = 0.12% ≈ 54 USDT → net profit ~$36.

Формула прибыльности цикла

def calculate_cycle_profit(pair1_rate, pair2_rate, pair3_rate, fee=0.001):
    """
    Проверяем цикл: USDT → BTC → ETH → USDT
    """
    # Начинаем с 1 USDT
    after_trade1 = (1 / pair1_rate) * (1 - fee)   # USDT → BTC
    after_trade2 = (after_trade1 / pair2_rate) * (1 - fee)  # BTC → ETH  
    after_trade3 = after_trade2 * pair3_rate * (1 - fee)    # ETH → USDT
    
    profit = after_trade3 - 1  # > 0 = profitable
    return profit

Поиск прибыльных циклов

Граф подход: строим граф валют, где рёбра — торговые пары с весами (log обменных курсов). Ищем отрицательные циклы алгоритмом Bellman-Ford.

import networkx as nx
import math

def find_arbitrage_cycles(tickers):
    G = nx.DiGraph()
    
    for symbol, ticker in tickers.items():
        base, quote = symbol.split('/')
        bid = ticker['bid']
        ask = ticker['ask']
        
        if bid > 0:
            # base → quote: продаём base, получаем quote
            G.add_edge(base, quote, weight=-math.log(bid))
        if ask > 0:
            # quote → base: покупаем base, платим quote
            G.add_edge(quote, base, weight=-math.log(1/ask))
    
    # Ищем отрицательные циклы (прибыльные арбитражи)
    try:
        cycle = nx.find_negative_cycle(G, source='USDT')
        return cycle
    except nx.NetworkXError:
        return None

Скорость исполнения критична

Triangular арбитраж — высококонкурентная ниша. Возможности длятся 100–500ms. Оптимизации:

Pre-computed paths: не вычисляем циклы с нуля при каждом обновлении. Заранее определяем все возможные тройки, в реальном времени только проверяем их прибыльность.

Selective monitoring: не мониторим все пары (на Binance ~2000). Выбираем топ-50 по объёму.

Order preparation: все параметры ордеров (symbol, quantity, price) вычисляются заранее, отправляем при срабатывании.

WebSocket для всех пар: REST polling слишком медленный. Binance поддерживает stream нескольких пар: wss://stream.binance.com/stream?streams=btcusdt@bookTicker/ethusdt@bookTicker/ethbtc@bookTicker

Расчёт оптимального размера сделки

def optimal_trade_size(step1_depth, step2_depth, step3_depth, max_slippage=0.001):
    """
    Максимальный объём при котором slippage не съедает прибыль
    """
    # Для каждого шага: сколько объёма можем взять в пределах max_slippage
    size1 = get_available_liquidity(step1_depth, max_slippage)
    size2 = get_available_liquidity(step2_depth, max_slippage)
    size3 = get_available_liquidity(step3_depth, max_slippage)
    
    # Минимальное из трёх — наше ограничение
    return min(size1, size2, size3)

Риски

Partial fill: один из трёх ордеров исполнился частично. Возникает открытая позиция. Нужен обработчик: немедленно закрыть остаток по рынку.

Stale data: если данные о ценах устарели (> 200ms) — пропускаем возможность.

API rate limits: три одновременных ордера потребляют три API request. При сотнях сигналов в минуту можно упереться в limits.

Front-running: маркет-мейкеры видят паттерн и закрывают арбитражный спред быстрее нас.

Реалистичные ожидания

На топовых парах (BTC/ETH/BNB) triangular арбитраж крайне конкурентен — профессиональные HFT боты закрывают спреды за миллисекунды. Возможности чаще на менее ликвидных altcoin парах, но там выше slippage и меньше объём.

Разрабатываем triangular arb систему с граф-алгоритмом поиска циклов, real-time мониторингом через WebSocket, параллельным исполнением трёх ордеров и обработчиком partial fills.