This commit is contained in:
dsyoon
2023-12-19 23:31:09 +09:00
parent 308a01fc13
commit 6906703261
5 changed files with 256 additions and 236 deletions

View File

@@ -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 = []