Arbitraj Statistik dalam Crypto — Perdagangan Pasangan dan Pembalikan Min

Arbitraj statistik mengeksploitasi penyimpangan sementara dari harga keseimbangan. Apabila dua aset yang biasanya bergerak bersama menyimpang, seorang peniaga stat arb membeli yang kurang performa dan menjual pendek yang lebih performa, bertaruh pada penumpuan. Dalam crypto, ini sangat berkuasa kerana aset berkorelasi tetapi tidak sempurna, mencipta poket yang menguntungkan.

Contoh: Korelasi BTC dan ETH ialah 0.85. Apabila ETH kurang performa berbanding BTC sebanyak 3% dalam tempoh 1 jam (tidak biasa), peniaga stat arb menjual pendek BTC dan membeli panjang ETH. Secara sejarah, mereka menumpu dalam 4-8 jam, mengunci keuntungan ~1-1.5%.

Asas Perdagangan Pasangan

Memilih Pasangan

Tidak semua pasangan berfungsi. Anda perlu:

Python — Pemilihan pasangan
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:]:
# Kira korelasi
corr, p_value = pearsonr(data[sym1], data[sym2])
if corr > 0.75:
# Uji kointegrasi (ujian Engle-Granger)
residuals = data[sym1] - (data[sym2] * corr)
adf_stat = adf_test(residuals) # kestasioneran
if adf_stat < 0.05: # stasioner
candidates.append((sym1, sym2, corr))
return candidates

Analisis Kointegrasi

Apa itu Kointegrasi?

Dua siri tidak stasioner adalah kointegrasi jika gabungan linear mereka adalah stasioner. Dalam bahasa mudah: mereka bergerak bersama dari masa ke masa, dan penyimpangan dari hubungan itu akhirnya kembali.

Untuk BTC dan ETH:

Mencari Nisbah Lindung Nilai

Gunakan regresi kuasa dua terkecil biasa untuk mencari nisbah optimum:

Python — Pengiraan nisbah lindung nilai
from sklearn.linear_model import LinearRegression
def get_hedge_ratio(price1, price2):
# Regres price1 pada price2 untuk mencari beta (nisbah lindung nilai)
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)

Strategi Pembalikan Min

Menggunakan Z-Skor

Piawaikan spread untuk mengesan ekstrem. Apabila z-skor > 2, spread terlalu lebar (peluang perdagangan):

Python — Perdagangan pembalikan min
def mean_reversion_signal(spread, lookback=20):
# Kira min dan std bergolek
mean = spread.rolling(window=lookback).mean()
std = spread.rolling(window=lookback).std()
# Z-skor: berapa banyak sisihan piawai dari min
z_score = (spread - mean) / std
# Isyarat perdagangan
if z_score[-1] > 2.0:
return "LONG_SPREAD" # spread terlalu lebar, beli yang kurang performa
elif z_score[-1] < -2.0:
return "SHORT_SPREAD" # spread terlalu ketat, jual pendek yang kurang performa
else:
return "NEUTRAL"

Peraturan Keluar

Tutup apabila spread kembali ke min (z-skor → 0) atau ambang kerugian (berhenti pada pembalikan z-skor):

Python — Logik keluar
def check_exit(entry_z_score, current_z_score, entry_price):
# Ambil untung: spread menumpu separuh jalan kembali ke min
if abs(current_z_score) < abs(entry_z_score) * 0.5:
return KELUAR, sasaran_keuntungan
# Stop loss: skor-z bergerak ke arah yang salah lebih daripada 1
jika (skor_z_masuk > 0 dan skor_z_semasa < skor_z_masuk + 1.0):
kembali KELUAR, stop_loss
jika tidak (skor_z_masuk < 0 dan skor_z_semasa > skor_z_masuk - 1.0):
kembali KELUAR, stop_loss
kembali TUNGGU, None

Menguji Strategi Arbitraj Statistik

Metrik utama untuk arbitraj statistik:

Python — Menguji strategi pasangan
def ujian_pasangan_strategi(harga1, harga2, nisbah_lindung_nilai):
jarak = harga1 - (nisbah_lindung_nilai * harga2)
min = jarak.rolling(20).mean()
sisihan_piawai = jarak.rolling(20).std()
skor_z = (jarak - min) / sisihan_piawai
urus_niaga = []
kedudukan = None
untuk i dalam range(len(skor_z)):
jika kedudukan adalah None:
jika skor_z[i] > 2.0:
kedudukan = {"masuk": jarak[i], "z_masuk": skor_z[i], "idx": i}
lain:
sebab_keluar = semak_keluar(kedudukan["z_masuk"], skor_z[i], jarak[i])[1]
jika sebab_keluar:
pnl = kedudukan["masuk"] - jarak[i]
urus_niaga.append({"pnl": pnl, "sebab": sebab_keluar})
kedudukan = None
kembali pd.DataFrame(urus_niaga)

Menambah Kepintaran Smart Money

Tingkatkan dagangan pasangan dengan menapis urus niaga dengan pengesahan Smart Money:

Python — Strategi pasangan ditapis
def strategi_pasangan_smart_money(simbol1, simbol2, skor_z):
# Semak pengesahan Smart Money peringkat pasangan
sm1 = dapatkan_isyarat_smart_money(simbol1)
sm2 = dapatkan_isyarat_smart_money(simbol2)
# Jika satu adalah sangat menaik dan yang lain sangat menurun = perbezaan yang kuat
# Masa yang sesuai untuk berdagang jarak
skor_perbezaan = abs(sm1["komposit"] - sm2["komposit"])
jika skor_z > 2.0 dan skor_perbezaan > 0.3 dan sm1["keyakinan"] != "VETO":
kembali "DAGANG" # Isyarat keyakinan tinggi
lain:
kembali "LANGKAH" # Tunggu penyelarasan

Tingkatkan arbitraj statistik dengan isyarat pasangan Smart Money

Tapis urus niaga pembalikan purata dengan konsensus ikan paus dan data derivatif. API kami mengesahkan kesahihan perbezaan pasangan dengan peningkatan ketepatan 62%.

Mula Berdagang Pasangan →