Statistical Arbitrage in Crypto — Pairs Trading and Mean Reversion

Arbitrage thống kê khai thác các sai lệch tạm thời so với giá cân bằng. Khi hai tài sản thường di chuyển cùng nhau phân kỳ, một trader stat arb mua tài sản hoạt động kém hơn và bán khống tài sản hoạt động tốt hơn, đặt cược vào sự hội tụ. Trong crypto, điều này đặc biệt mạnh vì các tài sản có tương quan nhưng không hoàn hảo, tạo ra các cơ hội sinh lời.

Ví dụ: Tương quan BTC và ETH là 0.85. Khi ETH hoạt động kém hơn BTC 3% trong 1 giờ (bất thường), một trader stat arb bán khống BTC và mua ETH. Theo lịch sử, chúng hội tụ trong 4-8 giờ, thu lợi ~1-1.5%.

Cơ bản về Giao dịch cặp

Chọn cặp

Không phải cặp nào cũng hiệu quả. Bạn cần:

Python — Chọn cặp
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:]:
# Tính toán tương quan
corr, p_value = pearsonr(data[sym1], data[sym2])
if corr > 0.75:
# Kiểm tra đồng liên kết (Engle-Granger test)
residuals = data[sym1] - (data[sym2] * corr)
adf_stat = adf_test(residuals) # tính dừng
if adf_stat < 0.05: # dừng
candidates.append((sym1, sym2, corr))
return candidates

Phân tích Đồng liên kết

Đồng liên kết là gì?

Hai chuỗi không dừng được gọi là đồng liên kết nếu tổ hợp tuyến tính của chúng là dừng. Nói đơn giản: chúng di chuyển cùng nhau theo thời gian, và các sai lệch từ mối quan hệ đó cuối cùng sẽ hồi quy.

Với BTC và ETH:

Tìm Tỷ lệ phòng ngừa

Sử dụng hồi quy bình phương nhỏ nhất thông thường để tìm tỷ lệ tối ưu:

Python — Tính toán tỷ lệ phòng ngừa
from sklearn.linear_model import LinearRegression
def get_hedge_ratio(price1, price2):
# Hồi quy price1 trên price2 để tìm beta (tỷ lệ phòng ngừa)
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)

Chiến lược Hồi quy trung bình

Sử dụng Z-Scores

Chuẩn hóa spread để phát hiện cực điểm. Khi z-score > 2, spread quá rộng (cơ hội giao dịch):

Python — Giao dịch hồi quy trung bình
def mean_reversion_signal(spread, lookback=20):
# Tính toán trung bình và độ lệch chuẩn trượt
mean = spread.rolling(window=lookback).mean()
std = spread.rolling(window=lookback).std()
# Z-score: số độ lệch chuẩn từ trung bình
z_score = (spread - mean) / std
# Tín hiệu giao dịch
if z_score[-1] > 2.0:
return "LONG_SPREAD" # spread quá rộng, mua tài sản hoạt động kém
elif z_score[-1] < -2.0:
return "SHORT_SPREAD" # spread quá hẹp, bán khống tài sản hoạt động kém
else:
return "NEUTRAL"

Quy tắc Thoát lệnh

Đóng khi spread trở về trung bình (z-score → 0) hoặc ngưỡng lỗ (dừng khi z-score đảo chiều):

Python — Logic thoát lệnh
def check_exit(entry_z_score, current_z_score, entry_price):
# Chốt lời: spread hội tụ một nửa về trung bình
if abs(current_z_score) < abs(entry_z_score) * 0.5:
return THOÁT, mục_tiêu_lợi_nhuận
# Dừng lỗ: z-score di chuyển sai hướng >1
nếu (entry_z_score > 0 current_z_score < entry_z_score + 1.0):
trả về THOÁT, dừng_lỗ
hoặc_nếu (entry_z_score < 0 current_z_score > entry_z_score - 1.0):
trả về THOÁT, dừng_lỗ
trả về GIỮ, Không

Kiểm tra ngược chiến lược Stat Arb

Các chỉ số chính cho stat arb:

Python — Kiểm tra ngược chiến lược cặp
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 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
trả về pd.DataFrame(trades)

Thêm Trí tuệ Smart Money

Nâng cao giao dịch cặp bằng cách lọc các giao dịch với xác nhận Smart Money:

Python — Chiến lược cặp được lọc
def smart_money_pairs_strategy(symbol1, symbol2, z_score):
# Kiểm tra xác nhận Smart Money ở cấp độ cặp
sm1 = get_smart_money_signal(symbol1)
sm2 = get_smart_money_signal(symbol2)
# Nếu một là HIGH tăng giá và một là HIGH giảm giá = phân kỳ mạnh
# Thời điểm tốt để giao dịch spread
divergence_score = abs(sm1["composite"] - sm2["composite"])
if z_score > 2.0 divergence_score > 0.3 sm1["confidence"] != "VETO":
trả về "GIAO_DỊCH" # Tín hiệu xác nhận cao
else:
trả về "BỎ QUA" # Chờ sự đồng thuận

Tăng cường stat arb với tín hiệu cặp Smart Money

Lọc các giao dịch đảo chiều trung bình với sự đồng thuận của cá voi và dữ liệu phái sinh. API của chúng tôi xác nhận tính hợp lệ của phân kỳ cặp với độ chính xác cải thiện 62%.

Bắt đầu Giao dịch Cặp →