본문 바로가기

API

[FinanceDataReader] 주가 및 MDD(Maximum DrawDown) 확인

반응형

FinanceDataReader를 이용해서 주가를 확인하고 MDD를 계산해보겠습니다.

 

FinanceDataReader의 설치 및 기본 사용법이 필요하신 분은 1번 참조 부탁드립니다.

 

1. FinanceDataReader 설치 및 주가정보 확인(Skip가능)

2. 주가 확인 및 MDD계산

 

1. FinanceDataReader 설치(Skip가능)

https://yenpa.tistory.com/19

 

[FinanceDataReader] 설치 및 주식 주가 정보 가져오기(코스피, 코스닥)

국내 주식 정보를 가져와 보겠습니다. FinanceDataReader의 수집데이터의 변경이 있었네요. 내용 수정했습니다(2022/11/09) 1. FinanceDataReader 설치 2. 종목 정보 가져오기 3. 주가 정보 가져오기 1. FinanceDataR

yenpa.tistory.com

 

 

2. 주가 확인 및 MDD계산

필요 라이브러리 import 하고 거래소 전체 회사 리스트를 저장합니다.

import FinanceDataReader as fdr
df_list=fdr.StockListing('KRX')

삼성전자의 주가를 2017-01-04 ~ 2022-10-30까지 불러옵니다.

name='삼성전자'
df_filter=df_list.loc[df_list['Name']==name]
code=df_filter['Code'].values[0]
startdate='2017-01-04'
enddate='2022-10-30'

df_result=fdr.DataReader(code,startdate,enddate)
df_result

 

 

mdd = (저점) / (고점) - 1 로 계산이 되는데

예를 들어 아래의 2017-01-17 기준으로 봤을 때 이전 기간의 고점은 38800이고,

고점 이후의 저점은 36660이 됩니다.

따라서 mdd는 36660/38800-1=-0.055로 -5.6% 정도가 됩니다.

 

 

반응형

 

 

날짜 별로 for문을 실행하면서 이전 기간의 고점을 찾습니다.

import datetime

df_result['max'] = 0
for i, r in df_result.iterrows():
    maxval = df_result.loc[:i,'Close'].max()
    df_result.loc[i,'max']=maxval
df_result

각 날짜 기준 drawdown을 구합니다.

df_result['drawdown'] = (df_result['Close']/df_result['max']-1)*100

그중에서 수치가 가장 적은 곳이 mdd가 되겠죠

mdd = round(df_result['drawdown'].min(),1)
mdd

2017-01-01 ~ 2022-10-30 기간의 삼성전자의 mdd는 -42.2%입니다.

 

그래프로 그려볼까요. plotly를 이용했습니다.

import plotly.express as px

fig=px.line(data_frame=df_result,x=df_result.index, y='mdd', 
            height=400, hover_name=df_result.index.strftime('%Y-%m-%d'))
fig.show()

2022-09-29일에 mdd가 -42인 것을 확인할 수 있습니다.

 

이상으로 FinanceDataReader에서 주가를 가져와 MDD를 계산해봤습니다.

반응형