레이블이 momentum인 게시물을 표시합니다. 모든 게시물 표시
레이블이 momentum인 게시물을 표시합니다. 모든 게시물 표시

20250102

시계열 모멘텀(Time-series Momentum) 전략:

 

시계열 모멘텀(Time-series Momentum) 전략

시계열 모멘텀(Time-series Momentum, TSM) 전략은 과거 특정 기간 동안의 자산 수익률을 기반으로 투자 결정을 내리는 퀀트 투자 기법입니다. 본 글에서는 시계열 모멘텀 전략의 개념을 설명하고, Python으로 구현한 백테스트와 성능 분석을 통해 전략의 효과를 검증합니다.

1. 시계열 모멘텀 전략 개요

1.1 전략 개념

  • 전략 구조: 위험자산과 무위험자산 두 가지를 활용.
  • 투자 판단 기준:
    • 과거 특정 기간(τ)의 수익률이 양수일 경우 위험자산에 투자.
    • 음수일 경우 무위험자산에 투자.

1.2 하이퍼파라미터

하이퍼파라미터설명예시
기간데이터 분석 기간1990/01/31 ~ 2021/11/30
단위데이터의 시간 단위1개월
모멘텀 측정 기간(τ)과거 수익률 계산 기간12개월
비중포트폴리오 내 각 자산의 투자 비중100% / 0%
리밸런싱 주기포트폴리오 재조정 주기1개월

2. Python을 활용한 구현

2.1 데이터 준비

먼저, 위험자산(KOSPI200)과 무위험자산(CD금리)의 데이터를 준비합니다.
python
import pandas as pd # 데이터 불러오기 data = pd.read_excel('rawdata.xlsx', sheet_name='Sheet1', index_col='Date') data.index = pd.to_datetime(data.index) # 위험자산과 무위험자산 분리 risky_asset = data['KOSPI200'] risk_free_asset = data['CD1m'] # 수익률 계산 risky_return = risky_asset.pct_change() * 100 risk_free_return = risk_free_asset.shift(1) / 12

2.2 시계열 모멘텀 함수

다음 함수는 시계열 모멘텀 전략을 구현합니다. 과거 τ기간 동안의 수익률 추세를 계산하고, 이를 기반으로 투자 결정을 내립니다.
python
def time_series_momentum(tau, risky_return, risk_free_return, initial_money): # 모멘텀 계산 momentum = risky_return.shift(tau).rolling(window=tau).sum() signal = (momentum > 0).astype(int) # 양수면 위험자산 투자 # 백테스트 준비 portfolio_value = [initial_money] for t in range(tau, len(risky_return)): if signal.iloc[t] == 1: return_t = risky_return.iloc[t] else: return_t = risk_free_return.iloc[t] portfolio_value.append(portfolio_value[-1] * (1 + return_t / 100)) return portfolio_value

2.3 백테스트 실행

12개월(τ=12)을 기준으로 백테스트를 실행합니다.
python
# 초기 조건 설정 initial_money = 100 # 시계열 모멘텀 실행 portfolio_12m = time_series_momentum( tau=12, risky_return=risky_return, risk_free_return=risk_free_return, initial_money=initial_money )

2.4 결과 시각화

백테스트 결과를 시각화하여 전략 성과를 확인합니다.
python
import matplotlib.pyplot as plt # 결과 그래프 그리기 plt.figure(figsize=(10, 6)) plt.plot(portfolio_12m, label='Momentum (12M)') plt.title('Time-series Momentum Strategy') plt.xlabel('Time') plt.ylabel('Portfolio Value') plt.legend() plt.grid() plt.show()

3. 추가 기능

3.1 성과 지표 계산

포트폴리오의 CAGR(연평균 성장률)과 Sharpe Ratio를 계산하여 전략 성과를 평가할 수 있습니다.
python
def calculate_performance(portfolio_value): # CAGR 계산 cagr = ((portfolio_value[-1] / portfolio_value[0]) ** (1 / (len(portfolio_value) / 12)) - 1) * 100 # Sharpe Ratio 계산 (무위험 자산 제외) returns = pd.Series(portfolio_value).pct_change().dropna() sharpe_ratio = returns.mean() / returns.std() * (12 ** 0.5) return round(cagr, 2), round(sharpe_ratio, 2) cagr, sharpe_ratio = calculate_performance(portfolio_12m) print(f"CAGR: {cagr}%, Sharpe Ratio: {sharpe_ratio}")

3.2 다양한 τ값 테스트

다양한 τ값(예: 3개월, 6개월 등)을 사용하여 성과를 비교할 수 있습니다.
python
taus = [3, 6, 12] results = {} for tau in taus: portfolio = time_series_momentum(tau, risky_return, risk_free_return, initial_money) cagr, sharpe_ratio = calculate_performance(portfolio) results[tau] = {'CAGR': cagr, 'Sharpe Ratio': sharpe_ratio} print(results)

4. 최적화 및 추가 분석

4.1 벤치마크 비교

벤치마크로 KOSPI200 지수를 사용하여 전략 성과와 비교합니다.
python
def benchmark_performance(risky_asset, initial_money): benchmark_portfolio = (risky_asset / risky_asset.iloc[0]) * initial_money returns = benchmark_portfolio.pct_change().dropna() cagr = ((benchmark_portfolio[-1] / benchmark_portfolio[0]) ** (1 / (len(benchmark_portfolio) / 12)) - 1) * 100 sharpe_ratio = returns.mean() / returns.std() * (12 ** 0.5) return benchmark_portfolio, round(cagr, 2), round(sharpe_ratio, 2) benchmark_portfolio, benchmark_cagr, benchmark_sharpe = benchmark_performance(risky_asset, initial_money) print(f"Benchmark CAGR: {benchmark_cagr}%, Sharpe Ratio: {benchmark_sharpe}")

4.2 Drawdown 분석

최대 손실(Drawdown)을 분석하여 리스크를 평가합니다.
python
def calculate_drawdown(portfolio_value): max_value = pd.Series(portfolio_value).cummax() drawdown = (pd.Series(portfolio_value) - max_value) / max_value * 100 max_drawdown = drawdown.min() return drawdown, round(max_drawdown, 2) drawdown_12m, max_drawdown_12m = calculate_drawdown(portfolio_12m) print(f"Max Drawdown (12M): {max_drawdown_12m}%")

5. 결론

시계열 모멘텀 전략은 단순하지만 강력한 툴로 다양한 시장 환경에서 유용하게 활용될 수 있습니다.

주요 체크포인트:
  • 데이터 준비: 위험자산 및 무위험자산 데이터를 동일한 기간과 단위로 정리.
  • 하이퍼파라미터 설정: τ값 및 리밸런싱 주기를 신중히 선택.
  • 성과 분석: CAGR 및 Sharpe Ratio 등을 통해 전략 성능 평가.
  • 리스크 관리: Drawdown 분석을 통해 최대 손실 확인.