Розробка алгоритму трикутного арбітражу

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка алгоритму трикутного арбітражу
Складний
~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. Невідповідність = 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)

Прибуток: 90 USDT − комісії. Якщо 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 = прибутковий
    return profit

Пошук прибутникових циклів

Graph підхід: будуємо граф валют, де рёбра — торговельні пари з вагами (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 не з'їдає прибуток
    """
    # Per step: скільки обсягу можемо взяти в межах 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 requests. На сотнях сигналів на хвилину можемо упертися в limits.

Front-running: market makers бачать паттерн, закриває arb спред швидше за нас.

Реалістичні очікування

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

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