init
This commit is contained in:
107
hts/HTS.py
107
hts/HTS.py
@@ -9,6 +9,7 @@ import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
from hts.OrderItem import OrderItem
|
||||
from stock.util.TelegramBot import TelegramBot
|
||||
from stock.analysis.MovingAverage import MovingAverage
|
||||
|
||||
class HTS:
|
||||
|
||||
@@ -474,7 +475,7 @@ class HTS:
|
||||
def insertStockData(self, this_day, stock_code, stock_name=''):
|
||||
|
||||
# 테이블 생성
|
||||
self.cursor.execute("CREATE TABLE IF NOT EXISTS hts (CODE text, NAME text, ymd text, hms text, close REAL, open REAL, high REAL, low REAL, volume REAL, label INTEGER DEFAULT 0)")
|
||||
self.cursor.execute("CREATE TABLE IF NOT EXISTS hts (CODE text, NAME text, ymd text, hms text, close REAL, open REAL, high REAL, low REAL, volume REAL, disparity_avg5 REAL, disparity_avg20 REAL, disparity_avg60 REAL, disparity_avg120 REAL, disparity_avg240 REAL, disparity_avg480 REAL, disparity_avg1500 REAL)")
|
||||
|
||||
# 키 생성
|
||||
create_key = "CREATE INDEX IF NOT EXISTS hts_idx on hts(CODE, ymd, hms) "
|
||||
@@ -497,6 +498,49 @@ class HTS:
|
||||
self.conn.commit()
|
||||
return
|
||||
|
||||
def getQ(self):
|
||||
q_5 = MovingAverage(5)
|
||||
q_20 = MovingAverage(20)
|
||||
q_60 = MovingAverage(60)
|
||||
q_120 = MovingAverage(120)
|
||||
q_240 = MovingAverage(240)
|
||||
q_480 = MovingAverage(480)
|
||||
q_1500 = MovingAverage(1500)
|
||||
q = {'q_5': q_5, 'q_20': q_20, 'q_60': q_60, 'q_120': q_120, 'q_240': q_240, 'q_480': q_480, 'q_1500': q_1500}
|
||||
|
||||
return q
|
||||
|
||||
def updateDisparity(self, ticker_code):
|
||||
|
||||
self.cursor.execute('SELECT ymd, hms, close FROM hts WHERE CODE=? order by ymd, hms', (ticker_code,))
|
||||
|
||||
q = self.getQ()
|
||||
db_result = self.cursor.fetchall()
|
||||
for rows in db_result:
|
||||
ymd = rows[0]
|
||||
hms = rows[1]
|
||||
close = rows[2]
|
||||
|
||||
q['q_5'].enqueue(close)
|
||||
q['q_20'].enqueue(close)
|
||||
q['q_60'].enqueue(close)
|
||||
q['q_120'].enqueue(close)
|
||||
q['q_240'].enqueue(close)
|
||||
q['q_480'].enqueue(close)
|
||||
q['q_1500'].enqueue(close)
|
||||
|
||||
disparity_avg5 = close / q['q_5'].avg()
|
||||
disparity_avg20 = close / q['q_20'].avg()
|
||||
disparity_avg60 = close / q['q_60'].avg()
|
||||
disparity_avg120 = close / q['q_120'].avg()
|
||||
disparity_avg240 = close / q['q_240'].avg()
|
||||
disparity_avg480 = close / q['q_480'].avg()
|
||||
disparity_avg1500 = close / q['q_1500'].avg()
|
||||
|
||||
self.cursor.execute( "update hts set disparity_avg5=?, disparity_avg20=?, disparity_avg60=?, disparity_avg120=?, disparity_avg240=?, disparity_avg480=?, disparity_avg1500=? where CODE=? and ymd=? and hms=?", (disparity_avg5, disparity_avg20, disparity_avg60, disparity_avg120, disparity_avg240, disparity_avg480, disparity_avg1500, ticker_code, ymd, hms, ))
|
||||
self.conn.commit()
|
||||
|
||||
return
|
||||
|
||||
def write(self, day, result):
|
||||
#날짜,시간,시가,고가,저가,종가,거래량
|
||||
@@ -516,67 +560,6 @@ class HTS:
|
||||
outFp.close()
|
||||
return
|
||||
|
||||
def getCSV(self, fileName, result):
|
||||
with open(fileName, 'r', encoding='utf-8') as infp:
|
||||
reader = csv.reader(infp)
|
||||
next(reader)
|
||||
|
||||
for rows in reader:
|
||||
days = rows[0] # hts.날짜
|
||||
ymd = rows[1] # hts.시간
|
||||
open_v = rows[2] # hts.시가
|
||||
high = rows[3] # hts.고가
|
||||
low = rows[4] # hts.저가
|
||||
close = rows[5] # hts.종가
|
||||
vol = rows[6] # hts.거래량
|
||||
|
||||
temp = datetime.strptime(str(days) + " " + str(ymd).zfill(4) + "00", '%Y%m%d %H%M%S')
|
||||
#if temp < start_time:
|
||||
# continue
|
||||
|
||||
result["ymd"].append(temp)
|
||||
result["open"].append(int(open_v))
|
||||
result["close"].append(int(close))
|
||||
result["high"].append(int(high))
|
||||
result["low"].append(int(low))
|
||||
result["volume"].append(int(volume))
|
||||
return
|
||||
|
||||
def updateLabel(self, stock_code, bsLine, data, ymd):
|
||||
|
||||
self.cursor.execute('Update hts set label=? WHERE CODE=? and ymd=?', (0, stock_code, ymd,))
|
||||
|
||||
for i in range(len(bsLine["buy"])):
|
||||
if bsLine["buy"][i] > 0:
|
||||
ymd = data['date'][i].strftime('%Y%m%d')
|
||||
hms = data['date'][i].strftime('%H%M')
|
||||
self.cursor.execute('Update hts set label=? WHERE CODE=? and ymd=? and hms=?', (2, stock_code, ymd, hms))
|
||||
|
||||
for i in range(len(bsLine["sell"])):
|
||||
if bsLine["sell"][i] > 0:
|
||||
ymd = data['date'][i].strftime('%Y%m%d')
|
||||
hms = data['date'][i].strftime('%H%M')
|
||||
self.cursor.execute('Update hts set label=? WHERE CODE=? and ymd=? and hms=?', (1, stock_code, ymd, hms))
|
||||
self.conn.commit()
|
||||
|
||||
print("update...", stock_code, ymd)
|
||||
return
|
||||
|
||||
def clearLabel(self, stock_code, ymd):
|
||||
|
||||
self.cursor.execute('update hts set label=? WHERE CODE=? and ymd=? ', (0, stock_code, ymd,))
|
||||
self.conn.commit()
|
||||
print("update...", stock_code, ymd)
|
||||
return
|
||||
|
||||
def makeLabel(self, stock_code, ymd, hms, label):
|
||||
|
||||
self.cursor.execute('Update hts set label=? WHERE CODE=? and ymd=? and hms=?', (label, stock_code, ymd, hms,))
|
||||
self.conn.commit()
|
||||
|
||||
print("update...", stock_code, ymd, hms, label)
|
||||
return
|
||||
|
||||
def getYMD(self, stock_code):
|
||||
|
||||
result = []
|
||||
|
||||
Reference in New Issue
Block a user