투자 보조 지표 통합 Report
이전 개발일지의 글에서 투자지표를 파이썬으로 하나하나 구현했다.
더 많은 지표가 있지만, 모든 지표를 다 보는 것은 현실적으로 어렵고 현재까지 구현한 지표를 이용해 하나의 통합 리포트 형식으로 출력하고자 한다.
개별 지표만 보면 전체적인 흐름을 알기 어렵고, 주로 앱으로 매매를 하기 때문에 작은 화면에서 여러 개의 지표를 보는 것이 어렵기 때문에 Report로 출력하도록 만들었다.
따라서 이전 종목 추천 시스템과 결합해 그날그날 특정 기준(ex - RSI)을 만족해 매매 시그널이 발생한 종목을 대상으로 자동 리포트를 생성한 후 사용자는 시간에 맞춰 pc든 모바일이든 확인할 수 있도록 한다.
이를 위해 python으로 여러 개의 plot을 만드는 방법과 pdf로 저장하는 것이 필요하다.
Python 구현
import ta
import pandas as pd
import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
import FinanceDataReader as fdr
import copy
from matplotlib.backends.backend_pdf import PdfPages
x = dt.datetime.now()
df_krx = fdr.StockListing('KRX')
target_corp_list = ["삼성전자","KT&G","NAVER"]
조회하고자 하는 종목의 이름을 list 형식으로 저장한다.
for tn in target_corp_list:
# 주가 수집
target = df_krx[df_krx["Name"]==tn]
price_data = fdr.DataReader(target["Symbol"].values[0],"2020")
# 지표 계산
price_data = bolinger_band(price_data)
price_data = MACD(price_data)
price_data = RSI(price_data)
price_data = OBV(price_data)
price_data = PVT(price_data)
price_data = CCI(price_data)
price_data = ADX(price_data)
price_data = MOMENTUM(price_data)
price_data = TRIX(price_data)
price_data = PSAR(price_data)
price_data = SONAR(price_data)
price_data = 이격도(price_data)
price_data = ENVELOPE(price_data, n = 20, p = 0.08)
price_data = ATR(price_data)
volume_data_ta,volume_chart1 = volume_data_make(target)
price_data_ta = price_data[price_data.index>volume_data_ta.index[0]].copy()
price_data_ta["lower_30"] = 30
price_data_ta["upper_70"] = 70
price_data_ta["upper_100"] = 100
price_data_ta["lower_100"] = -100
price_data_ta["stand"] = 0
## 그래프 출력 및 저장
fig1 = main_fig(price_data_ta,volume_data_ta,volume_chart1)
fig2 = sub_fig(price_data_ta)
pdfsave = PdfPages("./Report/report_"+tn+"_"+str(x.month)+str(x.day)+".pdf")
pdfsave.savefig(fig1)
pdfsave.savefig(fig2)
pdfsave.close()
del fig1, fig2
이전에 만들었던 지표 구현 코드와 그래프 코드를 함수형태로 만들었다.
조회하고자 하는 종목의 주가를 수집한 다음 각각의 지표를 생성한다. 또한 매매 기준값 혹은 참조값을 그래프로 표시하기 위해 lower와 upper, stand 컬럼을 만들어 각각의 값을 지정해 준다.
매물대 차트는 1년 기준으로 만든다.
아래는 python으로 다중 그래프를 만들기 위한 예시 코드이다.
fig2, (ax1,ax2,ax3,ax4,ax5,ax6) = plt.subplots(6,2,figsize = (15,22))
ax1[0].set_ylabel('Price')
ax1[0].plot(price_data_ta["Close"],color = "black",alpha = 0.7)
ax11 = ax1[0].twinx()
# ax11.set_ylabel('RSI')
ax11.plot(price_data_ta["rsi"],color = "tab:red",alpha = 0.5)
ax11.plot(price_data_ta["mfi"],color = "tab:blue",alpha = 0.5)
ax11.plot(price_data_ta["lower_30"],color = "blue",alpha = 0.5)
ax11.plot(price_data_ta["upper_70"],color = "red",alpha = 0.5)
ax11.legend(["rsi","mfi"],loc = "upper left")
# ax11.set_ylabel('Index')
ax1[0].set_title("RSI")
# ax1[1].set_ylabel('Price')
ax1[1].plot(price_data_ta["Close"],color = "black",alpha = 0.7)
ax1[1].plot(price_data_ta["bol_l"],color = "blue",alpha = 0.5)
ax1[1].plot(price_data_ta["bol_avg"],color = "green",alpha = 0.5)
ax1[1].plot(price_data_ta["bol_h"],color = "red",alpha = 0.5)
ax1[1].legend(["Close","bol_l","bol_avg","bol_h"],loc = "upper left")
ax1[1].set_title("Bollinger band")
plt.subplot으로 다중 그래프를 그릴 수 있는데, 한 가지 주의해야 할 점이 행개수에 따라 plot 변수가 생성된다는 것이다. 현재 6개의 행, 2개의 열로 그래프 양식을 만들었는데 그래프 변수가 ax1 ~ ax12로 12개가 만들어지는 것이 아니라 ax1[0], ax1[1], ... ax6[0], ax6[1] 이런 형식으로 만들어진다.
따라서 이점을 주의해서 띄우고 싶은 보조 지표를 조정하면 될 것이다.
그래프 크기는 세로로 볼 수 있게 비율이 A4를 갖도록 설정했다.
그 외 함수들은 코드가 매우 길어서 파일로 올려두겠다.
위의 코드를 실행하면 아래와 같이 지정 경로에 보고서가 저장이 된다.
자동으로 조회한 날의 날짜로 저장이 된다. 나는 NAVER, KT&G, 삼성전자를 넣어서 조회를 했더니 3개의 리포트가 만들어졌다. 하나를 열어보면 아래와 같은 화면이 나타난다.
이전에 다 설명했던 지표들이라 어떻게 구성되었는지만 간단히 설명하겠다.
먼저 첫 장에 매물대 차트와 주가, Sonar 지표가 나타나고 뒤로 연한 파랑, 주황색 선 그래프로 TR, ATR지표가 나타난다. 최대한 독립적인 구역에서 정보를 나타내기 위해 막대, 점, 선 그래프로 각각의 정보를 표시하였다.
2번째 장은 총 12개의 그래프로 구현했던 투자지표를 나타내었다. 첫 장은 추가로 넣을 정보를 찾아서 2page와 동일한 page 사이즈를 갖도록 해볼 생각이다.
관심이 있는 종목이 있으면 통합 report script를 통해 투자 지표를 뽑고 여러 지표를 동시에 비교하면 활용성 높게 사용할 수 있을 것 같다. 아직 구현하고 얕은 수준으로밖에 이해하지 못했기 때문에 주가와 각각의 지표들을 비교해가면서 차트를 분석해 보고 나아가 이 지표들로 주가 예측 모델을 구축해 볼 예정이다.(시간이 조금 걸리겠지만.)
'개발일지' 카테고리의 다른 글
파이썬 투자 보조 지표 분석 / 전략 설계 - ATR (0) | 2022.12.17 |
---|---|
DART API python 데이터 수집 (0) | 2022.12.10 |
한국은행 ECOS API python 데이터 수집 (0) | 2022.12.09 |
파이썬 투자 보조 지표 분석 / 전략 설계 - Sonar (0) | 2022.12.03 |
파이썬 투자 보조 지표 분석 / 전략 설계 - PSAR (0) | 2022.12.02 |
댓글