rolling 함수를 이용해서 2004년부터 현재까지의 KOSPI 지수를 다운받아 KOSPI의 MDD를 구해보자.
(*참고 : 파이썬 증권데이터 분석 作김황후)
1. 이동평균이란(MA, Moving Average)?
이동산술평균 (Moving Mean) 또는 롤링산술평균(Rolling Mean) 이라고도 하며, 특정 크기의 부분집합을 연속적으로 이동하며 산출한 평균을 의미한다. 부분집합을 이동시키며 연속적인 평균값을 산출함으로써 평균값의 흐름을 알 수 있게 하며, 일정 기간 혹은 데이터 구간의 평균의 흐름을 알 수 있게 해준다.
2. MDD란?
최대손실낙폭(Maximum DrawDown)으로, 특정 기간에 발생한 최고점에서 최저점까지의 가장 큰 손실을 의미한다.
* MDD = (최저점 - 최고점) / 최저점
3. rolling 함수란?
기본적 사용방법
시리즈.rolling(윈도우 크기 [, min_periods = 1])[.집계 함수()]
window
rolling() 함수는 시리즈에서 윈도우 크기에 해당하는 개수만큼 데이터를 추출하여 집계 함수에 해당하는 연산을 실시한다. 집계 함수로는 최댓값 max(), 평균값 mean(), 최솟값 min()을 사용할 수 있다.
min_periods
이 값을 지정하면 데이터 개수가 윈도우 크기에 못미치더라도 지정한 갯수만 만족하면 연산을 수행한다.
4. KOSPI의 MDD 산출
야후 파이낸스(yfinance)에서 KOSPI 지수 데이터를 가져와 rolling 함수를 이용해서 MDD를 계산하는 방법은 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
import matplotlib.pyplot as plt
kospi = pdr.get_data_yahoo('^KS11', '2004-01-04')
window = 252
peak = kospi['Adj Close'].rolling(window, min_periods = 1).max()
drawdown = kospi['Adj Close']/peak - 1.0
max_dd = drawdown.rolling(window, min_periods = 1).min()
plt.figure(figsize = (9, 7))
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()
|
cs |
코드의 실행 결과 다음과 같은 그래프가 땋!

*산정 기간에 해당하는 window 값은 1년 동안의 개장일을 어림잡아 252일로 설정했다.
분석 결과 서브프라임 금융위기 당시 2008년 10월 24일에 KOSPI 지수가 10.57% 하락하면서 MDD가 -54.5%를 기록했다. 굉장한 폭락....
'개발공부' 카테고리의 다른 글
[Python] timedelta 함수의 사용법 (0) | 2020.09.07 |
---|---|
[Python] yfinance 함수 사용 시 override()를 사용해야 하는 이유는? (0) | 2020.09.06 |
[git] 지역저장소에서 생성한 파일 및 코드를 원격저장소에 반영 (0) | 2020.07.28 |
[git] clone - 원격저장소를 지역저장소로 복제 (0) | 2020.07.28 |
[Python] 다른 사람 마음읽기 알고리즘 (0) | 2020.07.13 |