본문 바로가기
파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기/chapter4 백테스팅 알고리즘 트레이딩 정복하기 전략

chapter4 알고리즘 트레이딩 정복하기-벤처마크 성과지표 비교

by ohsungjun 2026. 1. 29.

#총 누적 수익률=bm_daily_total_value
4_5.py
0.37MB
4_5.ipynb
1.03MB
# 전략 총 수익률 계산total_return_pct = bm_daily_total_value[-1]/bm_daily_total_value[0]  print('총 수익률: {:.2f}%'.format((total_return_pct-1)*100))

#총 누적 수익률=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] #단

chapter4 알고리즘 트레이딩 정복하기-Sharpe Ratio 와 MMD 접목 정량적 백테스팅 정의 및 성과지표 실습

 
  • 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이 있는 이유: "비율"을 "퍼센트(%)"로 변환

 

 


100만원으로 시작- 전략
1원으로 시작-벤치마크

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