init
This commit is contained in:
98
hts/HTS.py
98
hts/HTS.py
@@ -1,7 +1,12 @@
|
||||
import os
|
||||
import re
|
||||
import win32com.client
|
||||
#import win32com.client
|
||||
from datetime import datetime
|
||||
import matplotlib.pyplot as plt
|
||||
import pandas as pd
|
||||
|
||||
import mplfinance as mpf
|
||||
import matplotlib.ticker as ticker
|
||||
|
||||
class HTS:
|
||||
|
||||
@@ -11,7 +16,7 @@ class HTS:
|
||||
stock = []
|
||||
|
||||
def __init__(self):
|
||||
self.connect()
|
||||
#self.connect()
|
||||
return
|
||||
|
||||
def connect(self):
|
||||
@@ -205,10 +210,9 @@ class HTS:
|
||||
return
|
||||
|
||||
|
||||
# 주식 현재가 조회
|
||||
def getRealTime(self, stock_code, day):
|
||||
day = '20210917'
|
||||
|
||||
# 주식 현재가 조회
|
||||
def getRealTime(self, stock_code, day, result):
|
||||
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
|
||||
bConnect = objCpCybos.IsConnect
|
||||
if (bConnect == 0):
|
||||
@@ -220,31 +224,90 @@ class HTS:
|
||||
|
||||
objStockChart.SetInputValue(0, 'A'+stock_code) # 종목 코드
|
||||
objStockChart.SetInputValue(1, ord('2')) # 1: 기간으로 조회, 2: 개수로 조회
|
||||
objStockChart.SetInputValue(2, day)
|
||||
#objStockChart.SetInputValue(3, '20210915')
|
||||
objStockChart.SetInputValue(4, 100) # 최근 n개 치
|
||||
objStockChart.SetInputValue(2, day) # 기간 조회 시, 시작일
|
||||
#objStockChart.SetInputValue(3, '20210915') # 기간 조회 시, 종료일
|
||||
objStockChart.SetInputValue(4, 100) # 조회 시 가져오는 Line 개수
|
||||
objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량
|
||||
objStockChart.SetInputValue(6, ord('S')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
|
||||
objStockChart.SetInputValue(7, 1)
|
||||
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
|
||||
objStockChart.BlockRequest()
|
||||
|
||||
len = objStockChart.GetHeaderValue(3)
|
||||
size = objStockChart.GetHeaderValue(3)
|
||||
|
||||
#print("날짜", "시간", "시가", "고가", "저가", "종가", "거래량")
|
||||
#print("==============================================-")
|
||||
|
||||
result = ["time":[], "close":[]]
|
||||
for i in range(len):
|
||||
for i in range(size-1, -1, -1):
|
||||
#day = objStockChart.GetDataValue(0, i)
|
||||
time = objStockChart.GetDataValue(1, i)
|
||||
#open = objStockChart.GetDataValue(2, i)
|
||||
#high = objStockChart.GetDataValue(3, i)
|
||||
#low = objStockChart.GetDataValue(4, i)
|
||||
close = objStockChart.GetDataValue(5, i)
|
||||
#vol = objStockChart.GetDataValue(6, i)
|
||||
vol = objStockChart.GetDataValue(6, i)
|
||||
#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
|
||||
|
||||
@@ -260,10 +323,9 @@ if __name__ == "__main__":
|
||||
hts = HTS()
|
||||
#hts.all_stocks()
|
||||
#hts.getChartData(stock_code)
|
||||
|
||||
#hts.currentStock(stock_code)
|
||||
|
||||
day = datetime.today().strftime("%Y%m%d")
|
||||
result = hts.getRealTime(stock_code, day)
|
||||
print (result)
|
||||
day = '20210917'
|
||||
hts.buyRealTime(stock_code, day)
|
||||
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