암호화폐 통계적 차익거래 — 페어 트레이딩과 평균 회귀

통계적 차익거래는 일시적인 균형 가격 이탈을 활용합니다. 일반적으로 함께 움직이는 두 자산이 갈라질 때, 통계적 차익 거래자는 저성과 자산을 매수하고 우성과 자산을 공매도하여 수렴을 기대합니다. 암호화폐에서는 자산들이 상관관계가 있지만 완벽하지 않아 수익성 있는 기회가 창출되기 때문에 특히 강력합니다.

예시: BTC와 ETH의 상관관계는 0.85입니다. ETH가 1시간 동안 BTC 대비 3% 저조한 성과를 보이면(비정상적), 통계적 차익 거래자는 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) # 정상성
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-스코어 사용

스프레드를 표준화하여 극단적인 지점을 감지합니다. z-score > 2이면 스프레드가 비정상적으로 넓어집니다(거래 기회):

Python — 평균 회귀 트레이딩
def mean_reversion_signal(spread, lookback=20):
# 롤링 평균 및 표준편차 계산
mean = spread.rolling(window=lookback).mean()
std = spread.rolling(window=lookback).std()
# Z-스코어: 평균에서 몇 표준편차 떨어져 있는지
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", "profit_target"
# 손절: z-점수가 잘못된 방향으로 >1 이동함
if (entry_z_score > 0 and current_z_score < entry_z_score + 1.0):
return "EXIT", "stop_loss"
elif (entry_z_score < 0 and current_z_score > entry_z_score - 1.0):
return "EXIT", "stop_loss"
return "HOLD", 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
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)

스마트 머니 인텔리전스 추가

스마트 머니 확인으로 페어 트레이딩 강화:

Python — 필터링된 페어 전략
def smart_money_pairs_strategy(symbol1, symbol2, z_score):
# 페어 수준 스마트 머니 확인
sm1 = get_smart_money_signal(symbol1)
sm2 = get_smart_money_signal(symbol2)
# 하나는 HIGH 강세, 다른 하나는 HIGH 약세일 때 = 강한 분기
# 스프레드 트레이딩 적기
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" # 정렬 대기

스마트 머니 페어 신호로 통계적 차익거래 강화

고래 합의와 파생상품 데이터로 평균 회귀 트레이드 필터링. 당사 API는 페어 분기 유효성을 62% 정확도 향상으로 확인합니다.

페어 트레이딩 시작 →