본문 바로가기
주식_퀀트_파이썬/전략 테스트

사계절 포트폴리오 2 - 월간 리밸런싱

by 인더카 2023. 2. 8.
반응형

이전글에서 사계절 포트폴리오 전략의 내용과 백테스트 구현 부분을 살펴보았다.

 

2023.02.05 - [퀀트_파이썬/전략 테스트] - 사계절 포트폴리오 1 - 전략 설명 / 연간 리밸런싱 백테스트

 

사계절 포트폴리오 1 - 전략 설명 / 연간 리밸런싱 백테스트

이 글은 본인의 네이버 블로그 글을 옮겨 일부 수정한 글이다. 패키지 사용 및 백테스트 기간은 현시점(2023년 2월)에 맞게 업데이트하였다. 원글: https://blog.naver.com/inthecar4345/222789686795 python 패키

inthecar4345.tistory.com

 

  이 글은 본인의 네이버 블로그 글을 옮겨 일부 수정한 글이다.
  패키지 사용 및 백테스트 기간은 현시점(2023년 2월)에 맞게 업데이트하였다.

  원글: https://blog.naver.com/inthecar4345/222808993309

 

사계절 포트폴리오는 기본적으로 연간 리밸런싱이다.

그런데 월간 리밸런싱을 하면 어떻게 될 지 궁금해진다.

월간 리밸런싱은 아무래도 대응주기를 짧게 하여 하락시 좀더 빠르게 대응할 수 있는 장점이 있지만,
거래가 잦은만큼 매매수수료가 더 나갈테고,
윌리엄 번스타인이 <현명한 자산배분 투자자>에서 언급한 것처럼, 모멘텀을 받기 전에 리밸런싱을 하게 되는 불리함이 있다.

소스코드

전체적인 코드는 이전글을 참고하고,
기존 all_season 전략에서 리밸런싱 주기만 monthly로 변경한다.

s_all_season_monthly = bt.Strategy('all_season_monthly',
                [bt.algos.RunMonthly(run_on_end_of_period=True),
                 bt.algos.SelectAll(),
                 bt.algos.WeighSpecified(SPY=0.3,IEF=0.15,TLT=0.4,GLD=0.075,DBC=0.075),
                 bt.algos.Rebalance(),
                 ])
bt_all_season_monthly = bt.Backtest(s_all_season_monthly, df, initial_capital=initial_capital)

s_all_season_yearly = bt.Strategy('all_season_yearly',
                [bt.algos.RunYearly(run_on_first_date=False,
                                     run_on_end_of_period=True,
                                     run_on_last_date=False),
                 bt.algos.SelectAll(),
                 bt.algos.WeighSpecified(SPY=0.3,IEF=0.15,TLT=0.4,GLD=0.075,DBC=0.075),
                 bt.algos.Rebalance(),
                 ])
bt_all_season_yearly = bt.Backtest(s_all_season_yearly, df, initial_capital=initial_capital)

결과

테스트 수행

res = bt.run(bt_all_season_yearly, bt_all_season_monthly, SPY)

그래프의 모양이 거의 같다.

수치로 비교해 보아도 그렇다.

CAGR이 소폭 상승했지만, 그만큼 MDD도 늘어났다.

Stat                 all_season_yearly    all_season_monthly    SPY
-------------------  -------------------  --------------------  ----------
Start                2006-02-05           2006-02-05            2006-02-05
End                  2023-02-03           2023-02-03            2023-02-03
Risk-free rate       0.00%                0.00%                 0.00%

Total Return         171.11%              177.18%               353.26%
Daily Sharpe         0.80                 0.79                  0.54
Daily Sortino        1.28                 1.28                  0.84
CAGR                 6.04%                6.18%                 9.30%
Max Drawdown         -22.99%              -23.67%               -55.15%
Calmar Ratio         0.26                 0.26                  0.17

MTD                  -0.31%               -0.33%                1.44%
3m                   9.39%                9.66%                 11.65%
6m                   -3.67%               -4.19%                0.36%
YTD                  5.65%                5.62%                 7.82%
1Y                   -11.15%              -11.70%               -6.17%
3Y (ann.)            1.53%                1.43%                 10.09%
5Y (ann.)            4.92%                5.01%                 11.23%
10Y (ann.)           5.08%                4.96%                 12.75%
Since Incep. (ann.)  6.04%                6.18%                 9.30%

Daily Sharpe         0.80                 0.79                  0.54
Daily Sortino        1.28                 1.28                  0.84
Daily Mean (ann.)    6.17%                6.32%                 10.91%
Daily Vol (ann.)     7.73%                7.97%                 20.02%
Daily Skew           -0.24                -0.23                 -0.07
Daily Kurt           5.85                 5.79                  14.11
Best Day             3.67%                3.79%                 14.50%
Worst Day            -4.39%               -4.36%                -10.94%

Monthly Sharpe       0.78                 0.79                  0.65
Monthly Sortino      1.33                 1.32                  1.07
Monthly Mean (ann.)  6.19%                6.32%                 10.07%
Monthly Vol (ann.)   7.90%                7.96%                 15.56%
Monthly Skew         -0.53                -0.75                 -0.60
Monthly Kurt         2.73                 2.61                  1.11
Best Month           8.25%                6.85%                 12.69%
Worst Month          -8.36%               -8.91%                -16.50%

Yearly Sharpe        0.69                 0.64                  0.56
Yearly Sortino       1.41                 1.34                  1.04
Yearly Mean          6.45%                6.24%                 10.10%
Yearly Vol           9.30%                9.71%                 18.05%
Yearly Skew          -1.19                -1.02                 -1.16
Yearly Kurt          2.07                 1.50                  1.65
Best Year            18.41%               18.84%                32.29%
Worst Year           -18.80%              -19.29%               -36.77%

Avg. Drawdown        -1.27%               -1.21%                -1.74%
Avg. Drawdown Days   26.89                27.01                 22.02
Avg. Up Month        1.80%                1.74%                 3.27%
Avg. Down Month      -1.51%               -1.80%                -4.13%
Win Year %           82.35%               64.71%                82.35%
Win 12m %            82.47%               79.90%                79.90%

결론

그렇다면 굳이 번거롭게 매달 리밸런싱을 하면 체크하기보다, 연간으로 운용하는 것이 더 좋아 보인다.

대가들이 정한 리밸런싱 주기에는 다 이유가 있는 것 같다. :)

반응형

댓글