본문 바로가기
투자

Python01 Financial data reader 와 pandas 를 이용한 이동평균선 구하기

by Miracle_Morning 2021. 7. 23.

사실 내가 가장 하고 싶은 것은 Python을 이용한 백 테스터 구현과 다양한 투자전략 비교이다.  전공자가 아니라서 배워 나아가는 입장이지만, JW_capital 이라는 큰 프로젝트를 구상중이고, 꾸준히 공부해서 얻은 내용을 하나하나 여기에 정리해보겠다.

 

먼저 Financial data reader 라는 훌륭한 라이브러리를 이용한 주식 데이터 수집과, pandas를 통한 이동평균선을 구하는 예제를 해보겠다. 

 

Financial data reader는 주가 데이터를 손쉽게 가져올 수 있는 파이썬 오픈소스 라이브러리이다. 오늘의 실습 환경은 Google Colab이다.

 

#1 Financial data reader 를 install 하고, 각종 필요한 라이브러리를 import 한다.

!pip install -U finance-datareader
import FinanceDataReader as fdr
import pandas as pd
import numpy as np

 

#2 원하는 종목을 불러온다

df = fdr.DataReader('048260', '2017')
df.tail()

종목코드와 년도를 입력해주면 된다. (내가 얼마전에 매수한 오스템 임플란트 주식을 넣어보았다) 그러면 자동으로 pandas dataframe 형식으로 불러와진다. 최근 5개의 데이터를 확인해보겠다.

아쉽게도 Adj Close 는 없지만 Close를 이용해서 이동평균선을 그려보겠다.

 

#3 이동평균선을 구한다

이동평균선 (Moving average) 의 정의는 일정기간 동안 종가를 산술 평균 낸 것이다. 주가의 트렌드를 볼 수 있는 중요한 지표이다. 정확한 설명은 Investopedia 링크에 나와있다.

 

ma5 = df['Close'].rolling(window=5).mean()
df['ma5'] = ma5
df.tail()

이때 pandas의 rolling 메소드를 사용하는데, rolling(window=구간).계산식() 의 형식으로 코드를 작성하면, 한 줄로 이동평균선을 구할 수 있다. 5일 이동평균선 값을 구한 후, df의 'ma5' 란 column으로 저장했다. 

같은 방법으로 20일(한 달)  60일(3개월: 기업실적 발표 사이클)  120일(6개월: 기업 반기결산 사이클)을 구한다.

ma20 = df['Close'].rolling(window=20).mean()
df['ma20'] = ma20

ma60 = df['Close'].rolling(window=60).mean()
df['ma60'] = ma60

ma120 = df['Close'].rolling(window=120).mean()
df['ma120'] = ma120

 

#4 시각화

def draw(df):
  plt.figure(figsize=(10, 5)) 
  plt.plot(df.index, df['Close'],label='Close')
  plt.plot(df.index, df['ma5'],label='ma5')
  plt.plot(df.index, df['ma20'],label='ma20')
  plt.plot(df.index, df['ma60'],label='ma60')
  plt.plot(df.index, df['ma120'],label='ma120')

  plt.legend()
  plt.grid(alpha=0.5)
  plt.show()

draw(df.loc['2019':])

오스템 임플란트 주식을 이동평균선과 함께, 2019년부터 오늘까지 시각화해보았다.

 

앞으로 같은 라이브러리를 가지고, 불린저 밴드, 수익률 그래프 등을 추가로 그려볼 계획이다. 오늘 예제는 파이썬으로 배우는 알고리즘 트레이딩 도서를 참고해서 작성했다.