Розробка алгоритму basis trading (спот-фьючерс)
Basis trading — одна з небагатьох DeFi-стратегій з передбачуваним джерелом доходу. Купуєш ETH спот, одночасно шортишь ETH perpetual фьючерс на тому ж обсягу. Дельта-нейтральна позиція. Funding rate на perpetual — твій дохід. Коли ринок бичачий, лонги платять шортам. У 2021-2023 роках це давало 20-60% APY без directional ризику.
Звучить просто. Але реалізація, що працює без втрат при різких рухах ринку, negative funding та margin calls — це інженерна задача.
Джерела ризику, які ломають прості реалізації
Funding rate розвертається
Funding rate на Binance Perp, dYdX, GMX, Hyperliquid — змінна величина. На бичачому ринку лонги платять шортам (positive funding, отримуєш). На ведмежому — навпаки (negative funding, платиш). Якщо твій алгоритм не уміє виходити з позиції при зміні режиму, negative funding буде з'їдати тіло.
Реалізація: threshold на negative funding rate. Якщо 8-часовий funding йде нижче -0.01% три періоди підряд — алгоритм починає закриття позиції. Не мгновенне (щоб не рухати ринок), а TWAP-виходом за кілька годин.
Ліквідація шорт-позиції при pump
Дельта-нейтральність — мантра, що ломається при екстремальних рухах. ETH виріс на 30% за годину. Твій шорт на perpetual втрачає маржу швидше, ніж ти встигаєш дозаказати залог. Якщо margin ratio падає нижче liquidation threshold — позиція примусово закривається. Спот залишається. Ти з дельта-нейтрального переходиш в дельта-лонга з убитком від ліквідації (зазвичай 0.5-1% від позиції як liquidation fee).
Рішення — буфер маржі. Тримати margin ratio на perpetual не у liquidation threshold, а з 2-3x запасом. При пампі — автодопповнення маржі зі спот-гаманця або закриття частини спот-позиції. Алгоритм слідкує за unrealizedPnL та marginRatio у реальному часі та діє до того, як біржа запустить примусову ліквідацію.
Roll management на dated futures
Якщо використовуєш dated futures (а не perpetuals), позиція закінчується. За 3-7 днів до експірації потрібна "ролювання": закрити поточний контракт та відкрити наступний. Різниця в ціні між ними — roll yield (може бути позитивною або негативною).
Автоматичний ролловер вимагає: моніторингу часу до експірації, розрахунку вартості ролла, виконання двох ордерів атомарно (або максимально близко за часом). На CEX це relative order: продати поточний та купити наступний через calendar spread order, якщо біржа підтримує (Binance, CME crypto). Якщо немає — ризик проскальзування між двома окремими ордерами.
Як будуємо алгоритм
Вибір площадок
| Площадка | Тип | Funding | Особливості |
|---|---|---|---|
| dYdX v4 | Perpetual DEX | 8h | Децентралізований, Cosmos-based |
| GMX v2 | Perpetual DEX | Hourly rate | Без orderbook, PnL проти LP пула |
| Hyperliquid | Perpetual DEX | 8h | Висока ліквідність, власний L1 |
| Binance Perp | CEX | 8h | Найбільший обсяг, зрілий API |
| Bybit | CEX | 8h | Гарна ліквідність alt-perps |
Для чистого DeFi підходу: спот на Uniswap V3, шорт на dYdX v4 або Hyperliquid. Для максимальної ліквідності та стабільності — Binance спот + Binance Perp (CEX ризик, але мінімальний slippage).
Розрахунок funding PnL
# Funding за період = notional * funding_rate
# funding_rate на більшості бірж — 8-hourly
funding_8h = position_size_usd * funding_rate_current
annualized_apy = funding_8h * 3 * 365 # 3 періоди на день, 365 днів
# Чистий APY з урахуванням roll та комісій
net_apy = annualized_apy - entry_exit_fees - borrow_cost - roll_cost
Алгоритм рахує net_apy для кожної потенційної позиції та входить тільки вище порога (наприклад, 15% APY після всіх витрат).
Execution engine
Відкриття позиції — не один ордер. Це скоординована дія:
- Перевірити доступну ліквідність на perpetual (bid/ask spread < threshold)
- Виставити limit ордер на спот (або market з мінімальним slippage)
- Одразу після виконання спот — виставити шорт на perpetual на тому ж обсягу
- Якщо perpetual не виконався за N секунд — закрити спот, почати заново
Розбіжність між виконанням спот та perpetual створює тимчасовий directional ризик. На ліквідних парах (BTC, ETH) — мілісекунди. На менш ліквідних альткойнів — секунди, і різниця цін може бути значимою.
Використовуємо WebSocket з'єднання з біржами для отримання fills у реальному часі. REST API для виставлення ордерів занадто повільний при активному ринку.
Моніторинг позиції
Критичні метрики для відстеження у реальному часі:
-
delta= спот позиція + perpetual позиція (повинна бути ~0) -
margin_ratioperpetual (alert при приближенні до 150% від liquidation threshold) -
funding_rateпоточна та 7-денне ковзне середнє -
funding_received_cumulativevsfees_paid_cumulative— actual PnL
PostgreSQL для історії. TimescaleDB для time-series даних (funding rates, ціни). Grafana для дашборда. PagerDuty або Telegram для алертів при приближенні margin call.
Орієнтири за часом
Алгоритм для однієї торгової пари на двох CEX (спот + perp) з базовим моніторингом — 1-1.5 тижня. З multi-pair, multi-exchange логікою, автоматичним roll management та повнофункціональним risk management — 2-3 тижні. Інтеграція з on-chain DEX perpetuals (dYdX, GMX) добавляє складність — окрема оцінка. Вартість розраховується після уточнення біржевих інтеграцій та вимог до ризиків.







