라이브러리 불러온 후, 데이터 살펴보기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import FinanceDataReader as fdr
- 네이버주식 코드번호: 035420
#네이버주식
df = fdr.DataReader("035420")
df.head()
df.tail()
종가(Close)를 이용해 이동평균선 값 구하기
이동평균선(Moving Average)
: 일정기간 동안의 주가를 산술 평균한 값인 주가이동평균을 차례로 연결해 만든 선으로, 장기(120일), 중기(60일), 단기(5,20일) 이동평균선이 있다.
df=df[['Close']]
df['MA_5'] = df['Close'].rolling(window=5).mean()
df['MA_10'] = df['Close'].rolling(window=10).mean()
df['MA_20'] = df['Close'].rolling(window=20).mean()
df['MA_60'] = df['Close'].rolling(window=60).mean()
df['MA_120'] = df['Close'].rolling(window=120).mean()
df
- 이동평균선 120일과 종가 2가지만 비교해보기
fig = plt.figure(figsize=(20,10))
plt.plot(df.index, df["MA_120"])
plt.plot(df.index, df["Close"])
- 그래프에 legend, 컬러, 라벨 등 추가해주기
fig = plt.figure(figsize=(20,10))
plt.plot(df.index, df["MA_120"], label="Moving Average")
plt.plot(df.index, df["Close"], label="Close")
plt.xlabel("Date")
plt.ylabel("Price")
plt.title("NAVER: Close and Moving Average")
plt.legend(loc="upper left")
골든크로스&데드크로스
이동평균선을 그려나가다 보면 서로 교차하게 된다. 단기선이 장기선을 뚫고 오르거나 내리거나 한다. 교차로처럼 평균선들이 만나기에 크로스라고 하고, 골든크로스나 데드크로스가 나타나는 것이다.
- 이동평균선 데이터프레임만 따로 만들어 그래프 출력해보기
column_list = ["MA_20", "MA_120", "Close"]
stock_df = fdr.DataReader("035420")
plt.figure(figsize=(20,10))
plt.plot(stock_df.Close)
- 단기/장기 이동평균선과 종가 그래프 출력해보기
def SMA(data, period=30, column="Close"):
return data[column].rolling(window=period).mean()
stock_df["ShortSMA"] = SMA(stock_df, 20)
stock_df["LongSMA"] = SMA(stock_df, 120)
column_list = ["ShortSMA", "LongSMA", "Close"]
stock_df[column_list].plot(figsize=(20,10))
plt.title("Death/Golden Cross")
- 골든&데드크로스 알림 만들기
: for문을 이용하여 분석하려는 종가 데이터 전체 중에 단기 이동평균이나 장기 이동평균이 교차되는 지점이 오면, print문으로 그때의 날짜와 함께 특정 문구를 출력하게 한 것이다.
def death_golden_cross():
first_cross = 0
for i in range(0, len(stock_df)):
if stock_df["ShortSMA"][i] < stock_df["LongSMA"][i] and first_cross==0:
print("Death crosss on day", stock_df.index[i], ":하락예상")
first_cross=1
elif stock_df["ShortSMA"][i] > stock_df["LongSMA"][i] and first_cross==1:
print("Golden cross on day", stock_df.index[i], ':상승예상')
first_cross=0
death_golden_cross()
→ 2021년 10월에 데드크로스가 있었으니, 그 이후 하락했을 것으로 예상된다.
'Python > 금융 데이터 분석 FDR' 카테고리의 다른 글
[FinanceDataReader] 금융 데이터 분석과 인공지능 투자 (0) | 2022.03.03 |
---|