전략테스트와 별개로, 테스트에 사용한 bt package에 대해 공부한 내용을 정리해 본다.
툴에 대해서도 잘 알아야 전략을 쉽게 짤 수 있기 때문이다.
[[bt package를 이용한 백테스트]]
2023.02.05 - [주식_퀀트_파이썬/전략 테스트] - 사계절 포트폴리오 1 - 전략 설명 / 연간 리밸런싱 백테스트
이 글은 본인의 네이버 블로그 글을 옮겨 일부 수정한 글이다. 원글: https://blog.naver.com/inthecar4345/222817044445 |
bt로 backtest를 돌리면 result로 ffn.core.PerformanceStats instance를 리턴하는데,
이 instance는 다양한 함수를 가지고 있어 사용자가 여러 형태로 결과를 뽑아볼 수 있다.
ffn은 퀀트분석을 위한 다양한 기능을 가지고 있는 라이브러리로,
bt는 내부적으로 상당히 많은 함수를 ffn의 것을 사용하고 있다.
https://pmorissette.github.io/ffn/index.html
bt 결과 분석에 사용하는 함수들은 정말 많은데, 이 포스트에선 우선 display() 함수에 대해 살펴보겠다.
display()
테스트 결과를 텍스트 형태로 보여주는 함수이다.
전체 항목
Stat all_season SPY
------------------- ------------ ----------
Start 2006-02-05 2006-02-05
End 2023-02-24 2023-02-24
Risk-free rate 0.00% 0.00%
Total Return 165.53% 335.71%
Daily Sharpe 0.76 0.53
Daily Sortino 1.22 0.82
CAGR 5.89% 9.02%
Max Drawdown -23.68% -55.15%
Calmar Ratio 0.25 0.16
MTD -4.34% -2.48%
3m -1.18% -1.05%
6m -5.36% -3.34%
YTD 1.37% 3.65%
1Y -13.68% -5.95%
3Y (ann.) -0.54% 8.84%
5Y (ann.) 4.03% 9.22%
10Y (ann.) 4.50% 12.35%
Since Incep. (ann.) 5.89% 9.02%
Daily Sharpe 0.76 0.53
Daily Sortino 1.22 0.82
Daily Mean (ann.) 6.05% 10.65%
Daily Vol (ann.) 7.98% 20.01%
Daily Skew -0.23 -0.07
Daily Kurt 5.78 14.10
Best Day 3.80% 14.50%
Worst Day -4.36% -10.94%
Monthly Sharpe 0.76 0.63
Monthly Sortino 1.25 1.04
Monthly Mean (ann.) 6.08% 9.84%
Monthly Vol (ann.) 8.04% 15.58%
Monthly Skew -0.75 -0.59
Monthly Kurt 2.44 1.08
Best Month 6.86% 12.69%
Worst Month -8.90% -16.50%
Yearly Sharpe 0.61 0.54
Yearly Sortino 1.28 1.02
Yearly Mean 5.98% 9.85%
Yearly Vol 9.78% 18.11%
Yearly Skew -0.92 -1.11
Yearly Kurt 1.24 1.50
Best Year 18.83% 32.29%
Worst Year -19.30% -36.77%
Avg. Drawdown -1.22% -1.73%
Avg. Drawdown Days 27.43 22.00
Avg. Up Month 1.74% 3.28%
Avg. Down Month -1.86% -4.10%
Win Year % 64.71% 82.35%
Win 12m % 79.90% 79.90%
이 포스트에선 항목별로 무슨 의미인지 전체적으로 살펴보겠다.
항목별
Start 2006-02-05 2006-02-05
End 2023-02-24 2023-02-24
Risk-free rate 0.00% 0.00%
Risk-free rate
무위험 수익률을 뜻한다. 일반적으로 정기예금, 국채 등의 수익률을 말한다.
https://www.investopedia.com/terms/r/risk-freerate.asp
아래 함수로 설정할 수 있다.
res.set_riskfree_rate(0.03)
argument는 float으로, 0.03은 3%를 의미한다.
risk-free rate를 입력시 다른 값은 변화가 없지만, sharpe 지수와 sortino 지수만은 변한다.
이 둘을 계산할 때 무위험 수익률을 사용하기 때문이다.
잘 설명된 블로그가 있어 링크한다.
https://jack-jack.tistory.com/196
Total Return 165.53% 335.71%
Daily Sharpe 0.76 0.53
Daily Sortino 1.22 0.82
CAGR 5.89% 9.02%
Max Drawdown -23.68% -55.15%
Calmar Ratio 0.25 0.16
Total Return
전략기간동안의 누적 수익률을 뜻한다.
CAGR
연평균 수익률을 뜻한다.
Max Drawdown (MDD)
최대 낙폭을 뜻한다.
포트폴리오를 운영시 고점에서 최대 얼마나 떨어졌는지를 나타낸다.
낙폭이기 때문에 항상 마이너스값으로 표기한다.
예제의 SPY는 전략기간동안 -55.15% 가 빠졌다는 뜻이다.
버티기 힘든 하락폭이다.
포트폴리오의 효과를 측정하는 대표적인 척도 중 하나이다.
Calmar ratio
MDD 대비 수익률을 측정하는 지수이다.
무위험 수익률을 사용하지 않아, risk-free ratio 설정과 관계 없이 수치가 동일한다.
https://www.investopedia.com/terms/c/calmarratio.asp
MTD -4.34% -2.48%
3m -1.18% -1.05%
6m -5.36% -3.34%
YTD 1.37% 3.65%
1Y -13.68% -5.95%
3Y (ann.) -0.54% 8.84%
5Y (ann.) 4.03% 9.22%
10Y (ann.) 4.50% 12.35%
Since Incep. (ann.) 5.89% 9.02%
MTD
Month To Date의 약자로, 이달초부터 현시점까지의 누적수익률이다.
즉, 이번달 수익률이라고 보면 된다.
YTD
Year to Date의 약자로, 연초부터 현시점까지의 누적수익률이다.
즉, 올해 수익률이다.
3m, 6m, 1Y, 3Y, 5Y, 10Y
3개월, 6개월, 1년, 3년, 5년, 10년 수익률이다.
(ann.)이 붙은 건 연환산 수익률이다.
Since Incep.
Inception Date, 시작일로부터의 누적 수익률이다.
Daily Sharpe 0.76 0.53
Daily Sortino 1.22 0.82
Daily Mean (ann.) 6.05% 10.65%
Daily Vol (ann.) 7.98% 20.01%
Daily Skew -0.23 -0.07
Daily Kurt 5.78 14.10
Best Day 3.80% 14.50%
Worst Day -4.36% -10.94%
구간별 분석은, Daily, Monthly, Yearly 로 보여준다.
구간만 다르고 세부 항목은 같다.
Mean (ann.), Vol (ann.)
이 두개는 정확히 무슨 뜻인지 모르겠다 ㅜ.ㅠ
혹시 아시는 분 댓글로 부탁드린다. 하하..
Skew
skewness의 약자로, 왜도를 의미한다.
분포가 정규분포에 비해서 얼마나 비대칭인지 나타내는 척도이다.
대략 +/- 2 정도면 치우침이 없는 것으로 간주한다.
Kurt
Kurtosis의 약자로, 첨도를 의미한다.
이 값이 크면 (보통 3보다) 아웃라이너가 많다는 것을 의미한다.
Skew, Kurt를 제대로 이해하려면 통계학적 지식이 필요하다.
잘 설명된 블로그를 링크한다.
찾다보니 왜도와 첨도와 주식수익률에 관한 논문도 있다.
요약을 보면, 장기투자에서 왜도와 수익률의 관계는 유의미하지 않고, 첨도와 수익률을 양의 관계에 있다고 한다.
https://www.dbpia.co.kr/Journal/articleDetail?nodeId=NODE08783041
Best day, Worst day
최고 수익률, 최악 수익률을 기록한 날의 수익률이다.
Avg. Drawdown -1.22% -1.73%
Avg. Drawdown Days 27.43 22.00
Avg. Up Month 1.74% 3.28%
Avg. Down Month -1.86% -4.10%
Win Year % 64.71% 82.35%
Win 12m % 79.90% 79.90%
Avg. Drawdown
평균 하락폭이다.
Avg. Drawdown Days
평균 하락일이다.
전체 측정 기간 중 21.17일 하락했다는 의미가 아니라,
한번 하락하면 평균 21.17일 동안 하락하고 다시 올라왔다는 의미이다.
Avg. Up month, Avg. Down Month
상승한 달의 평균 수익률, 하락한 달의 평균 수익률이다.
Win Year %
연단위로 끊었을 때 승리한 연도의 비율이다.
Win 12m %
최근 12개월의 승률이다.
result에 있는 함수 중 display가 가장 내용이 많은 것 같다..
다음 포스트에서는 display외에 다른 함수의 내용을 살펴보겠다.
2023.02.08 - [주식_퀀트_파이썬/전략 테스트] - 사계절 포트폴리오 2 - 월간 리밸런싱
댓글