페어 트레이딩이란?
페어 트레이딩(Pairs Trading)은 상관관계가 높은 두 자산의 가격 괴리를 이용하는 통계적 차익거래(Statistical Arbitrage) 전략입니다. 시장 방향과 무관하게 수익을 추구하는 시장 중립(Market Neutral) 전략으로, 퀀트 트레이딩의 핵심 기법 중 하나입니다.
예를 들어, 삼성전자와 SK하이닉스처럼 같은 반도체 섹터에 속한 종목은 장기적으로 비슷한 방향으로 움직입니다. 그런데 일시적으로 한 종목이 과도하게 오르거나 내리면, 두 종목의 스프레드(Spread)가 평균에서 벗어납니다. 이 괴리가 다시 평균으로 회귀할 것이라 기대하고 진입하는 것이 페어 트레이딩의 핵심입니다.
페어 트레이딩 핵심 원리: 공적분(Cointegration)
단순 상관관계(Correlation)만으로는 페어 트레이딩에 적합한 종목 쌍을 찾기 어렵습니다. 핵심은 공적분(Cointegration) 관계입니다.
- 상관관계: 두 자산 수익률의 방향이 유사한 정도 → 시간에 따라 변할 수 있음
- 공적분: 두 자산의 선형 결합이 정상성(Stationarity)을 가지는 관계 → 스프레드가 일정 범위 내에서 유지됨
공적분 검정에는 주로 엥글-그레인저(Engle-Granger) 검정과 요한센(Johansen) 검정이 사용됩니다. p-value가 0.05 이하이면 공적분 관계가 존재한다고 판단합니다.
파이썬 공적분 검정 코드
import statsmodels.api as sm
from statsmodels.tsa.stattools import coint
# 두 종목의 종가 시계열
score, pvalue, _ = coint(stock_a_prices, stock_b_prices)
print(f"공적분 p-value: {pvalue:.4f}")
if pvalue < 0.05:
print("공적분 관계 존재 → 페어 트레이딩 후보")
스프레드 계산과 Z-Score 시그널
페어가 확정되면 스프레드를 계산합니다. OLS 회귀로 헤지 비율(Hedge Ratio) β를 구한 뒤, 스프레드 = A - β × B로 정의합니다.
스프레드의 Z-Score를 산출하여 진입/청산 시그널을 생성합니다.
| Z-Score 구간 | 액션 | 포지션 |
|---|---|---|
| Z > +2.0 | 숏 진입 | A 매도 + B 매수 |
| Z < -2.0 | 롱 진입 | A 매수 + B 매도 |
| |Z| < 0.5 | 청산 | 모든 포지션 정리 |
| |Z| > 3.5 | 손절 | 공적분 붕괴 가능성 → 전량 청산 |
Z-Score 계산 코드
import numpy as np
def calc_zscore(spread, window=60):
mean = spread.rolling(window).mean()
std = spread.rolling(window).std()
return (spread - mean) / std
spread = stock_a - hedge_ratio * stock_b
zscore = calc_zscore(spread)
페어 트레이딩 자동매매 구현 5단계
1단계: 유니버스 스크리닝
같은 섹터, 같은 산업군에서 후보 종목 쌍을 추출합니다. KOSPI 200 내 동일 섹터 종목끼리 조합하면 효율적입니다. 최소 1년 이상의 일봉 데이터를 확보하세요.
2단계: 공적분 검정 + 필터링
모든 후보 쌍에 대해 공적분 검정을 수행합니다. p-value < 0.05이면서 반감기(Half-Life)가 5~60일 범위인 쌍만 선별합니다. 반감기가 너무 짧으면 거래 비용을 감당하기 어렵고, 너무 길면 자금이 묶입니다.
from statsmodels.regression.linear_model import OLS
# 반감기 계산
spread_lag = spread.shift(1).dropna()
spread_diff = spread.diff().dropna()
model = OLS(spread_diff, sm.add_constant(spread_lag.iloc[1:]))
result = model.fit()
half_life = -np.log(2) / result.params.iloc[1]
print(f"반감기: {half_life:.1f}일")
3단계: 헤지 비율 동적 조정
고정 헤지 비율은 시간이 지나면 무효화됩니다. 칼만 필터(Kalman Filter)나 롤링 OLS로 헤지 비율을 동적으로 업데이트하세요. 롤링 윈도우는 보통 60~120일을 사용합니다.
4단계: 리스크 관리 규칙 설정
- 포지션 사이징: 총 자산의 5~10%를 한 페어에 배분
- 손절 기준: Z-Score 3.5 초과 시 강제 청산 (공적분 붕괴 대응)
- 최대 보유 기간: 반감기의 3배 이내에 청산되지 않으면 강제 종료
- 동시 페어 수: 최대 5~8페어로 분산 (상관관계 높은 페어 중복 주의)
5단계: 실시간 모니터링 및 재검정
공적분 관계는 영원하지 않습니다. 매주 또는 격주로 공적분을 재검정하고, 관계가 무너진 페어는 즉시 제거합니다. 슬리피지 관리도 병행해야 실전 수익률을 지킬 수 있습니다.
페어 트레이딩의 장점과 한계
장점
- 시장 중립: 시장 전체 하락에도 수익 가능
- 통계적 근거: 감이 아닌 데이터 기반 의사결정
- 자동화 용이: 규칙 기반이므로 자동매매 봇으로 구현하기 적합
- 낮은 변동성: 시장 리스크를 헤지하므로 MDD가 상대적으로 낮음
한계 및 주의점
- 공적분 붕괴: 기업 인수합병, 사업 구조 변화 시 관계가 영구적으로 깨질 수 있음
- 거래 비용: 양방향 매매이므로 수수료·슬리피지가 2배 발생
- 자금 효율성: 롱숏 동시 보유로 마진 소요가 큼
- 과적합 위험: 과거 데이터에만 맞는 가짜 공적분을 발견할 수 있음 → 백테스트 과적합 방지법 참고
실전 적용 체크리스트
| 항목 | 체크 기준 |
|---|---|
| 공적분 p-value | < 0.05 |
| 반감기 | 5~60일 |
| 진입 Z-Score | ±2.0 이상 |
| 청산 Z-Score | ±0.5 이내 |
| 손절 Z-Score | ±3.5 초과 |
| 포지션 비중 | 페어당 5~10% |
| 재검정 주기 | 1~2주 |
| 최대 보유 기간 | 반감기 × 3 |
마무리
페어 트레이딩은 시장 방향에 의존하지 않는 퀀트 전략의 대표 격입니다. 공적분 검정으로 견고한 페어를 찾고, Z-Score 기반 시그널로 진입·청산하며, 동적 헤지 비율과 철저한 리스크 관리를 결합하면 안정적인 수익 곡선을 만들 수 있습니다.
다만 공적분 관계는 영원하지 않으므로, 주기적 재검정과 손절 규칙을 반드시 포함해야 합니다. 백테스트에서 좋은 결과가 나왔더라도 워크포워드 분석으로 검증한 뒤 실전에 투입하세요.