init
This commit is contained in:
108
hts/HTS.py
108
hts/HTS.py
@@ -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...")
|
||||||
|
|||||||
23
hts/Util.py
23
hts/Util.py
@@ -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()
|
|
||||||
Reference in New Issue
Block a user