본문 바로가기
테크_공부/python bt (backtesting)

bt 결과 분석 함수 (feat.ffn) - display()

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

전략테스트와 별개로, 테스트에 사용한 bt package에 대해 공부한 내용을 정리해 본다.

툴에 대해서도 잘 알아야 전략을 쉽게 짤 수 있기 때문이다.

 

[[bt package를 이용한 백테스트]]

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

 

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

python 패키지 중 백테스트를 할 수 있는 bt라는 패키지가 있다. https://pmorissette.github.io/bt/# bt - Flexible Backtesting for Python — bt 0.2.10 documentation What is bt? bt is a flexible backtesting framework for Python used to test

inthecar4345.tistory.com

  이 글은 본인의 네이버 블로그 글을 옮겨 일부 수정한 글이다.

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

 bt로 backtest를 돌리면 result로 ffn.core.PerformanceStats instance를 리턴하는데,

이 instance는 다양한 함수를 가지고 있어 사용자가 여러 형태로 결과를 뽑아볼 수 있다.

 

ffn은 퀀트분석을 위한 다양한 기능을 가지고 있는 라이브러리로,

bt는 내부적으로 상당히 많은 함수를 ffn의 것을 사용하고 있다.

 

https://pmorissette.github.io/ffn/index.html

 

ffn - Financial Functions for Python — ffn 0.3.6 documentation

ffn - Financial Functions for Python ffn is a library that contains many useful functions for those who work in quantitative finance. It stands on the shoulders of giants (Pandas, Numpy, Scipy, etc.) and provides a vast array of utilities, from performance

pmorissette.github.io

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%
 
보통 퀀트를 접해본 사람들은 CAGR, Max Drawdown 정도를 살펴보겠지만,,,
이 포스트에선 항목별로 무슨 의미인지 전체적으로 살펴보겠다.

항목별

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

 

What Is the Risk-Free Rate of Return, and Does It Really Exist?

The risk-free rate of return is the theoretical rate of return of an investment with zero risk.

www.investopedia.com

아래 함수로 설정할 수 있다.

res.set_riskfree_rate(0.03)

argument는 float으로, 0.03은 3%를 의미한다.

 

risk-free rate를 입력시 다른 값은 변화가 없지만, sharpe 지수와 sortino 지수만은 변한다.
이 둘을 계산할 때 무위험 수익률을 사용하기 때문이다.

잘 설명된 블로그가 있어 링크한다.
https://jack-jack.tistory.com/196

 

샤프지수(Sharpe Ratio), 소르티노지수 (Sortino Ratio)이란 무엇일까?

안녕하세요. 쉽게 지저귀는 짹짹이입니다. 자산배분 포트폴리오 백 테스팅할 때 혹은 펀드를 고를 때 종종 보이는 샤프지수와 소르티노 지수에 대하여 쉽게 말씀드리려고 자료를 찾다가 명쾌하

jack-jack.tistory.com

 

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

 

What Is the Calmar Ratio, Its Strenths & Weaknesses?

The Calmar ratio compares the average annual compounded rate of return and the maximum drawdown risk of commodity trading advisors and hedge funds.

www.investopedia.com

 

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://yjam.tistory.com/90

 

왜도(Skewness)와 첨도(Kurtosis)

데이터 분석에서 왜도와 첨도는 중요한 요소. 왜도 왜도(Skewness)는 데이터의 분포가 한쪽으로 쏠린 것을 의미한다. Positive Skewness는 왼쪽에 데이터가 많은 형태이다. Negative Skewness는 오른쪽에 데

yjam.tistory.com

찾다보니 왜도와 첨도와 주식수익률에 관한 논문도 있다.
요약을 보면, 장기투자에서 왜도와 수익률의 관계는 유의미하지 않고, 첨도와 수익률을 양의 관계에 있다고 한다.

https://www.dbpia.co.kr/Journal/articleDetail?nodeId=NODE08783041 

 

변동성, 왜도, 첨도와 주식수익률의 횡단면 | DBpia

심명화 | 재무관리연구 | 2016

www.dbpia.co.kr

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 - 월간 리밸런싱

 

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

이전글에서 사계절 포트폴리오 전략의 내용과 백테스트 구현 부분을 살펴보았다. 2023.02.05 - [퀀트_파이썬/전략 테스트] - 사계절 포트폴리오 1 - 전략 설명 / 연간 리밸런싱 백테스트 사계절 포트

inthecar4345.tistory.com

 

반응형

댓글