자산배분

TQQQ, TMF 평균 모멘텀 스코어 백테스트

unius 2023. 1. 12. 10:07
728x90
반응형

TQQQ, TMF 백테스트 기록을 올리기 시작한 이후 6번째 글이다. 앞으로 2번 정도 더 올릴 예정이다. 번외편으로 1~2번 더 올라갈 수도 있다. 오늘은 평균 모멘텀 스코어 방식에 따른 백테스트 결과를 공유한다. 상대 모멘텀이나 절대 모멘텀 방식이 모멘텀을 산출하기 위한 기간을 특정하여 백테스트를 수행하는 반면에 평균 모멘텀 스코어 방식은 1~12개월의 모든 모멘텀의 평균으로 자산의 비중을 결정한다. 보다 더 자세한 내용은 아래 글을 참고하자.

 

평균모멘텀 스코어 전략

모멘텀 전략은 크게 두가지가 있다. 상대모멘텀 전략과 절대모멘텀 전략이다. 모멘텀 전략은 최근에 오르는 자산이 계속해서 오르는 경향성에 투자하는 전략이다. 가격에 모든 정보가 적시에

myportfolio.tistory.com

간단히 백테스트의 방법을 설명하면 이번 백테스트는 TQQQ와 TMF의 50:50 고정 비중 전략에 평균 모멘텀 스코어를 더하여 동적으로 각 자산의 투자 비중을 결정하는 방식으로 안전자산은 미국 초단기 채권인 BIL ETF로 가정하고 테스트 하였다. 좀 더 쉽게 예를 들면 아래와 같다.

  • TQQQ, TMF 의 초기 비중을 50:50으로 정한다.
  • 각 투자자산의 평균 모멘텀 스코어를 산출한다.
  • 각 자산의 평균 모멘텀 스코어가 0.7과 0.3인 경우, TQQQ의 투자비중은 50*0.7= 35%, TMF의 투자비중은 50*0.3=15%가 되고 나머지 50%는 BIL ETF에 투자한다.
# 평균모멘텀 스코어 전략 및 백테스트 객체 생성
def AverageMomentum_BT(assets, start_day, run_on_end_of_period=False, lag=1, cash_weight=0, returns=pd.DataFrame(), ylookback=0, name='Average Momentum'):
    s = bt.Strategy(name, [bt.algos.RunAfterDate(start_day),
                           bt.algos.RunMonthly(run_on_first_date=False, run_on_end_of_period=run_on_end_of_period, run_on_last_date=False),
                           bt.algos.SelectAll(),
                           WeighAMS(lag=lag, cash_weight=cash_weight, returns=returns, ylookback=ylookback),
                           bt.algos.Rebalance()])
    return bt.Backtest(s, assets, initial_capital=100000000.0)
    
# 평균모멘텀 
averagemomentums = {}
cash_weights = [0, 0.3, 0.5]
for i in range(0, len(cash_weights)):
    averagemomentums[i] = AverageMomentum_BT(assets_cash, start_day, False, lag, cash_weights[i], pd.DataFrame(), 0, 'AMS_CASH({})'.format(cash_weights[i]))
    
avg_report = bt.run(*averagemomentums.values())

평균 모멘텀 스코어 전략과 백테스트 객체를 생성한다. AverageMomentum_BT() 모듈의 다섯번째 인자인 cash_weight은 안전자산의 초기 비중(유지비율)을 의미한다. 따라서 해당 값이 0 인 경우, TQQQ와 TMF의 초기 고정 비중이 50%:50%이 되고 cash_weight 0.5인 경우에는 TQQQ와 TMF의 초기 고정 비중이 25%:25%가 되게 된다.

WeighAMS()는 평균 모멘텀 스코어를 산출하는 사용자 정의 클래스로 기본 전략은 매월말 종가를 기준으로 평균 모멘텀 스코어를 계산하고 다음 영업일. 즉, 매월초에 리밸런싱을 수행하는 방식이다. WeighAMS()에서 산출된 평균 모멘텀 스코어 점수가 각 투자자산의 초기 비중에 곱해져서 실제 투자 비중을 결정하게 되는 것이다. WeighAMS() 클래스는 코드가 조금 길어서 다음 글에서 따로 설명하려 한다.

이제 백테스트 결과를 살펴보자.

안전자산의 초기 비중을 0으로 해서 TQQQ와 TMF의 초기 고정 비중을 50%:50%로 했을 때 연간 수익률 16.38%에 최대 손실율은 -37.30%로 좋은 결과를 보여준다. 이전의 듀얼 모멘텀과 비교해보면 연간 수익률은 비슷하면서 최대 손실률은 -40% 미만으로 개선되었다. 그리고 안전자산의 초기 비중을 늘릴수록 CAGR과 MDD가 같이 줄어드는 것도 확인할 수 있다.

다음 글에서는 연간 수익률은 평균 모멘텀 스코어 방식과 비슷한 수준을 유지하면서 최대 손실률은 조금 더 개선할 수 있는 방법에 대해 글을 올려보겠다.

1편 : TQQQ, TMF 고정 비중 백테스트
2편 : TQQQ, TMF 상대 모멘텀 백테스트
3편 : TQQQ, TMF 절대 모멘텀 백테스트(1)
4편 : TQQQ, TMF 절대 모멘텀 백테스트(2)
5편: TQQQ,TMF 듀얼 모멘텀 백테스트
6편: TQQQ, TMF 평균 모멘텀 스코어 백테스트
7편: TQQQ, TMF 수익곡선 모멘텀 백테스트

8편: TQQQ, TMF 평균모멘텀 전략의 비중 계산 Algo 클래스

9편: TQQQ, TMF 가속듀얼모멘텀 백스트

 

☞ 이 글은 순수하게 개인적인 의도로 테스트한 결과이며 내용상 오류가 있을 수도 있습니다.

.

728x90
반응형