본문 바로가기
python/금융데이터분석

python 증권데이터 분석 - 최대손실낙폭 MDD(KOSPI MDD구하기)

by orangecode 2022. 12. 23.
728x90
MDD 최대 손실 낙폭

Maximum Drawdown : MDD 최대손실 낙폭은 특정 기간에 발생한 최고점에서 최저점까지의 가장 큰 손실을 의미한다.

 

퀀트 투자에서는 수익률을 높이는 거도 중요하지만 MDD를 최소한으로 낮추는 것이 더 낫다고 이야할 정도로 중요한 지표이다.

 

MDD는 특정기간동안 최대 얼마의 손실이 날 수 있는지 나타내주는 지표이다.

 

KOSPI의 MDD

KOSPI(Korea Composite Stock Price Index, 한국종합주가지수)는 1983년 처음으로 발표되어, 1980년 1월 4일부터 상장된 모든 종목의 시가 총액을 지수기준 100포인트로 집계한다. 

현재 코스피지수는 2316.48이므로 1980년 당시보다 23.1배가 올라있음을 나타낸다

 

KOSPI의 MDD가 가장 컸던 시기는 1994년 1145.66 포인트에서 1998년 277.37 포인트까지 4년간 75.8%가 하락한 기간이 있다.

 

이 기간의 MDD를 -75.8%로 계산하며 전체 주식시장의 1/4가 남은 것이 KOSPI 역사상 최대 손실 낙폭이라고 할 수 있다.

 

2008 서브프라임 모기지 당시 MDD

야후 파이낸스로부터 2004년부터 현재의 KOSPI지수를 다운받아서 KOSPI의 MDD를 구해볼 수 있다.

MDD를 구하기 위해서는 기본적으로 rolling()함수를 알아야 한다.

 

- rolling()함수

시리즈.rolling(윈도우 크기[, min_periods=1]) [,집계 함수()]

 

rolling 함수는 시리즈에서 윈도우 크기에 해당하는 개수만큼 데이터를 추출하여 집계함수에 해당하는 연산을 실시하는 함수이다.

집계함수는 최대값 max(), 평균값 mean(), 최소값 min() 을 사용할 수 있다.

min_periods는 데이터 개수가 윈도우 크기를 충족시키지 못하더라도, min_periods 개수만 충족하면 연산을 수행한다.

 

- KOSPI MDD 구하기

1. kospi 지수 데이터를 다운로드 한다.

kospi 지수데이터 simbol  = ^KS11

 

2. window 값은 252로 산정한다

1년동안 주식시장이 개장되는 영업일이 252일로 잡아 설정한다.

 

3. kospi종가 칼럼에서 1년 기간 단위 최고치를 구한다

 

4. drawdown은 최고치(peak) 대비 현재 kospi 종가가 얼마나 하락했는지 보여준다.

 

5. drawdown은 1년 기간 단위로 최저치 max_dd를 구한다.

max_dd는 마이너스 값이기에 최저치가 바로 KOSPI MDD 값이 된다.

 

2008년 서브프라임 모기지때 KOSPI 지수가 10.57% 하락하면서 MDD가 -54.5% 를 기록했다.

 

2008 서브프라임 금융위기 이후로 최대 낙폭 MDD 는2020년 3월기간으로

코로나19가 터지고 주식시장이 최대 낙폭을 보여준 시기에 35.7% 라는 최대 낙폭을 보여주고 있다는 걸 분석할 수 있다.

전체 코드
import yfinance as yf
from pandas_datareader import data as pdr
import matplotlib.pyplot as plt

yf.pdr_override()

# 1. 코스피 지수 가져오기
kospi = pdr.get_data_yahoo('^KS11', start='2004-01-01')

# 1년간 영업일은 252일로 잡아서 window = 252로 설정
window = 252

# 2. kospi 종가에서 1년기간 단위 최고치 peak를 구함
peak = kospi['Adj Close'].rolling(window, min_periods=1).max()

# 3. kospi 최고치 대비 현재 kospi 종가가 얼마나 하락했는지 구함
drawdown = kospi['Adj Close']/peak - 1.0

# 4. drawdown에서 1년기간 단위로 최저치 max_dd를 구한다. 
# max_dd는 마이너스 값이기에 최저치가 MDD가 된다.
max_dd = drawdown.rolling(window, min_periods=1).min()


# 그래프 작성
plt.figure(figsize=(10,8))
plt.subplot(211)
kospi['Close'].plot(label='KOSPI', title = 'KOSPI MDD', grid=True, legend=True)
plt.subplot(212)
drawdown.plot(c='blue', label='KOSPI DD', grid=True, legend=True)
max_dd.plot(c='red', label='KOSPI MDD', grid=True, legend=True)
plt.show()

 

 

 

참고도서

http://www.yes24.com/Product/Goods/90578506

 

파이썬 증권 데이터 분석 - YES24

투자 기법과 프로그래밍 기술로 자신만의 퀀트 투자 시스템을 완성하라『파이썬 증권 데이터 분석』은 웹 스크레이핑으로 증권 데이터를 주기적으로 자동 수집, 분석, 자동 매매, 예측하는 전

www.yes24.com

https://github.com/INVESTAR/StockAnalysisInPython

 

GitHub - INVESTAR/StockAnalysisInPython

Contribute to INVESTAR/StockAnalysisInPython development by creating an account on GitHub.

github.com

 

반응형

댓글