
4_5.py
0.37MB
4_5.ipynb
1.03MB

#총 누적 수익률=bm_daily_total_value
# 전략 총 수익률 계산
total_return_pct = bm_daily_total_value[-1]/bm_daily_total_value[0]
print('총 수익률: {:.2f}%'.format((total_return_pct-1)*100))
총 수익률: 374.04%
# 1년을 250일로 가정, 연 복리 수익률 계산
total_years = len(bm_daily_total_value)/250
print('총 백테스팅 기간: {:.2f}년'.format(total_years))

import math
annaul_return = math.pow(total_return_pct,1/total_years)
print('연 수익률: {:.2f}%'.format((annaul_return-1)*100))
총 백테스팅 기간: 14.14년 연 수익률: 11.64%


# Sharpe Ratio
daily_return = math.pow(total_return_pct,1/len(bm_daily_total_value)) #총 누적 수익률=bm_daily_total_value #복리
daily_std = pd.DataFrame(bm_daily_total_value).pct_change().std()[0] #단




- daily_return은 공식의 분자(R_p)에 해당합니다.
- 엄밀히 말하면 $R_p$는 포트폴리오 수익률입니다. 코드에서 math.pow를 통해 구한 값은 전체 기간의 총 수익을 일일 단위로 쪼갠 **'일일 복리 수익률'**이므로, 공식의 상단에 들어갈 수익률 데이터를 준비하는 과정입니다.
- 이미지 설명에 있듯이 보통 $R_f$(무위험 수익률, 예: 채권 금리)를 빼주지만, 코딩 시에는 보통 0으로 간주하고 생략하기도 합니다.
- daily_std는 공식의 분모(sigma_p)에 해당합니다.
- $\sigma_p$는 포트폴리오의 **변동성(표준편차)**을 의미합니다.
- 작성하신 std()[0]가 바로 이 변동성을 계산하는 핵심 코드입니다.

MDD연결


dd = tv/tv.cummax()는 **MDD(최대 낙폭)를 계산하기 위해 현재 시점의 자산 가치가 역대 최고점 대비 어느 정도 수준인지(Drawdown)**를 구하는 공식입니다.
[0]이 있는 이유: 데이터의 "위치" 지정
코드 상단에서 tv = pd.DataFrame(daily_total_value)를 통해 데이터를 Pandas DataFrame 형식으로 만드셨습니다.
100이 있는 이유: "비율"을 "퍼센트(%)"로 변환



plt.twinx().plot(bm_daily_total_value*daily_total_value[0],c='r') #twinx를 사용해서, 수치를 맞춤

'파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 > chapter4 백테스팅 알고리즘 트레이딩 정복하기 전략' 카테고리의 다른 글
| chapter4 알고리즘 트레이딩 정복하기-Sharpe Ratio 와 MMD 접목 정량적 백테스팅 정의 및 성과지표 실습 (0) | 2026.01.29 |
|---|---|
| chapter4 알고리즘 트레이딩 정복하기-정량적 백테스팅 정의 및 성과지표 개념 소개 (0) | 2026.01.28 |
| chapter4 알고리즘 트레이딩 정복하기-백테스팅과 수익률 그래프 그리기-(슬리피지 적용0,슬리피지 적용X 비교) (0) | 2026.01.28 |
| chapter4 알고리즘 트레이딩 정복하기-백테스팅 이유/기초백테스팅 모델 개발-(슬리피지 적용x) (0) | 2026.01.27 |
| chapter4 알고리즘 트레이딩 정복하기 매매시그널과 백테스킹으로 실습예제 (0) | 2026.01.27 |