모멘텀 자동매매 전략 구현

모멘텀 전략이란?

모멘텀(Momentum) 전략은 최근 상승한 자산은 계속 상승하고, 하락한 자산은 계속 하락하는 경향을 활용하는 퀀트 투자 기법입니다. 학술적으로도 가장 강력하게 검증된 이상현상(anomaly) 중 하나로, 주식·암호화폐·선물 등 거의 모든 시장에서 유효성이 확인되었습니다.

자동매매 시스템에 모멘텀 전략을 적용하면 감정 개입 없이 체계적으로 추세를 포착할 수 있습니다. 이 글에서는 모멘텀의 원리부터 파이썬 구현, 실전 운용 시 주의점까지 다룹니다.

모멘텀의 종류

모멘텀 전략은 크게 두 가지로 나뉩니다. 각각의 특성을 이해해야 자신의 매매 스타일에 맞는 전략을 선택할 수 있습니다.

시계열 모멘텀 (Time-Series Momentum)

개별 자산의 과거 수익률을 기준으로 방향을 결정합니다. 지난 N일간 수익률이 양(+)이면 매수, 음(-)이면 매도(또는 공매도)하는 방식입니다.

import pandas as pd
import numpy as np

def time_series_momentum(prices, lookback=20):
    """시계열 모멘텀 시그널 생성"""
    returns = prices.pct_change(lookback)
    signal = np.where(returns > 0, 1, -1)
    return pd.Series(signal, index=prices.index)

# BTC 가격 데이터 적용
btc = pd.read_csv('btc_daily.csv', index_col='date', parse_dates=True)
signal = time_series_momentum(btc['close'], lookback=20)
print(f"롱 시그널: {(signal == 1).sum()}일")
print(f"숏 시그널: {(signal == -1).sum()}일")

횡단면 모멘텀 (Cross-Sectional Momentum)

여러 자산의 상대적 강도를 비교하여 상위 종목은 매수, 하위 종목은 매도합니다. 암호화폐 시장에서는 시가총액 상위 코인들 중 최근 수익률이 높은 코인에 집중 투자하는 방식으로 활용됩니다.

def cross_sectional_momentum(price_df, lookback=30, top_n=3):
    """횡단면 모멘텀: 상위 N개 종목 선택"""
    returns = price_df.pct_change(lookback)
    ranks = returns.rank(axis=1, ascending=False)
    # 상위 N개만 동일 비중
    weights = (ranks <= top_n).astype(float)
    weights = weights.div(weights.sum(axis=1), axis=0)
    return weights

# 멀티 코인 데이터
coins = pd.DataFrame({
    'BTC': btc_prices,
    'ETH': eth_prices,
    'SOL': sol_prices,
    'AVAX': avax_prices
})
weights = cross_sectional_momentum(coins, lookback=30, top_n=2)

룩백 기간의 선택

모멘텀 전략의 성과는 룩백 기간(lookback period)에 크게 좌우됩니다. 기간별 특성을 정리하면 다음과 같습니다.

룩백 기간 특성 적합한 시장
1~5일 단기 반전 효과 혼재, 노이즈 많음 고빈도 트레이딩
10~30일 중기 추세 포착, 가장 보편적 암호화폐, 선물
60~120일 강한 추세에 효과적, 진입 지연 주식, ETF
200일+ 장기 추세, 거래 빈도 낮음 자산배분

암호화폐 시장은 전통 시장보다 변동성이 크기 때문에 10~30일 룩백이 효과적인 경우가 많습니다. 다만, 단일 기간에 의존하면 과최적화 위험이 있으므로 복수 기간의 평균을 사용하는 것이 안정적입니다.

모멘텀 전략의 약점: 반전 리스크

모멘텀 전략의 가장 큰 적은 추세 반전(reversal)입니다. 강한 상승 추세를 따라 매수했는데 갑자기 급락이 발생하면 큰 손실을 입을 수 있습니다. 이를 "모멘텀 크래시(momentum crash)"라 합니다.

