Разработка алгоритма basis trading (спот-фьючерс)
Basis trading — одна из немногих DeFi-стратегий с предсказуемым источником дохода. Покупаешь ETH спот, одновременно шортишь ETH perpetual фьючерс на том же объёме. Дельта-нейтральная позиция. Funding rate на perpetual — твой доход. Когда рынок бычий, лонгисты платят шортистам. В 2021-2023 годах это давало 20-60% APY без направленного риска.
Звучит просто. Но реализация, которая работает без потерь при резких движениях рынка, 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 vs 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 risk. На ликвидных парах (BTC, ETH) это миллисекунды. На less liquid altcoins — секунды, и разница цен может быть значимой.
Используем WebSocket соединения с биржами для получения fills в реальном времени. REST API для выставления ордеров слишком медленный при активном рынке.
Мониторинг позиции
Критические метрики, которые нужно отслеживать в реальном времени:
-
delta= спот позиция + perpetual позиция (должна быть ~0) -
margin_ratioperpetual (алерт при приближении к 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 и полноценным риск-менеджментом — 2-3 недели. Интеграция с on-chain DEX perpetuals (dYdX, GMX) добавляет сложность — отдельная оценка. Стоимость рассчитывается после уточнения биржевых интеграций и требований к рискам.







