آربیتراژ آماری در ارزهای دیجیتال — معاملات جفتی و بازگشت به میانگین

آربیتراژ آماری از انحرافات موقت از قیمت‌های تعادلی استفاده می‌کند. وقتی دو دارایی که معمولاً با هم حرکت می‌کنند از هم فاصله می‌گیرند، معامله‌گر آربیتراژ آماری، دارایی ضعیف‌تر را خریده و دارایی قوی‌تر را می‌فروشد، با این امید که دوباره به هم نزدیک شوند. در ارزهای دیجیتال، این استراتژی بسیار قدرتمند است زیرا دارایی‌ها همبستگی دارند اما نه کاملاً، که فرصت‌های سودآوری ایجاد می‌کند.

مثال: همبستگی BTC و ETH برابر 0.85 است. وقتی ETH در یک دوره 1 ساعته 3% از BTC عقب می‌افتد (اتفاق غیرمعمول)، معامله‌گر آربیتراژ آماری BTC را می‌فروشد و ETH را می‌خرد. از نظر تاریخی، این دو دارایی در عرض 4-8 ساعت به هم نزدیک می‌شوند و سودی حدود 1-1.5% قفل می‌شود.

مبانی معاملات جفتی

انتخاب جفت‌ها

همه جفت‌ها مناسب نیستند. شما نیاز دارید:

Python — انتخاب جفت
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:]:
# محاسبه همبستگی
corr, p_value = pearsonr(data[sym1], data[sym2])
if corr > 0.75:
# آزمون هم‌انباشتگی (آزمون انگل-گرنجر)
residuals = data[sym1] - (data[sym2] * corr)
adf_stat = adf_test(residuals) # ایستایی
if adf_stat < 0.05: # ایستا
candidates.append((sym1, sym2, corr))
return candidates

تحلیل هم‌انباشتگی

هم‌انباشتگی چیست؟

دو سری غیرایستا هم‌انباشته هستند اگر ترکیب خطی آن‌ها ایستا باشد. به زبان ساده: آن‌ها با هم حرکت می‌کنند و انحرافات از این رابطه در نهایت بازگشت می‌کنند.

برای BTC و ETH:

یافتن نسبت پوشش ریسک

از رگرسیون حداقل مربعات معمولی برای یافتن نسبت بهینه استفاده کنید:

Python — محاسبه نسبت پوشش ریسک
from sklearn.linear_model import LinearRegression
def get_hedge_ratio(price1, price2):
# رگرسیون price1 روی price2 برای یافتن بتا (نسبت پوشش ریسک)
X = price2.reshape(-1, 1)
y = price1
model = LinearRegression().fit(X, y)
hedge_ratio = model.coef_[0]
intercept = model.intercept_
return hedge_ratio, intercept
# اسپرد = price1 - (hedge_ratio × price2) + intercept
beta, alpha = get_hedge_ratio(btc_prices, eth_prices)
spread = btc - (beta * eth)

استراتژی‌های بازگشت به میانگین

استفاده از Z-Score

اسپرد را استاندارد کنید تا نقاط افراطی را تشخیص دهید. وقتی z-score > 2، اسپرد به طور غیرعادی گسترده است (فرصت معامله):

Python — معامله بازگشت به میانگین
def mean_reversion_signal(spread, lookback=20):
# محاسبه میانگین و انحراف معیار متحرک
mean = spread.rolling(window=lookback).mean()
std = spread.rolling(window=lookback).std()
# Z-score: چند انحراف معیار از میانگین
z_score = (spread - mean) / std
# سیگنال‌های معاملاتی
if z_score[-1] > 2.0:
return "LONG_SPREAD" # اسپرد خیلی گسترده است، دارایی ضعیف‌تر را بخرید
elif z_score[-1] < -2.0:
return "SHORT_SPREAD" # اسپرد خیلی فشرده است، دارایی ضعیف‌تر را بفروشید
else:
return "NEUTRAL"

قوانین خروج

وقتی اسپرد به میانگین بازگشت (z-score → 0) یا آستانه ضرر (توقف در بازگشت z-score) بسته شود:

Python — منطق خروج
def check_exit(entry_z_score, current_z_score, entry_price):
# برداشت سود: اسپرد نصف راه به میانگین بازگشته است
if abs(current_z_score) < abs(entry_z_score) * 0.5:
return خروج, هدف سود
# حد ضرر: z-score در جهت اشتباه بیش از 1 حرکت کرده است
اگر (entry_z_score > 0 و current_z_score < entry_z_score + 1.0):
بازگشت خروج, حد_ضرر
در غیر این صورت اگر (entry_z_score < 0 و current_z_score > entry_z_score - 1.0):
بازگشت خروج, حد_ضرر
بازگشت نگه‌دار, None

بکتست استراتژی‌های آربیتراژ آماری

معیارهای کلیدی برای آربیتراژ آماری:

Python — استراتژی بکتست جفت‌ها
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
برای i در range(len(z_score)):
اگر position است None:
اگر z_score[i] > 2.0:
position = {"ورود": spread[i], "z_ورود": z_score[i], "idx": i}
در غیر این صورت:
exit_reason = check_exit(position["z_ورود"], z_score[i], spread[i])[1]
اگر exit_reason:
pnl = position["ورود"] - spread[i]
trades.append({"pnl": pnl, "دلیل": exit_reason})
position = None
بازگشت pd.DataFrame(trades)

افزودن هوش Smart Money

با فیلتر کردن معاملات با تأیید Smart Money، معاملات جفتی را بهبود بخشید:

Python — استراتژی جفتی فیلتر شده
def smart_money_pairs_strategy(symbol1, symbol2, z_score):
# بررسی تأیید Smart Money در سطح جفت
sm1 = get_smart_money_signal(symbol1)
sm2 = get_smart_money_signal(symbol2)
# اگر یکی بسیار صعودی و دیگری بسیار نزولی باشد = واگرایی قوی
# زمان عالی برای معامله اسپرد
divergence_score = abs(sm1["composite"] - sm2["composite"])
اگر z_score > 2.0 و divergence_score > 0.3 و sm1["confidence"] != "وتو":
بازگشت "معامله" # سیگنال با اطمینان بالا
در غیر این صورت:
بازگشت "صرف‌نظر" # منتظر هماهنگی بمانید

تقویت آربیتراژ آماری با سیگنال‌های جفتی Smart Money

معاملات بازگشت به میانگین را با اجماع نهنگ‌ها و داده‌های مشتقه فیلتر کنید. API ما اعتبار واگرایی جفت را با بهبود دقت 62% تأیید می‌کند.

شروع معاملات جفتی →