Типова крипто-стратегія «купи та тримай» залишає вас на милість ринкових циклів. А що, як заробляти на відносній неефективності двох пов'язаних активів, не гадаючи на напрямок біткоїна? Рішення — парна торгівля (pairs trading). Це статистичний арбітраж: ми одночасно відкриваємо довгу позицію в одному активі та коротку в іншому, роблячи ставку на зближення спреду. Прибуток виникає з різниці цін, незалежно від загального руху ринку. У цій статті розберемо технічні деталі: від вибору коінтегрованих пар до калібрування динамічного hedge ratio та управління ризиками.
Багато трейдерів роблять ту саму помилку — обирають пари інтуїтивно, без статистичної перевірки. Котирування можуть здаватися пов'язаними, але без коінтеграції стратегія швидко зіллє депозит. Наш підхід базується на формальних критеріях: тест Енгла-Грейнджера, half-life спреду та ліквідність. Наприклад, зв'язка BTC spot і BTC perpetual futures показує p-value < 0.01 і half-life близько 7 днів — ідеально для парної торгівлі.
Наша команда розробляє такі алгоритми під ключ: від ідеї до готового торгового робота з дашбордом та риск-менеджментом. Досвід — 5+ років на крипторинку, 30+ впроваджених систем. Зв'яжіться з нами — оцінимо вашу ідею за 1 день.
Як вибрати пару для торгівлі?
Не всі пари підходять. Ми використовуємо такі критерії відбору:
| Критерій | Опис | Метрика |
|---|---|---|
| Коінтеграція | Статистична залежність, p-value < 0.05 | Тест Engle-Granger або Johansen |
| Економічний сенс | Фундаментальний зв'язок: spot vs perpetual, близькі за типом активи | — |
| Ліквідність | Мінімальний обсяг для виконання без прослизання | Ковзне середнє обсягу за 24 год |
| Half-life | Період напівповернення до середнього | 3–30 днів |
p-value перевіряється кожні 2–4 тижні — коінтеграція може зникнути. Актуальні пари: BTC spot vs perpetual, ETH vs stETH, SOL vs AVAX, DOT vs ATOM.
Як розраховується half-life?
Half-life — це час, за який спред повертається до середнього значення на 50%. Обчислюється через логарифм відношення автокореляції: τ = -ln(2)/ln(ρ), де ρ — коефіцієнт автокореляції першого порядку спреду. Для парної торгівлі бажані значення від 3 до 30 днів.Динамічний hedge ratio: чому фіксований не працює?
Проста OLS-регресія на повній історії дає грубу помилку. Ми використовуємо ковзне вікно (наприклад, 60 днів) або Kalman Filter для безперервного оновлення β. Kalman Filter знижує середню помилку на 40% порівняно з OLS. Різка зміна β (>20%) — сигнал про структурний зсув: алгоритм призупиняє торгівлю.
| Метод | Середня помилка | Чутливість до викидів | Вимагає налаштування |
|---|---|---|---|
| OLS з вікном 60 днів | ±15% | Висока | Мінімальна |
| Kalman Filter | ±8% | Низька | 2–3 параметри |
Розмір позицій розраховується dollar-neutral:
def calculate_position_sizes(capital, hedge_ratio, price_x, price_y): position_value = capital / 2 qty_y = position_value / price_y qty_x = qty_y * hedge_ratio return qty_x, qty_y Які ризики існують та як їх мінімізувати?
Divergence risk — спред продовжує розширюватися замість звуження. Причини: делістинг, хак, регуляторні дії. Рішення: stop-loss на рівні Z-score = 3 або 4.
Funding risk — для перпетуальних ф'ючерсів funding rate з'їдає прибуток. Особливо при позитивному funding на шорт. Ми враховуємо net funding у P&L та уникаємо входу при аномально високих ставках.
Liquidity risk — одночасне закриття обох ніг може бути ускладнене при різкому русі. Використовуємо лімітні ордери з контролем slippage.
Кореляційний розрив — у періоди масових рухів (BTC dump) кореляція руйнується. Моніторимо Z-score усіх активних пар кожні N хвилин.
Як розраховується P&L та проводиться backtesting?
Реалізуємо backtest з симуляцією комісій та прослизання:
def backtest_pairs(spread, z_scores, entry_z=2.0, exit_z=0.5, stop_z=3.5): position = 0 pnl = [] for i, (spread_val, z) in enumerate(zip(spread, z_scores)): if position == 0: if z > entry_z: position = -1 entry_spread = spread_val elif z < -entry_z: position = 1 entry_spread = spread_val elif position == 1: current_pnl = spread_val - entry_spread if z > -exit_z or z < -stop_z: pnl.append(current_pnl) position = 0 elif position == -1: current_pnl = entry_spread - spread_val if z < exit_z or z > stop_z: pnl.append(current_pnl) position = 0 return pnl Backtest показує до 30% річних при Sharpe>1.5 на історичних даних (без урахування прослизання). З нашим алгоритмом Profit Factor в середньому в 2.3 рази вищий, ніж у фіксованої стратегії.
Як проходить процес розробки алгоритму?
- Аналітика — збір історичних даних, перевірка коінтеграції за вибраними парами.
- Проектування — вибір моделі (OLS, Kalman Filter), визначення threshold entry/exit/stop.
- Реалізація — код на Python з бібліотеками
statsmodels,pykalman,CCXTдля виконання. Дашборд на Grafana. - Backtest — симуляція на декількох періодах, оптимізація параметрів.
- Paper trading — тест на реальних даних без ризику (1–2 тижні).
- Деплой — запуск на VPS як daemon-процес, налаштування алертів.
Терміни: MVP — від 2 тижнів, повний цикл — до 3 місяців.
Що входить в розробку алгоритму парної торгівлі?
- Документація: опис логіки, конфігів, інструкція з експлуатації.
- Доступи до репозиторію (GitLab) та дашборду.
- Навчання вашої команди (2 години онлайн).
- Підтримка 1 місяць після запуску (виправлення багів, адаптація під нові пари).
Гарантуємо прозорість коду та можливість модифікації вашими розробниками.
Чому варто замовити розробку у нас?
- 5+ років досвіду в крипто-алгоритмічній торгівлі.
- 30+ впроваджень, включаючи DeFi-ботів та CEX-трендові стратегії.
- Використовуємо лише перевірені стеки: Foundry для смарт-контрактів (якщо потрібна on-chain реалізація), Tenderly для моніторингу, Chainlink оракули для точних цін.
- Сертифіковані Solidity-розробники (Ethereum, Polygon, Arbitrum).
Хочете такий самий алгоритм? Зв'яжіться з нами — обговоримо деталі. Алгоритм може генерувати пасивний дохід, працюючи 24/7 без вашої участі.







