Statistická arbitráž v kryptu — Pairs Trading a středová reverze

Statistická arbitráž využívá dočasné odchylky od rovnovážných cen. Když se dva aktiva, která se obvykle pohybují společně, rozcházejí, obchodník s statistickou arbitráží nakoupí podprůměrné aktivum a prodá nadprůměrné, sázkou na konvergenci. V kryptu je to obzvláště účinné, protože aktiva jsou korelovaná, ale ne dokonale, což vytváří ziskové příležitosti.

Příklad: Korelace BTC a ETH je 0,85. Když ETH zaostává za BTC o 3 % během 1 hodiny (neobvyklé), obchodník s statistickou arbitráží prodá BTC nakrátko a nakoupí ETH. Historicky se konvergují během 4–8 hodin, čímž zafixují zisk ~1–1,5 %.

Základy Pairs Trading

Výběr párů

Ne všechny páry fungují. Potřebujete:

Python — Výběr párů
import pandas as pd
from scipy.stats import pearsonr
def find_cointegrated_pairs(symbols, data):
candidates = []
for i, sym1 in enumerate(symbols):
for sym2 in symbols[i+1:]:
# Vypočítat korelaci
corr, p_value = pearsonr(data[sym1], data[sym2])
if corr > 0.75:
# Test kointegrace (Engle-Granger test)
residuals = data[sym1] - (data[sym2] * corr)
adf_stat = adf_test(residuals) # stacionarita
if adf_stat < 0.05: # stacionární
candidates.append((sym1, sym2, corr))
return candidates

Analýza kointegrace

Co je kointegrace?

Dvě nestacionární řady jsou kointegrované, pokud je jejich lineární kombinace stacionární. Jednoduše řečeno: pohybují se společně v čase a odchylky od tohoto vztahu se nakonec vrátí.

Pro BTC a ETH:

Nalezení hedgeového poměru

Použijte regresi metodou nejmenších čtverců k nalezení optimálního poměru:

Python — Výpočet hedgeového poměru
from sklearn.linear_model import LinearRegression
def get_hedge_ratio(price1, price2):
# Regrese price1 na price2 k nalezení beta (hedgeový poměr)
X = price2.reshape(-1, 1)
y = price1
model = LinearRegression().fit(X, y)
hedge_ratio = model.coef_[0]
intercept = model.intercept_
return hedge_ratio, intercept
# Spread = price1 - (hedge_ratio × price2) + intercept
beta, alpha = get_hedge_ratio(btc_prices, eth_prices)
spread = btc - (beta * eth)

Strategie středové reverze

Použití Z-Score

Standardizujte spread k detekci extrémů. Když z-score > 2, spread je neobvykle široký (obchodní příležitost):

Python — Obchodování se středovou reverzí
def mean_reversion_signal(spread, lookback=20):
# Vypočítat klouzavý průměr a směrodatnou odchylku
mean = spread.rolling(window=lookback).mean()
std = spread.rolling(window=lookback).std()
# Z-score: kolik směrodatných odchylek od průměru
z_score = (spread - mean) / std
# Obchodní signály
if z_score[-1] > 2.0:
return "LONG_SPREAD" # spread příliš široký, nakoupit podprůměrné
elif z_score[-1] < -2.0:
return "SHORT_SPREAD" # spread příliš úzký, prodat podprůměrné nakrátko
else:
return "NEUTRAL"

Pravidla pro ukončení

Uzavřít, když se spread vrátí k průměru (z-score → 0) nebo při prahu ztráty (stop při obrácení z-score):

Python — Logika ukončení
def check_exit(entry_z_score, current_z_score, entry_price):
# Vzít zisk: spread se vrátil zpět do poloviny k průměru
if abs(current_z_score) < abs(entry_z_score) * 0.5:
return EXIT, cíl zisku
# Stop loss: z-skóre se posunulo špatným směrem o >1
pokud (entry_z_score > 0 a current_z_score < entry_z_score + 1.0):
return EXIT, stop_loss
elif (entry_z_score < 0 a current_z_score > entry_z_score - 1.0):
return EXIT, stop_loss
return HOLD, None

Backtestování stat arb strategií

Klíčové metriky pro stat arb:

Python — Backtestování párové strategie
def backtest_pairs_strategy(price1, price2, hedge_ratio):
spread = price1 - (hedge_ratio * price2)
mean = spread.rolling(20).mean()
std = spread.rolling(20).std()
z_score = (spread - mean) / std
trades = []
position = None
for i in range(len(z_score)):
if position is None:
if z_score[i] > 2.0:
position = {"entry": spread[i], "z_entry": z_score[i], "idx": i}
else:
exit_reason = check_exit(position["z_entry"], z_score[i], spread[i])[1]
if exit_reason:
pnl = position["entry"] - spread[i]
trades.append({"pnl": pnl, "reason": exit_reason})
position = None
return pd.DataFrame(trades)

Přidání inteligence Smart Money

Vylepšete párové obchodování filtrováním obchodů s potvrzením Smart Money:

Python — Filtrovaná párová strategie
def smart_money_pairs_strategy(symbol1, symbol2, z_score):
# Zkontrolujte potvrzení Smart Money na úrovni páru
sm1 = get_smart_money_signal(symbol1)
sm2 = get_smart_money_signal(symbol2)
# Pokud je jeden VYSOKÝ býčí a druhý VYSOKÝ medvědí = silná divergence
# Skvělý čas pro obchodování spreadu
divergence_score = abs(sm1["composite"] - sm2["composite"])
if z_score > 2.0 a divergence_score > 0.3 a sm1["confidence"] != "VETO":
return "TRADE" # Signál s vysokou důvěrou
else:
return "SKIP" # Počkejte na zarovnání

Posilte stat arb pomocí signálů Smart Money pro páry

Filtrujte obchody s reverzí k průměru pomocí konsenzu velryb a dat derivátů. Naše API potvrzuje platnost divergence páru se zlepšením přesnosti o 62 %.

Začněte obchodovat páry →