반전 리스크 완화 방법

  • 변동성 조정: 변동성이 높을 때 포지션 크기를 줄입니다. 변동성이 2배면 포지션을 절반으로 조절하는 역변동성(inverse volatility) 가중 방식이 대표적입니다.
  • 손절 규칙: ATR(Average True Range) 기반 트레일링 스탑을 설정합니다. 손실 한도 규칙을 사전에 정의해 두어야 합니다.
  • 필터 결합: 모멘텀 시그널에 거래량, RSI 과매수 필터 등을 추가하여 가짜 신호를 걸러냅니다.
  • 듀얼 모멘텀: 시계열 모멘텀과 횡단면 모멘텀을 결합하여 절대 수익이 음수인 자산은 아예 진입하지 않습니다.
def dual_momentum(prices_df, abs_lookback=20, rel_lookback=30, top_n=2):
    """듀얼 모멘텀: 절대 + 상대 모멘텀 결합"""
    abs_returns = prices_df.pct_change(abs_lookback)
    rel_returns = prices_df.pct_change(rel_lookback)
    
    # 절대 모멘텀 필터: 수익률 > 0인 것만
    abs_filter = abs_returns > 0
    
    # 상대 모멘텀: 상위 N개
    ranks = rel_returns.rank(axis=1, ascending=False)
    rel_filter = ranks <= top_n
    
    # 둘 다 통과한 종목만 투자
    final = (abs_filter & rel_filter).astype(float)
    weights = final.div(final.sum(axis=1).replace(0, 1), axis=0)
    return weights

자동매매 시스템 구현 포인트

모멘텀 전략을 자동매매 봇으로 운용할 때 실전에서 챙겨야 할 핵심 사항들입니다.

리밸런싱 주기

모멘텀 전략은 지속적인 리밸런싱이 필요합니다. 너무 자주 하면 수수료가 수익을 잠식하고, 너무 드물면 시그널이 무뎌집니다. 일반적으로 주 1회 ~ 월 1회 리밸런싱이 비용 효율과 성과 사이의 균형점입니다.

슬리피지 관리

모멘텀 전략은 강한 추세 구간에서 진입하므로, 이미 가격이 빠르게 움직이는 상태에서 주문을 넣게 됩니다. 시장가 주문 대신 공격적 지정가(aggressive limit order)를 사용하면 슬리피지를 줄일 수 있습니다.

포지션 사이징

켈리 기준(Kelly Criterion)이나 고정 비율(fixed fractional) 방식으로 각 포지션의 크기를 결정합니다. 계좌 생존 규칙에서 강조했듯, 단일 포지션에 과도한 비중을 싣지 않는 것이 생존의 핵심입니다.

모멘텀 vs 평균회귀: 언제 어떤 전략?

모멘텀과 평균회귀(mean reversion)는 정반대 논리의 전략입니다. 시장 상황에 따라 유효한 전략이 달라집니다.

  • 추세 시장(trending): 모멘텀이 유리. 한 방향으로 지속적인 움직임이 있을 때 수익 극대화.
  • 횡보 시장(ranging): 평균회귀가 유리. 일정 범위 내에서 왕복 매매로 수익 확보.
  • 급변 시장(volatile): 양쪽 모두 위험. 포지션 축소 또는 관망이 최선.

고급 자동매매 시스템은 시장 레짐을 감지하여 모멘텀과 평균회귀를 동적으로 전환합니다. 이를 적응형(adaptive) 전략이라 합니다.

마무리

모멘텀 자동매매 전략은 "추세를 따르라"는 가장 오래된 투자 격언을 체계화한 것입니다. 단순하지만 강력한 전략인 만큼, 반전 리스크 관리와 현실적인 비용 반영이 실전 성패를 가릅니다. 듀얼 모멘텀으로 절대·상대 필터를 결합하고, 변동성 조절로 포지션을 관리하면 보다 안정적인 운용이 가능합니다.

위로 스크롤
WordPress Appliance - Powered by TurnKey Linux