This commit is contained in:
dosangyoon
2021-09-20 14:36:58 +09:00
parent 6687de4afd
commit 0a061c7842
2 changed files with 85 additions and 46 deletions

View File

@@ -1,7 +1,12 @@
import os import os
import re import re
import win32com.client #import win32com.client
from datetime import datetime from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
import mplfinance as mpf
import matplotlib.ticker as ticker
class HTS: class HTS:
@@ -11,7 +16,7 @@ class HTS:
stock = [] stock = []
def __init__(self): def __init__(self):
self.connect() #self.connect()
return return
def connect(self): def connect(self):
@@ -205,10 +210,9 @@ class HTS:
return return
# 주식 현재가 조회
def getRealTime(self, stock_code, day):
day = '20210917'
# 주식 현재가 조회
def getRealTime(self, stock_code, day, result):
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos") objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
bConnect = objCpCybos.IsConnect bConnect = objCpCybos.IsConnect
if (bConnect == 0): if (bConnect == 0):
@@ -218,33 +222,92 @@ class HTS:
# 차트 객체 구하기 # 차트 객체 구하기
objStockChart = win32com.client.Dispatch("CpSysDib.StockChart") objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
objStockChart.SetInputValue(0, 'A'+stock_code) # 종목 코드 objStockChart.SetInputValue(0, 'A'+stock_code) # 종목 코드
objStockChart.SetInputValue(1, ord('2')) # 1: 기간으로 조회, 2: 개수로 조회 objStockChart.SetInputValue(1, ord('2')) # 1: 기간으로 조회, 2: 개수로 조회
objStockChart.SetInputValue(2, day) objStockChart.SetInputValue(2, day) # 기간 조회 시, 시작일
#objStockChart.SetInputValue(3, '20210915') #objStockChart.SetInputValue(3, '20210915') # 기간 조회 시, 종료일
objStockChart.SetInputValue(4, 100) # 최근 n개 치 objStockChart.SetInputValue(4, 100) # 조회 시 가져오는 Line 개수
objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량 objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량
objStockChart.SetInputValue(6, ord('S')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청 objStockChart.SetInputValue(6, ord('S')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
objStockChart.SetInputValue(7, 1) objStockChart.SetInputValue(7, 1)
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용 objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
objStockChart.BlockRequest() objStockChart.BlockRequest()
len = objStockChart.GetHeaderValue(3) size = objStockChart.GetHeaderValue(3)
#print("날짜", "시간", "시가", "고가", "저가", "종가", "거래량") #print("날짜", "시간", "시가", "고가", "저가", "종가", "거래량")
#print("==============================================-") for i in range(size-1, -1, -1):
result = ["time":[], "close":[]]
for i in range(len):
#day = objStockChart.GetDataValue(0, i) #day = objStockChart.GetDataValue(0, i)
time = objStockChart.GetDataValue(1, i) time = objStockChart.GetDataValue(1, i)
#open = objStockChart.GetDataValue(2, i) #open = objStockChart.GetDataValue(2, i)
#high = objStockChart.GetDataValue(3, i) #high = objStockChart.GetDataValue(3, i)
#low = objStockChart.GetDataValue(4, i) #low = objStockChart.GetDataValue(4, i)
close = objStockChart.GetDataValue(5, i) close = objStockChart.GetDataValue(5, i)
#vol = objStockChart.GetDataValue(6, i) vol = objStockChart.GetDataValue(6, i)
#print(day, time, open, high, low, close, vol) #print(day, time, open, high, low, close, vol)
result.append([time, close])
if time[i] not in result["check"]:
result["check"].add(time)
result["time"].append(time)
result["close"].append(close)
result["vol"].append(vol)
return
def getCSV(self, fileName, result):
data = pd.read_csv(fileName)
time = data.시간
close = data.종가
for i in range(len(data)-1, -1, -1):
if time[i] not in result["check"]:
result["check"].add(time[i])
result["time"].append(time[i])
result["close"].append(close[i])
result["vol"].append(0)
return
def analyze(self, result):
df = pd.DataFrame(result["close"])
y_value = result["close"]
vol = result["vol"]
max20 = df.rolling(window=20).mean()
stddev20 = df.rolling(window=20).std()
upper = max20 + (stddev20 * 2) # 상단 볼린저 밴드
lower = max20 - (stddev20 * 2) # 하단 볼린저 밴드
middle = (upper + lower) / 2 # 중심 블린저 밴드
x_value = [i for i in range(len(y_value))]
window = 3
open = y_value[:len(y_value)-window] + [y_value[len(y_value)-window] for i in range(window)] # 시가
close = [y_value[window-1] for i in range(window-1)] + y_value[window-1:] # 종가
high = df.rolling(window=window).max() # 고가
low = df.rolling(window=window).min() # 저가
mean5 = df.rolling(window=window).mean() # 이동평균선
mean20 = df.rolling(window=window*4).mean() # 이동평균선
mean60 = df.rolling(window=window*12).mean() # 이동평균선
temp = {'Open': open, 'High': high.values.tolist(), 'Low': low.values.tolist(), 'Close': close, 'Volume': vol}
data = pd.DataFrame(temp, index=x_value)
return data
def buyRealTime(self, stock_code, day):
result = {"check": set(),
"time": [],
"close": [],
"vol": []}
#self.getRealTime(stock_code, day, result)
self.getCSV("data_s_1.csv", result)
self.getCSV("data_s_2.csv", result)
data = self.analyze(result)
mpf.plot(data, type='candle', mav=(3, 6, 9))
plt.show()
print(result)
return result return result
@@ -260,10 +323,9 @@ if __name__ == "__main__":
hts = HTS() hts = HTS()
#hts.all_stocks() #hts.all_stocks()
#hts.getChartData(stock_code) #hts.getChartData(stock_code)
#hts.currentStock(stock_code) #hts.currentStock(stock_code)
day = datetime.today().strftime("%Y%m%d") day = datetime.today().strftime("%Y%m%d")
result = hts.getRealTime(stock_code, day) day = '20210917'
print (result) hts.buyRealTime(stock_code, day)
print ("done...") print ("done...")

View File

@@ -1,23 +0,0 @@
import pandas as pd
import matplotlib.pyplot as plt
class Util:
def analyze(self):
data = pd.read_csv("data_s.csv")
y_value = data.종가
max20 = y_value.rolling(window=20).mean()
stddev = y_value.rolling(window=20).std()
upper = max20 + (stddev * 2) # 상단 볼리저 밴드
lower = max20 - (stddev * 2) # 하단 볼리저 밴드
middle = (upper + lower) / 2 # 중심
x_value = [i for i in range(len(y_value))]
plt.plot(x_value, y_value.tolist(), x_value, upper.tolist(), x_value, lower.tolist(), x_value, middle.tolist())
plt.show()
return
if __name__ == "__main__":
util = Util()
util.analyze()