init
This commit is contained in:
@@ -202,4 +202,7 @@ if __name__ == "__main__":
|
|||||||
hts.buyRealTime(lastday_str, today_str)
|
hts.buyRealTime(lastday_str, today_str)
|
||||||
hts.writeStockData(stock_code, today_str)
|
hts.writeStockData(stock_code, today_str)
|
||||||
|
|
||||||
|
db_filename = os.path.join(RESOURCE_PATH, "hts.db")
|
||||||
|
hts.insertStockData(db_filename, stock_code, "KODEX 200선물인버스2X", today_str)
|
||||||
|
|
||||||
print ("done...")
|
print ("done...")
|
||||||
|
|||||||
@@ -206,4 +206,7 @@ if __name__ == "__main__":
|
|||||||
hts.buyRealTime(lastday_str, today_str)
|
hts.buyRealTime(lastday_str, today_str)
|
||||||
hts.writeStockData(stock_code, today_str)
|
hts.writeStockData(stock_code, today_str)
|
||||||
|
|
||||||
|
db_filename = os.path.join(RESOURCE_PATH, "hts.db")
|
||||||
|
hts.insertStockData(db_filename, stock_code, "KODEX 200선물인버스2X", today_str)
|
||||||
|
|
||||||
print ("done...")
|
print ("done...")
|
||||||
|
|||||||
86
hts/HTS.py
86
hts/HTS.py
@@ -3,6 +3,7 @@ import os.path
|
|||||||
import win32com.client
|
import win32com.client
|
||||||
import csv
|
import csv
|
||||||
import time
|
import time
|
||||||
|
import sqlite3
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from hts.OrderItem import OrderItem
|
from hts.OrderItem import OrderItem
|
||||||
|
|
||||||
@@ -416,6 +417,91 @@ class HTS:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def getStockInfo(self, stock_code, today):
|
||||||
|
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
|
||||||
|
bConnect = objCpCybos.IsConnect
|
||||||
|
if (bConnect == 0):
|
||||||
|
print("PLUS가 정상적으로 연결되지 않음. ")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
# 차트 객체 구하기
|
||||||
|
objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
|
||||||
|
|
||||||
|
objStockChart.SetInputValue(0, 'A' + stock_code) # 종목 코드
|
||||||
|
objStockChart.SetInputValue(1, ord('1')) # 1: 기간으로 조회, 2: 개수로 조회
|
||||||
|
objStockChart.SetInputValue(2, today) # 기간 조회 시, 시작일
|
||||||
|
objStockChart.SetInputValue(3, today) # 기간 조회 시, 종료일
|
||||||
|
objStockChart.SetInputValue(4, 400) # 조회 시 가져오는 Line 개수
|
||||||
|
objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량
|
||||||
|
objStockChart.SetInputValue(6, ord('m')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
|
||||||
|
objStockChart.SetInputValue(7, 1)
|
||||||
|
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
|
||||||
|
objStockChart.BlockRequest()
|
||||||
|
|
||||||
|
size = objStockChart.GetHeaderValue(3)
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for i in range(size - 1, -1, -1):
|
||||||
|
day = objStockChart.GetDataValue(0, i)
|
||||||
|
time = objStockChart.GetDataValue(1, i)
|
||||||
|
start = objStockChart.GetDataValue(2, i)
|
||||||
|
high = objStockChart.GetDataValue(3, i)
|
||||||
|
low = objStockChart.GetDataValue(4, i)
|
||||||
|
close = objStockChart.GetDataValue(5, i)
|
||||||
|
vol = objStockChart.GetDataValue(6, i)
|
||||||
|
|
||||||
|
data.append([day, str(time).zfill(4), start, high, low, close, vol])
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def insertStockData(self, inFileName, stock_code, stock_name, today):
|
||||||
|
tableName = 'hts'
|
||||||
|
conn = sqlite3.connect(inFileName)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# 테이블 생성
|
||||||
|
cursor.execute(
|
||||||
|
"CREATE TABLE IF NOT EXISTS " + tableName + " (CODE text, NAME text, ymd text, hms text, close REAL, open REAL, high REAL, low REAL, volume REAL)")
|
||||||
|
|
||||||
|
# 키 생성
|
||||||
|
create_key = "CREATE INDEX IF NOT EXISTS " + tableName + "_idx on " + tableName + " (CODE, ymd, hms) "
|
||||||
|
cursor.execute(create_key)
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
cursor.close()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
items = self.getStockInfo(stock_code, today)
|
||||||
|
|
||||||
|
idx = 0
|
||||||
|
for item in items:
|
||||||
|
ymd = item[0]
|
||||||
|
hms = item[1]
|
||||||
|
open = item[2]
|
||||||
|
high = item[3]
|
||||||
|
low = item[4]
|
||||||
|
close = item[5]
|
||||||
|
volume = item[6]
|
||||||
|
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
conn = sqlite3.connect(inFileName)
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
cursor.execute('SELECT * FROM ' + tableName + ' WHERE CODE=? and ymd=? and hms=?', (stock_code, ymd, hms,))
|
||||||
|
result = cursor.fetchone()
|
||||||
|
if result == None:
|
||||||
|
cursor.execute(
|
||||||
|
"INSERT INTO " + tableName + "(CODE, NAME, ymd, hms, close, open, high, low, volume) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||||
|
(stock_code, stock_name, ymd, hms, close, open, high, low, volume))
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
cursor.close()
|
||||||
|
conn.close()
|
||||||
|
print(idx, stock_code, stock_name, ymd)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
def write(self, day, result):
|
def write(self, day, result):
|
||||||
#날짜,시간,시가,고가,저가,종가,거래량
|
#날짜,시간,시가,고가,저가,종가,거래량
|
||||||
|
|||||||
@@ -1,81 +0,0 @@
|
|||||||
import win32com.client
|
|
||||||
import os
|
|
||||||
from datetime import datetime, timedelta
|
|
||||||
|
|
||||||
from hts.HTS import HTS
|
|
||||||
|
|
||||||
class DataDownloader (HTS):
|
|
||||||
|
|
||||||
buySellChecker = None
|
|
||||||
stock_code = None
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__()
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
# 주식 현재가 조회
|
|
||||||
def writeStockData(self, stock_code, today):
|
|
||||||
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
|
|
||||||
bConnect = objCpCybos.IsConnect
|
|
||||||
if (bConnect == 0):
|
|
||||||
print("PLUS가 정상적으로 연결되지 않음. ")
|
|
||||||
exit()
|
|
||||||
|
|
||||||
# 차트 객체 구하기
|
|
||||||
objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
|
|
||||||
|
|
||||||
objStockChart.SetInputValue(0, 'A' + stock_code) # 종목 코드
|
|
||||||
objStockChart.SetInputValue(1, ord('1')) # 1: 기간으로 조회, 2: 개수로 조회
|
|
||||||
objStockChart.SetInputValue(2, today) # 기간 조회 시, 시작일
|
|
||||||
objStockChart.SetInputValue(3, today) # 기간 조회 시, 종료일
|
|
||||||
objStockChart.SetInputValue(4, 400) # 조회 시 가져오는 Line 개수
|
|
||||||
objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량
|
|
||||||
objStockChart.SetInputValue(6, ord('m')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
|
|
||||||
objStockChart.SetInputValue(7, 1)
|
|
||||||
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
|
|
||||||
objStockChart.BlockRequest()
|
|
||||||
|
|
||||||
size = objStockChart.GetHeaderValue(3)
|
|
||||||
|
|
||||||
if size > 0:
|
|
||||||
outfp = open("./hts/backup/" + stock_code + "_" + today + ".csv", mode="w", encoding="utf-8")
|
|
||||||
outfp.write("%s,%s,%s,%s,%s,%s,%s\n" % ("날짜", "시간", "시가", "고가", "저가", "종가", "거래량"))
|
|
||||||
for i in range(size - 1, -1, -1):
|
|
||||||
day = objStockChart.GetDataValue(0, i)
|
|
||||||
time = objStockChart.GetDataValue(1, i)
|
|
||||||
start = objStockChart.GetDataValue(2, i)
|
|
||||||
high = objStockChart.GetDataValue(3, i)
|
|
||||||
low = objStockChart.GetDataValue(4, i)
|
|
||||||
close = objStockChart.GetDataValue(5, i)
|
|
||||||
vol = objStockChart.GetDataValue(6, i)
|
|
||||||
outfp.write("%d,%s,%d,%d,%d,%d,%d\n" % (day, str(time).zfill(4), start, high, low, close, vol))
|
|
||||||
outfp.close()
|
|
||||||
|
|
||||||
return size
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
today = datetime.today()
|
|
||||||
|
|
||||||
PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__))))))
|
|
||||||
RESOURCE_DIR = PROJECT_HOME + "/hits/hts"
|
|
||||||
|
|
||||||
stock_codes = ["252670", "122630"]
|
|
||||||
dataDownloader = DataDownloader()
|
|
||||||
|
|
||||||
zero_count = 0
|
|
||||||
for stock_code in stock_codes:
|
|
||||||
for i in range(1, 100000):
|
|
||||||
given_day = today - timedelta(i)
|
|
||||||
|
|
||||||
count = dataDownloader.writeStockData(stock_code, given_day.strftime('%Y%m%d'))
|
|
||||||
if count == 0:
|
|
||||||
zero_count += 1
|
|
||||||
else:
|
|
||||||
zero_count = 0
|
|
||||||
print(given_day, count)
|
|
||||||
|
|
||||||
if zero_count > 10:
|
|
||||||
break
|
|
||||||
print ("done...")
|
|
||||||
Reference in New Issue
Block a user