본문 바로가기
컴퓨터언어/Python

[Python] 주가 이동평균선 구하기

by 인턴개구리 2020. 12. 29.

안녕하세요. 인턴개구리입니다.

오늘은 주가 이동평균선 그리는 법에 대해서 알아보겠습니다.

1. 주식 데이터 import 하기

주가 데이터는 다양한 방식으로 가져올 수 있는데요.

저는 두가지 패키지를 주로 이용합니다.

from pykrx import stock
import FinanceDataReader as fdr

그 중에 지금은 pykrx를 사용하겠습니다.

https://github.com/sharebook-kr/pykrx/blob/master/readme.MD

 

sharebook-kr/pykrx

KRX 주식 정보 스크래핑. Contribute to sharebook-kr/pykrx development by creating an account on GitHub.

github.com

(pykrx에 대한 자세한 설명은 여기서! ↑)

df = stock.get_market_ohlcv_by_date("20200601", "20201229", "005930")
  • df : 데이터 명(아무거나 적으시면 됩니다.)
  • stock : 패키지명
  • get_market_ohlcv_by_date : 일자별(date) 시가(O), 고가(H), 저가(L), 종가(C), 거래량(V)를 가져옵니다.
  • "20200601" : 시작일
  • "20201229" : 종료일
  • "005930" : 종목코드( "005930"은 삼성전자 )

그럼 다음과 같은 결과를 도출합니다.


2. 주가이동평균선 구하기

주가이동평균선이 무엇인가에 대해서는 저도 아직 주식 초보라 설명은 못해드리겠네요 ㅠㅠ

df['주가이동평균선'] = df['종가'].rolling(window=5).mean()

 

  • rolling(window=정수) : '정수'행 앞의 데이터를 가져온다.
  • mean() : 평균을 낸다

df의 '종가'라는 칼럼에서 자신을 포함한 '5'(다섯)행 데이터를 rolling하여(?) 그 데이터를 모아 평균(mean)을 내고, 그것을 df의 '주가이동평균선'이라는 새로운 칼럼에 담는 것입니다.

그럼 다음과 같은 결과를 도출합니다.

즉, 6월 5일 데이터는 6월 1일~5일 데이터를 담아서 평균을 매긴 것이죠.

3. 그래프 그리기

import matplotlib.pyplot as plt

matplotlib이라는 패키지를 import하고 plt라는 이름으로 간소화합니다.

matplotlib를 이용하면 다양하게 꾸밀 수 있지만 저는 일단 그래프만 나올 수 있도록 간단하게만 설명하겠습니다.

plt.plot(df.index, df['주가이동평균선'])
plt.plot(df.index, df['종가'])

plot을 그리는데, X축은 df의 index로, Y축은 df의 '주가이동평균선'으로 그래프를 표현합니다. 그 다음 Y축을 '종가'로 하여 한번 더 그래프를 표현합니다.


그러면 다음과 같은 결과를 도출합니다.

꾸불꾸불한 빨간색이 일반적인 '종가'이고, 조금 더 부드러워진 파란선이 '주가이동평균선'입니다.

결과가 나오긴 했지만, 조금 더 자세히 보고 싶습니다. 그렇다면 많이 복붙해봅시다.

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(20,5))
plt.plot(df.index, df['주가이동평균선'], 'b--', label='Close')
plt.plot(df.index, df['종가'], 'y--', label='Moving Price')
plt.xlabel('Date')
plt.ylabel('price')
plt.title('Close and Moving Price')
plt.legend(loc='upper right')
  • plt.figure : 그림의 사이즈를 지정해줍니다.
  • 'b--' : blue색깔로 ------ 형태의 점선 그래프를 도출합니다. ( 'g-'는  green의 선그래프, 'y*'는 yellow의 별그래프 등 다양하게 표시가능합니다. 참고로 black은 k입니다.)
  • xlabel : X축의 라벨을 지정해줍니다.
  • ylabel : Y축의 라벨을 지정해줍니다.
  • Title : 그래프 맨 위에 타이틀을 지정해줍니다.
  • legend(loc='upper right') : 오른쪽(right) 위(upper)에 범례를 작성합니다. 이 때는 반드시 그래프 그릴 때 label을 그려줘야 합니다.(xlabel, ylabel 말고 그래프 코드 안에있는 라벨 label='Close' 같은 것)

이러한 결과가 도출됩니다.

코드를 보고싶으신대로 커스터마이징 할 수 있습니다.


저도 아직 배우는 입장이지만, 제 지식을 공유하는 것에 즐거움을 느끼고 여러분들과 공유하고 있습니다. 제 포스팅이 도움이 되셨으면 좋겠습니다.