본문 바로가기

재테크

듀얼 모멘텀(Dual Momentum) 전략 Python 자동화 코드

 강환국 작가의 "거인의 포트폴리오"에 나오는 듀얼 모멘텀(Dual Momentum) 전략에 대한 글이다. 해당 전략의 특징은 아래와 같다.

 

듀얼 모멘텀(Dual Momentum) 전략

  • 자산 종류
    • 미국 주식(SPY), 선진국 주식(EFA), 미국 채권(AGG)
  • 전략
    if SPY > BIL: # 12개월 수익률 기준
    		매수(max(SPY, EFA))
    else:
    		매수(AGG)
    
  • 매도 전략 : 월 1회 리밸런싱

 

자동화 코드는 아래와 같다. VAA 비해 간단하다.

 

from FinanceDataReader import DataReader
from datetime import timedelta

# Dual Momentum 전략
date_start = '20210101'
etf_names = ['SPY', 'BIL', 'EFA']
data_dict = {}
for etf_name in etf_names:
    data_dict[etf_name] = DataReader(etf_name, date_start)

SPY = data_dict['SPY']
today = SPY.index[-1]

one_year_ago = today - timedelta(365)

def get_earning_rate(etf_name):
    """이름이 etf_name인 ETF의 12개월간 수익률 리턴"""
    etf_data = data_dict[etf_name]
    today_price = etf_data.loc[today].Close
    score = 0
    print(f'{etf_name} 12개월간 수익률', ':', end=' ')
    
    date = one_year_ago
    past_price = etf_data.loc[etf_data.index > date].iloc[0].Close
    earning_rate = (today_price - past_price) / past_price * 100
    print(f'{earning_rate:.3f}%')
    return earning_rate
    
er_SPY = get_earning_rate('SPY')
er_BIL = get_earning_rate('BIL')
er_EFA = get_earning_rate('EFA')

if er_SPY > er_BIL:
    print("{}를 매수하세요.".format(max(er_SPY, er_EFA)))
else:
    print("AGG를 매수하세요.")