반응형
이전글에서 사계절 포트폴리오 전략의 내용과 백테스트 구현 부분을 살펴보았다.
2023.02.05 - [퀀트_파이썬/전략 테스트] - 사계절 포트폴리오 1 - 전략 설명 / 연간 리밸런싱 백테스트
이 글은 본인의 네이버 블로그 글을 옮겨 일부 수정한 글이다. 패키지 사용 및 백테스트 기간은 현시점(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%
결론
그렇다면 굳이 번거롭게 매달 리밸런싱을 하면 체크하기보다, 연간으로 운용하는 것이 더 좋아 보인다.
대가들이 정한 리밸런싱 주기에는 다 이유가 있는 것 같다. :)
반응형
'주식_퀀트_파이썬 > 전략 테스트' 카테고리의 다른 글
사계절 포트폴리오 1 - 전략 설명 / 연간 리밸런싱 백테스트 (0) | 2023.02.05 |
---|
댓글