-
[파이썬 증권데이터분석] 최대손실낙폭(MDD), 회귀분석과 상관관계computer_IT 2022. 7. 16. 20:22반응형
2022.07.13 - [computer_IT] - (파이썬) 일간 변동률 누적합 그래프 그리기
소스코드는 아래 링크
https://github.com/Investar/StockAnalysisInPython
최대손실낙폭
최대 손실 낙폭(MDD: Maximum Drawdown)은 특정 기간에 발생한 최고점에서 최저점까지의 가장 큰 손실을 의미한다.
MDD = (최저점 - 최고점)/최저점
야후 파이낸스로부터 2004년부터 현재까지 KOSPI 지수 데이터를 받아 MDD를 구하기
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') # KOSPI 지수의 심볼은 ^KS11 window = 252 # 산정 기간에 해당하는 1년치 252일로 가정 # rolling 함수는 윈도우 크기에 해당하는 개수만큼 데이터를 추출하여 집계함수에 해당 연산을 실시 # 집계함수로 max(), mean(), min() # 1년 동안의 최고 값 peak 구하기 peak = kospi['Adj Close'].rolling(window, min_periods=1).max() # min_periods를 지정하면 데이터 개수가 윈도우 크기에 못 미쳐도 연산 수행 drawdown = kospi['Adj Close']/peak - 1.0 # 최고치 대비 현재 KOSPI 종가가 얼마나 하락했는지 # drawdown의 최저치가 MDD가 된다. max_dd = drawdown.rolling(window, min_periods=1).min() plt.figure(figsize=(9, 7)) plt.subplot(211) # 2행 1열 중 1행에 그린다. kospi['Close'].plot(label='KOSPI', title='KOSPI MDD', grid=True, legend=True) plt.subplot(212) # 2행 1열 중 2행에 그린다. drawdown.plot(c='blue', label='KOSPI DD', grid=True, legend=True) max_dd.plot(c='red', label='KOSPI MDD', grid=True, legend=True) plt.savefig('test.png') # test.png 이름으로 저장
결과
회귀분석과 상관관계
국내 주식과 미국 주식의 상관관계 비교하기
야후 파이낸스로부터 2004년 1월 4일부터 현재까지 KOSPI 지수와 다우존스 지수 데이터 구하기.
결과 그래프
지수 기준값이 달라 한눈에 알아보기가 어렵다. 따라서 현재 종가를 특정 시점의 종가로 나누어 변동률을 구한다.
회귀분석과 상관관계
상관계수는 -1에서 1의 값을 가지며 양의 상관관계가 가장 강한 값을 1, 음의 상관관계가 가장 강한 값을 -1로 나타낸다.
KOSPI와 다우존스 지수의 상관계수를 구한다.
상관계수가 0.82로 연관성이 크다고 볼 수 있다. 상관관계를 산점도를 이용해 그리고 선형회귀 모델을 생성한 뒤 회귀선을 그려보자.
import pandas as pd from pandas_datareader import data as pdr import yfinance as yf yf.pdr_override() from scipy import stats # 선형 회귀분석에 사용 import matplotlib.pylab as plt dow = pdr.get_data_yahoo('^DJI', '2000-01-04') kospi = pdr.get_data_yahoo('^KS11', '2000-01-04') ''' 산점도를 그리려면 x, y 데이터의 갯수가 동일해야 하므로, 다우존스 지수 종가 컬럼과 KOSPI 종가 컬럼으로 데이터 프레임 생성 그리고 fillna()함수 bfill 메소드로 비어있는 값을 뒤에 있는 데이터로 채운다. ffill은 비어있는 값을 앞에 있는 데이터로 채운다. 또는 dropna()함수를 이용해 값이 없는 NaN 행을 모두 제거하는 방법도 있다. ''' df = pd.DataFrame({'X':dow['Close'], 'Y':kospi['Close']}) df = df.fillna(method='bfill') df = df.fillna(method='ffill') regr = stats.linregress(df.X, df.Y) # regr_line = f'Y = {regr.slope:2f} X + {regr.intercept:2f}' plt.figure(figsize=(7, 7)) plt.plot(df.X, df.Y, '.') # 산점도를 작은 원으로 나타낸다. plt.plot(df.X, regr.slope * df.X + regr.intercept, 'r') # 회귀선을 붉은 색으로 그린다. plt.legend(['DOW x KOSPI', regr_line]) plt.title(f'DOW x KOSPI (R = {regr.rvalue:2f})') plt.xlabel('Dow Jones Industrial Average') plt.ylabel('KOSPI') plt.savefig('test1.png')
결과 그래프
이번에는 코스피지수와 미국 국채의 상관관계를 살펴보자. 다우존스 '^DJI' 대신 'TLT'로 변경하고 조회시작일을 2002년 7월 30일로 변경하면 다음과 같이 그래프가 그려진다.
상관관계가 R = 0.74로 다우존스 지수에 비해 낮아졌다. 이는 국내 주식에 투자하고 있다면 다우존스 지수에 분산 투자하는 것보다 미국 채권에 분산 투자하는 것이 리스크 완화에 도움이 된다는 뜻이다.
2022.07.17 - [computer_IT] - (파이썬 증권데이터 분석) 상장법인 정보 불러오기, 주가 스크레이핑
반응형'computer_IT' 카테고리의 다른 글
(파이썬 증권데이터 분석) 일별시세 DB구축 및 시세 조회 API 개발 (0) 2022.07.22 (파이썬 증권데이터 분석) 상장법인 정보 불러오기, 주가 스크레이핑 (0) 2022.07.17 (파이썬 증권데이터 분석) 일간 변동률 누적합 그래프 그리기 (0) 2022.07.13 파이썬 증권 데이터 분석 연습하기(주식 주가 그리기) (0) 2022.07.12 파이썬 넘파이, 판다스 연습(numpy, pandas) (0) 2022.07.10