지난 회차에 쥬피터 노트북을 사용하여 주가 데이터를 엑셀로 다운로드 받는 법과 그래프 그리는 법을 알아봤습니다.
2022.06.03 - [파이썬과 주식] - 2. 주가 데이터 다운로드 받기 ( 엑셀 / CSV )
2022.03.29 - [주식공부 feat. 파이썬] - 3. 주가 데이터 시각화 feat. 파이썬으로 그래프 그리기
이번 회차에는 엑셀 다운로드 받을 때 추가로 내용을 넣는 법을 알아보겠습니다.
엑셀 다운로드 받을 때 사용했던 파이썬에 "rolling" 이란 함수로 이동평균을 추가할 수 있는 코드를 알아보려고 합니다.
네이버 주식창에 차트부문에서 볼 수있는 이동평균 그래프 입니다. 이 그래프를 주가를 엑셀로 다운로드 받을 때 몇 줄의 코드를 더하면 위와 같은 그래프를 만들 수 있습니다.
>>> 주가 데이터 엑셀로 다운로드 받기 확장판 feat. 이동평균
1. 주가 데이터 다운로드 및 그래프 그리기 코드
이번 회차는 SK하이닉스 입니다. 종목코드는 "000660.KS" 입니다.
지난 회차에 했던 엑셀 다운로드 후 그래프 그리기 코드를 먼저 실행해 보겠습니다.
import yfinance as yf
SK_Hynix = yf.download('000660.KS','2019-03-01','2022-03-29')
SK_Hynix.to_excel('Stocks/SK하이닉스.xlsx')
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yf
import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic'
matplotlib.rcParams['font.size'] = 15
matplotlib.rcParams['axes.unicode_minus'] = False
df=pd.read_excel('./Stocks/SK하이닉스.xlsx')
plt.figure(figsize=(15,10))
plt.xticks(rotation=45)
plt.plot(df['Date'],df['Close'], label='종가', linewidth=3)
plt.legend()
plt.title('SK하이닉스')
plt.grid(axis='y')
plt.savefig('Stocks/SK하이닉스.png',dpi=100)
지난 회차때 만들었던 코드에 SK하이닉스로 바꾸고 종목코드를 "000660.KS"로 만 바꾸고 실행하면 불과 몇 분이 채 안되어 결과물이 나옵니다.
2. 이동평균 구하기
5일, 20일, 60일, 120일 평균을 구하는 코드 입니다.
import yfinance as yf
SK_Hynix = yf.download('000660.KS','2019-03-01','2022-03-29')
SK_Hynix['Close_MA5']=SK_Hynix['Close'].rolling(5).mean()
SK_Hynix['Close_MA20']=SK_Hynix['Close'].rolling(20).mean()
SK_Hynix['Close_MA60']=SK_Hynix['Close'].rolling(60).mean()
SK_Hynix['Close_MA120']=SK_Hynix['Close'].rolling(120).mean()
SK_Hynix.to_excel('Stocks/SK하이닉스1.xlsx')
기존 엑셀 파일과의 구분을 위해서 파일이름을 "SK하이닉스1"로 했습니다.
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yf
import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic'
matplotlib.rcParams['font.size'] = 15
matplotlib.rcParams['axes.unicode_minus'] = False
df=pd.read_excel('./Stocks/SK하이닉스1.xlsx')
plt.figure(figsize=(15,10))
plt.xticks(rotation=45)
plt.plot(df['Date'],df['Close'], label='종가', linewidth=3)
plt.plot(df['Date'],df['Close_MA5'], label='5일 이동평균')
plt.plot(df['Date'],df['Close_MA20'], label='20일 이동평균')
plt.plot(df['Date'],df['Close_MA60'], label='60일 이동평균')
plt.plot(df['Date'],df['Close_MA120'], label='120일 이동평균')
plt.legend()
plt.title('SK하이닉스')
plt.grid(axis='y')
plt.savefig('Stocks/SK하이닉스1.png',dpi=100)
Cntl+Enter를 치면,
3. 코드 설명
SK_Hynix['Close_MA5']=SK_Hynix['Close'].rolling(5).mean()
SK_Hynix['Close_MA20']=SK_Hynix['Close'].rolling(20).mean()
SK_Hynix['Close_MA60']=SK_Hynix['Close'].rolling(60).mean()
SK_Hynix['Close_MA120']=SK_Hynix['Close'].rolling(120).mean()
먼저 "rolling()" 함수는 이동기술 통계량을 계산하는 도구입니다. () 괄호안에 기간을 알려주는 매개변수를 넣어주면 됩니다. 5일,20일,60일,120일을 각각 넣어 이 기간동안의 통계량을 구하겠다는 의미입니다.
"mean()" 함수는 평균을 구하는 함수 입니다. 즉, "rolling().mean() " 두 함수가 합쳐야 이동 평균을 구하는 식이 됩니다.
평균을 구하는 mean() 함수 외에도,
median() : 중위수 , std() : 표준편차 , var() : 분산, max() : 최대값, min() : 최소값, sum() : 합계 등의 함수가 있습니다.
"SK_Hynix['Close']" 는 "종가"를 나타내므로, 종가기준 5일,20일,60일,120일 평균을 구하는 함수 입니다.
이 함수로 나온 값을 각각 'Close_MA5', 'Close_MA20', 'Close_MA60', 'Close_MA120' 의 이름으로 엑셀에 저장되었다는 의미입니다.
"SK하이닉스1" 이름으로 저장된 엑셀 파일을 열어보면,
'Close_MA5', 'Close_MA20', 'Close_MA60', 'Close_MA120' 컬럼이 추가되어 있습니다.
plt.plot(df['Date'],df['Close'], label='종가', linewidth=3)
plt.plot(df['Date'],df['Close_MA5'], label='5일 이동평균')
plt.plot(df['Date'],df['Close_MA20'], label='20일 이동평균')
plt.plot(df['Date'],df['Close_MA60'], label='60일 이동평균')
plt.plot(df['Date'],df['Close_MA120'], label='120일 이동평균')
지난 회차에서,
" plt.plot(df['Date'],df['Close'], label='종가', linewidth=3) " :
"plot" 는 선그래프를 그리라고 호출하는 코드 입니다.
plot(x,y) 가 기본 호출인데, 위 코드는 x축은 df['Date'] (엑셀 데이터 안에 Date(날짜) 항목을 가리킴)로, y축은 df['Close'](엑셀 데이터 안에 Close(종가) 항목을 가리킴) 로 사용하라는 의미 입니다.
label은 선을 나타내는 이름을 나타내고, "linewidth"는 그래프 선의 굵기를 나타냅니다.
"plt.plot(df['Date'],df['Close_MA5'], label='5일 이동평균')" 은 위와 같습니다. 5일 평균선을 그리라고 호출하는 코드입니다. label은 범례에 들어갈 이름을 지정해 줍니다.
SK 하이닉스 엑셀파일 + 그래프 :
SK 하이닉스 엑셀파일 + 그래프 (이동평균 포함) :
코드 리스트
주식 데이터를 엑셀로 다운받고 이동평균이 포함된 주가변동 그래프를 그릴 수 있는 코드입니다.
필요하신 분은 참조하시기 바랍니다.
만들어지는 종목이 많아지게 되면 별도로 종목별로 코드를 따로 포스팅 하도록 할 예정입니다.
< SK 하이닉스 >
import yfinance as yf
SK_Hynix = yf.download('000660.KS','2019-03-01','2022-03-29')
SK_Hynix['Close_MA5']=SK_Hynix['Close'].rolling(5).mean()
SK_Hynix['Close_MA20']=SK_Hynix['Close'].rolling(20).mean()
SK_Hynix['Close_MA60']=SK_Hynix['Close'].rolling(60).mean()
SK_Hynix['Close_MA120']=SK_Hynix['Close'].rolling(120).mean()
SK_Hynix.to_excel('Stocks/SK하이닉스1.xlsx')
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yf
import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic'
matplotlib.rcParams['font.size'] = 15
matplotlib.rcParams['axes.unicode_minus'] = False
df=pd.read_excel('./Stocks/SK하이닉스1.xlsx')
plt.figure(figsize=(15,10))
plt.xticks(rotation=45)
plt.plot(df['Date'],df['Close'], label='종가', linewidth=3)
plt.plot(df['Date'],df['Close_MA5'], label='5일 이동평균')
plt.plot(df['Date'],df['Close_MA20'], label='20일 이동평균')
plt.plot(df['Date'],df['Close_MA60'], label='60일 이동평균')
plt.plot(df['Date'],df['Close_MA120'], label='120일 이동평균')
plt.legend()
plt.title('SK하이닉스')
plt.grid(axis='y')
plt.savefig('Stocks/SK하이닉스1.png',dpi=100)
< 삼성전자 >
import yfinance as yf
Samsung_Electronic = yf.download('005930.KS','2019-03-01','2022-03-29')
Samsung_Electronic['Close_MA5']=Samsung_Electronic['Close'].rolling(5).mean()
Samsung_Electronic['Close_MA20']=Samsung_Electronic['Close'].rolling(20).mean()
Samsung_Electronic['Close_MA60']=Samsung_Electronic['Close'].rolling(60).mean()
Samsung_Electronic['Close_MA120']=Samsung_Electronic['Close'].rolling(120).mean()
Samsung_Electronic.to_excel('Stocks/삼성전자.xlsx')
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yf
import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic'
matplotlib.rcParams['font.size'] = 15
matplotlib.rcParams['axes.unicode_minus'] = False
df=pd.read_excel('./Stocks/삼성전자.xlsx')
plt.figure(figsize=(15,10))
plt.xticks(rotation=45)
plt.plot(df['Date'],df['Close'], label='종가', linewidth=3)
plt.plot(df['Date'],df['Close_MA5'], label='5일 이동평균')
plt.plot(df['Date'],df['Close_MA20'], label='20일 이동평균')
plt.plot(df['Date'],df['Close_MA60'], label='60일 이동평균')
plt.plot(df['Date'],df['Close_MA120'], label='120일 이동평균')
plt.legend()
plt.title('삼성전자')
plt.grid(axis='y')
plt.savefig('Stocks/삼성전자.png',dpi=100)
<카카오>
import yfinance as yf
Kakao = yf.download('035720.KS','2019-03-01','2022-03-28')
Kakao['Close_MA5']=Kakao['Close'].rolling(5).mean()
Kakao['Close_MA20']=Kakao['Close'].rolling(20).mean()
Kakao['Close_MA60']=Kakao['Close'].rolling(60).mean()
Kakao['Close_MA120']=Kakao['Close'].rolling(120).mean()
Kakao.to_excel('Stocks/Kakao.xlsx')
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yf
import matplotlib
matplotlib.rcParams['font.family'] ='Malgun Gothic'
matplotlib.rcParams['font.size'] = 15
matplotlib.rcParams['axes.unicode_minus'] = False
df=pd.read_excel('./Stocks/Kakao.xlsx')
plt.figure(figsize=(15,10))
plt.xticks(rotation=45)
plt.plot(df['Date'],df['Close'], label='종가', linewidth=3)
plt.plot(df['Date'],df['Close_MA5'], label='5일 이동평균')
plt.plot(df['Date'],df['Close_MA20'], label='20일 이동평균')
plt.plot(df['Date'],df['Close_MA60'], label='60일 이동평균')
plt.plot(df['Date'],df['Close_MA120'], label='120일 이동평균')
plt.legend()
plt.title('카카오')
plt.grid(axis='y')
plt.savefig('Stocks/카카오.png',dpi=100)
'주식공부 feat. 파이썬' 카테고리의 다른 글
7. 주가 데이터 엑셀로 다운로드 확장판 feat. EPS PER BPS PBR (0) | 2022.04.19 |
---|---|
6. 엑셀 주가 데이터 분석하기 feat. 판다스 describe (0) | 2022.04.09 |
5. 주가 데이터 엑셀로 다운로드 받기 확장판 feat.등락률 + 거래량 (0) | 2022.04.02 |
3. 주가 데이터 시각화 feat. 파이썬으로 그래프 그리기 (0) | 2022.03.29 |
0. 주식 공부 feat. 파이썬 (python) (0) | 2022.03.29 |
댓글