Statistical Arbitrage in Crypto — Pairs Trading and Mean Reversion

ការជួញដូរស្ថិតិល្បីល្បាញគឺយកចំណុចខុសគ្នាបណ្តោះអាសន្នពីតម្លៃសមតុល្យ។ នៅពេលដែលទ្រព្យសក្តាពីរដែលធម្មតាផ្លាស់ទីរួមគ្នាបែកខ្ញែកគ្នា អ្នកជួញដូរស្ថិតិល្បីល្បាញនឹងទិញទ្រព្យសក្តាដែលធ្លាក់ចុះ និងធ្វើខ្លីទ្រព្យសក្តាដែលលើសពីកម្រិត ដោយភ្នាល់លើការបញ្ចូលគ្នា។ នៅក្នុងគ្រីបតូ វាមានឥទ្ធិពលខ្លាំងជាពិសេសពីព្រោះទ្រព្យសក្តាមានទំនាក់ទំនងគ្នាប៉ុន្តែមិនទាំងស្រុង ដែលបង្កើតប្រាក់ចំណេញ។

ឧទាហរណ៍៖ BTC និង ETH មានទំនាក់ទំនង 0.85។ នៅពេលដែល ETH ធ្លាក់ចុះជាង BTC ដោយ 3% ក្នុងរយៈពេល 1 ម៉ោង (មិនធម្មតា) អ្នកជួញដូរស្ថិតិល្បីល្បាញនឹងធ្វើខ្លី 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:
# សាកល្បងការរួមបញ្ចូលគ្នា (តេស្ត Engle-Granger)
residuals = data[sym1] - (data[sym2] * corr)
adf_stat = adf_test(residuals) # stationarity
if adf_stat < 0.05: # stationary
candidates.append((sym1, sym2, corr))
return candidates

ការវិភាគការរួមបញ្ចូលគ្នា

តើការរួមបញ្ចូលគ្នាគឺជាអ្វី?

ស៊េរីពីរដែលមិនស្ថិតស្ថេរគឺរួមបញ្ចូលគ្នាប្រសិនបើការរួមបញ្ចូលគ្នារបស់ពួកគេគឺស្ថិតស្ថេរ។ ជាភាសាសាមញ្ញ៖ ពួកគេផ្លាស់ទីរួមគ្នាតាមពេលវេលា ហើយការបែកខ្ញែកពីទំនាក់ទំនងនោះនឹងត្រឡប់មកវិញ។

សម្រាប់ BTC និង ETH៖

ការស្វែងរកសមាមាត្រការពារ

ប្រើការវិភាគតំរែតំរង់ធម្មតាដើម្បីស្វែងរកសមាមាត្រការពារដ៏ល្អបំផុត៖

Python — ការគណនាសមាមាត្រការពារ
from sklearn.linear_model import LinearRegression
def get_hedge_ratio(price1, price2):
# តំរែតំរង់ price1 លើ price2 ដើម្បីស្វែងរក beta (សមាមាត្រការពារ)
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-Scores

ស្តង់ដារការរីករាលដាលដើម្បីរកការខ្លាំង។ នៅពេលដែល 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 "EXIT", "គោលដៅរកប្រាក់ចំណេញ"
# បញ្ឈប់ការខាតបង់៖ z-score ផ្លាស់ទីក្នុងទិសដៅខុសដោយ >1
if (entry_z_score > 0 and current_z_score < entry_z_score + 1.0):
return "EXIT", "បញ្ឈប់ការខាតបង់"
elif (entry_z_score < 0 and current_z_score > entry_z_score - 1.0):
return "EXIT", "បញ្ឈប់ការខាតបង់"
return "ទុក", None

ការធ្វើតេស្តបញ្ច្រាសយុទ្ធសាស្ត្រ Stat Arb

សូចនាករសំខាន់សម្រាប់ stat arb៖

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
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)

ការបន្ថែមភាពឆ្លាតវៃរបស់ 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"])
if z_score > 2.0 and divergence_score > 0.3 and sm1["confidence"] != "VETO":
return "TRADE" # សញ្ញាទំនុកចិត្តខ្ពស់
else:
return "SKIP" # រង់ចាំការតម្រឹម

ពង្រឹក stat arb ជាមួយសញ្ញាគូរបស់ Smart Money

ច្រោះជួញដូរការត្រឡប់មកវិញជាមធ្យមជាមួយការយល់ព្រមរបស់វាល់ និងទិន្នន័យដេរីវេ។ API របស់យើងបញ្ជាក់សុពលភាពនៃភាពខុសគ្នានៃគូជាមួយនឹងការកែលម្អភាពត្រឹមត្រូវ 62%។

ចាប់ផ្តើមជួញដូរគូ →