From 75b41ab2eb622c0b683c36b92fb00acd4624bff4 Mon Sep 17 00:00:00 2001 From: dsyoon Date: Wed, 20 Dec 2023 13:42:17 +0900 Subject: [PATCH] init --- HTS_etf.py | 95 +++++++++++++++++++++++++++---------------- HTS_etf_all.py | 2 +- hts/BuySellChecker.py | 18 ++++---- 3 files changed, 71 insertions(+), 44 deletions(-) diff --git a/HTS_etf.py b/HTS_etf.py index 1c7c258..6644b6e 100644 --- a/HTS_etf.py +++ b/HTS_etf.py @@ -372,33 +372,60 @@ class HTS_etf(HTS): return result - def getDisparityLimit(self, ticker, RESOURCE_PATH): - conn = sqlite3.connect(os.path.join(RESOURCE_PATH, 'hts.db')) - cursor = conn.cursor() + def getDisparityLimit(self, ticker): - cursor.execute('SELECT disparity_avg5, disparity_avg20, disparity_avg60, disparity_avg120, disparity_avg240, disparity_avg480, disparity_avg1500 FROM hts WHERE CODE=? order by ymd, hms', (ticker['stock_code'],)) + avg = {"avg5": [], "avg20": [], "avg60": [], "avg120": [], "avg240": [], "avg480": [], "avg1500": []} + + self.connect2DB("hts.db") + + self.cursor.execute('SELECT ymd, hms, close FROM hts WHERE CODE=? order by ymd, hms', (ticker["stock_code"],)) + + q = self.getQ() + db_result = self.cursor.fetchall() + for rows in db_result: + 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() + + avg["avg5"].append(disparity_avg5) + avg["avg20"].append(disparity_avg20) + avg["avg60"].append(disparity_avg60) + avg["avg120"].append(disparity_avg120) + avg["avg240"].append(disparity_avg240) + avg["avg480"].append(disparity_avg480) + avg["avg1500"].append(disparity_avg1500) + + self.disconnect() disparity = { 'avg': {}, "limit_top_1": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, "limit_bottom_1": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, "limit_top_3": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, - "limit_bottom_3": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None} + "limit_bottom_3": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_top_5": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_bottom_5": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_top_10": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_bottom_10": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_top_20": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_bottom_20": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_top_50": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None}, + "limit_bottom_50": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None} } - avg = {"avg5": [], "avg20": [], "avg60": [], "avg120": [], "avg240": [], "avg480": [], "avg1500": []} - db_result = cursor.fetchall() - for rows in db_result: - avg["avg5"].append(float(rows[0])) - avg["avg20"].append(float(rows[1])) - avg["avg60"].append(float(rows[2])) - avg["avg120"].append(float(rows[3])) - avg["avg240"].append(float(rows[4])) - avg["avg480"].append(float(rows[5])) - avg["avg1500"].append(float(rows[6])) - - cursor.close() - conn.close() - disparity['avg'] = avg disparity_1500 = sorted(list(set(avg['avg1500'])), reverse=True) disparity_480 = sorted(list(set(avg['avg480'])), reverse=True) @@ -408,22 +435,22 @@ class HTS_etf(HTS): disparity_20 = sorted(list(set(avg['avg20'])), reverse=True) disparity_5 = sorted(list(set(avg['avg5'])), reverse=True) - poses = [1, 3] + poses = [1, 3, 5, 10, 20, 50] for pos in poses: - disparity['limit_top_'+str(pos)]['avg1500'] = disparity_1500[pos] - disparity['limit_bottom_'+str(pos)]['avg1500'] = disparity_1500[len(disparity_1500)-pos] - disparity['limit_top_'+str(pos)]['avg480'] = disparity_480[pos] - disparity['limit_bottom_'+str(pos)]['avg480'] = disparity_480[len(disparity_480)-pos] - disparity['limit_top_'+str(pos)]['avg240'] = disparity_240[pos] - disparity['limit_bottom_'+str(pos)]['avg240'] = disparity_240[len(disparity_240)-pos] - disparity['limit_top_'+str(pos)]['avg120'] = disparity_120[pos] - disparity['limit_bottom_'+str(pos)]['avg120'] = disparity_120[len(disparity_120)-pos] - disparity['limit_top_'+str(pos)]['avg60'] = disparity_60[pos] - disparity['limit_bottom_'+str(pos)]['avg60'] = disparity_60[len(disparity_60)-pos] - disparity['limit_top_'+str(pos)]['avg20'] = disparity_20[pos] - disparity['limit_bottom_'+str(pos)]['avg20'] = disparity_20[len(disparity_20)-pos] - disparity['limit_top_'+str(pos)]['avg5'] = disparity_5[pos] - disparity['limit_bottom_'+str(pos)]['avg5'] = disparity_5[len(disparity_5)-pos] + disparity['limit_top_' + str(pos)]['avg1500'] = disparity_1500[pos - 1] + disparity['limit_bottom_' + str(pos)]['avg1500'] = disparity_1500[len(disparity_1500) - pos - 1] + disparity['limit_top_' + str(pos)]['avg480'] = disparity_480[pos] + disparity['limit_bottom_' + str(pos)]['avg480'] = disparity_480[len(disparity_480) - pos - 1] + disparity['limit_top_' + str(pos)]['avg240'] = disparity_240[pos] + disparity['limit_bottom_' + str(pos)]['avg240'] = disparity_240[len(disparity_240) - pos - 1] + disparity['limit_top_' + str(pos)]['avg120'] = disparity_120[pos] + disparity['limit_bottom_' + str(pos)]['avg120'] = disparity_120[len(disparity_120) - pos - 1] + disparity['limit_top_' + str(pos)]['avg60'] = disparity_60[pos] + disparity['limit_bottom_' + str(pos)]['avg60'] = disparity_60[len(disparity_60) - pos - 1] + disparity['limit_top_' + str(pos)]['avg20'] = disparity_20[pos] + disparity['limit_bottom_' + str(pos)]['avg20'] = disparity_20[len(disparity_20) - pos - 1] + disparity['limit_top_' + str(pos)]['avg5'] = disparity_5[pos] + disparity['limit_bottom_' + str(pos)]['avg5'] = disparity_5[len(disparity_5) - pos - 1] return disparity diff --git a/HTS_etf_all.py b/HTS_etf_all.py index da05497..90692c6 100644 --- a/HTS_etf_all.py +++ b/HTS_etf_all.py @@ -35,7 +35,7 @@ if __name__ == "__main__": BUY_LIST[stock['stock_code']]['MAX_BUY_PRICE'] = config['MAX_BUY_PRICE'] BUY_LIST[stock['stock_code']]['BUY_LIST_1'] = config['BUY_LIST_1'] - BUY_LIST[stock['stock_code']]['BUY_LIST_1']["disparity"] = hts.getDisparityLimit(stock, RESOURCE_PATH) + BUY_LIST[stock['stock_code']]['BUY_LIST_1']["disparity"] = hts.getDisparityLimit(stock) print("START...") while datetime.strptime(today + " 060000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 153100", '%Y%m%d %H%M%S'): diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 7903d65..477e167 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -140,19 +140,19 @@ class BuySellChecker(): buy_type = 'upward' check = True - if data['disparity_avg20'][i] < BUY_LIST['disparity']['limit_bottom_3']['avg20']: + if data['disparity_avg20'][i] < BUY_LIST['disparity']['limit_bottom_10']['avg20']: buy_type = 'disparity_avg20' check = True - if data['disparity_avg60'][i] < BUY_LIST['disparity']['limit_bottom_3']['avg60']: + if data['disparity_avg60'][i] < BUY_LIST['disparity']['limit_bottom_10']['avg60']: buy_type = 'disparity_avg60' check = True - if data['disparity_avg480'][i] < BUY_LIST['disparity']['limit_bottom_3']['avg480']: + if data['disparity_avg480'][i] < BUY_LIST['disparity']['limit_bottom_10']['avg480']: buy_type = 'disparity_avg1500' check = True - if data['disparity_avg1500'][i] < BUY_LIST['disparity']['limit_bottom_3']['avg1500']: + if data['disparity_avg1500'][i] < BUY_LIST['disparity']['limit_bottom_10']['avg1500']: buy_type = 'disparity_avg1500' check = True @@ -203,17 +203,17 @@ class BuySellChecker(): check = True """ - if BUY_LIST['disparity']['limit_top_1']['avg20'] < data['disparity_avg20'][i]: + if BUY_LIST['disparity']['limit_top_5']['avg20'] < data['disparity_avg20'][i]: check = True - if BUY_LIST['disparity']['limit_top_1']['avg480'] < data['disparity_avg480'][i]: + if BUY_LIST['disparity']['limit_top_5']['avg480'] < data['disparity_avg480'][i]: check = True - if BUY_LIST['disparity']['limit_top_1']['avg1500'] < data['disparity_avg1500'][i]: + if BUY_LIST['disparity']['limit_top_5']['avg1500'] < data['disparity_avg1500'][i]: check = True - if data['avg1500'][i - 1] < data['trend_avg'][i - 1] and data['trend_avg'][i] <= data['avg1500'][i]: - check = True + # if data['avg1500'][i-1] < data['trend_avg'][i-1] and data['trend_avg'][i] <= data['avg1500'][i]: + # check = True if check: sell_price = data['close'][i]