[알고리즘 트레이딩] 3개 이상의 자산으로 구성한 스프레드 전략과 평균회귀 테스트

✅ 스프레드란?

**스프레드(Spread)**는 두 자산 간의 가격 차이나 상대가치를 나타내는 지표로, 통계적 차익거래(Statistical Arbitrage)나 평균회귀 전략(Mean Reversion Strategy)의 핵심 요소입니다.

기본적인 스프레드 형태는 다음과 같습니다:

Spread=P1βP2​

하지만 실제로는 3개 이상의 자산을 조합하여 다음과 같이 확장할 수 있습니다:

Spread=P1β1P2β2P3​

🔍 왜 3개 이상 자산을 사용할까?

  • 복잡한 시장 관계를 반영할 수 있음

  • 특정 자산의 노이즈를 분산시키고, 공통된 추세만 추출 가능

  • 섹터 ETF, 업종별 주식 등을 조합해 상대적 과대/과소평가 탐색 가능


🧪 실전 예제 (Python + statsmodels)

세 개의 ETF를 사용해서 스프레드를 계산하고, 평균회귀(cointegration) 여부를 테스트해보겠습니다.

import yfinance as yf import pandas as pd import statsmodels.api as sm from statsmodels.tsa.stattools import adfuller import matplotlib.pyplot as plt # 3개 ETF 다운로드: SPY (시장전체), XLK (기술), XLF (금융) tickers = ['SPY', 'XLK', 'XLF'] df = yf.download(tickers, start="2022-01-01")['Adj Close'].dropna() # 다중 회귀: SPY ~ XLK + XLF X = df[['XLK', 'XLF']] y = df['SPY'] X = sm.add_constant(X) model = sm.OLS(y, X).fit() # 스프레드 계산 spread = y - model.predict(X) # 스프레드 시각화 plt.figure(figsize=(12, 5)) plt.plot(spread, label='Spread (Residual)') plt.axhline(spread.mean(), color='r', linestyle='--', label='Mean') plt.legend() plt.title('3-Asset Spread') plt.show() # 평균회귀 테스트 (ADF) adf_result = adfuller(spread) print('ADF Statistic:', adf_result[0]) print('p-value:', adf_result[1])

✅ 결과 해석

  • **ADF 검정(Augmented Dickey-Fuller test)**의 p-value가 0.05보다 작다면, 스프레드는 정상성(stationary)을 가지며 평균회귀 성향이 있다고 판단할 수 있습니다.

  • 이런 경우, 스프레드가 평균에서 이탈할 때 진입하고, 다시 평균으로 수렴할 때 청산하는 전략을 짤 수 있습니다.


📌 결론

3개 이상의 자산을 활용한 스프레드 전략은 단순한 페어 트레이딩보다 더 정교하고 강력한 전략을 구성할 수 있는 기반이 됩니다.
통계적 방법을 활용해 시장의 구조적 관계를 추출하고, 노이즈를 줄이는 데 매우 유용하죠. 퀀트 전략을 고민 중이라면, 다양한 자산 조합과 스프레드 모델링을 꼭 고려해보시길 추천드립니다.

댓글

이 블로그의 인기 게시물

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[PLC] PLC 아날로그 입출력 기본

공압 속도 제어: 미터인 vs 미터아웃

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

제너 다이오드에 저항을 연결하는 이유

3선 결선식 센서의 타입 PNP, NPN

PLC 출력 형태

[PLC] 래더 다이어그램과 PLC

[프로그래밍] Python 기반 이미지 프로세싱 + 머신러닝 + 딥러닝 입문자를 위한 추천 영문 도서 모음

공압회로 기호