This commit is contained in:
dsyoon
2023-12-20 13:42:17 +09:00
parent db5267af49
commit 75b41ab2eb
3 changed files with 71 additions and 44 deletions

View File

@@ -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

View File

@@ -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'):

View File

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