init
This commit is contained in:
95
HTS_etf.py
95
HTS_etf.py
@@ -372,33 +372,60 @@ class HTS_etf(HTS):
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def getDisparityLimit(self, ticker, RESOURCE_PATH):
|
def getDisparityLimit(self, ticker):
|
||||||
conn = sqlite3.connect(os.path.join(RESOURCE_PATH, 'hts.db'))
|
|
||||||
cursor = conn.cursor()
|
|
||||||
|
|
||||||
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 = {
|
disparity = {
|
||||||
'avg': {},
|
'avg': {},
|
||||||
"limit_top_1": {"avg5": None, "avg20": None, "avg60": None, "avg120": None, "avg240": None, "avg480": None, "avg1500": None},
|
"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_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_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['avg'] = avg
|
||||||
disparity_1500 = sorted(list(set(avg['avg1500'])), reverse=True)
|
disparity_1500 = sorted(list(set(avg['avg1500'])), reverse=True)
|
||||||
disparity_480 = sorted(list(set(avg['avg480'])), 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_20 = sorted(list(set(avg['avg20'])), reverse=True)
|
||||||
disparity_5 = sorted(list(set(avg['avg5'])), 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:
|
for pos in poses:
|
||||||
disparity['limit_top_'+str(pos)]['avg1500'] = disparity_1500[pos]
|
disparity['limit_top_' + str(pos)]['avg1500'] = disparity_1500[pos - 1]
|
||||||
disparity['limit_bottom_'+str(pos)]['avg1500'] = disparity_1500[len(disparity_1500)-pos]
|
disparity['limit_bottom_' + str(pos)]['avg1500'] = disparity_1500[len(disparity_1500) - pos - 1]
|
||||||
disparity['limit_top_'+str(pos)]['avg480'] = disparity_480[pos]
|
disparity['limit_top_' + str(pos)]['avg480'] = disparity_480[pos]
|
||||||
disparity['limit_bottom_'+str(pos)]['avg480'] = disparity_480[len(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_top_' + str(pos)]['avg240'] = disparity_240[pos]
|
||||||
disparity['limit_bottom_'+str(pos)]['avg240'] = disparity_240[len(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_top_' + str(pos)]['avg120'] = disparity_120[pos]
|
||||||
disparity['limit_bottom_'+str(pos)]['avg120'] = disparity_120[len(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_top_' + str(pos)]['avg60'] = disparity_60[pos]
|
||||||
disparity['limit_bottom_'+str(pos)]['avg60'] = disparity_60[len(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_top_' + str(pos)]['avg20'] = disparity_20[pos]
|
||||||
disparity['limit_bottom_'+str(pos)]['avg20'] = disparity_20[len(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_top_' + str(pos)]['avg5'] = disparity_5[pos]
|
||||||
disparity['limit_bottom_'+str(pos)]['avg5'] = disparity_5[len(disparity_5)-pos]
|
disparity['limit_bottom_' + str(pos)]['avg5'] = disparity_5[len(disparity_5) - pos - 1]
|
||||||
|
|
||||||
return disparity
|
return disparity
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
BUY_LIST[stock['stock_code']]['MAX_BUY_PRICE'] = config['MAX_BUY_PRICE']
|
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'] = 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...")
|
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'):
|
while datetime.strptime(today + " 060000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 153100", '%Y%m%d %H%M%S'):
|
||||||
|
|||||||
@@ -140,19 +140,19 @@ class BuySellChecker():
|
|||||||
buy_type = 'upward'
|
buy_type = 'upward'
|
||||||
check = True
|
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'
|
buy_type = 'disparity_avg20'
|
||||||
check = True
|
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'
|
buy_type = 'disparity_avg60'
|
||||||
check = True
|
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'
|
buy_type = 'disparity_avg1500'
|
||||||
check = True
|
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'
|
buy_type = 'disparity_avg1500'
|
||||||
check = True
|
check = True
|
||||||
|
|
||||||
@@ -203,17 +203,17 @@ class BuySellChecker():
|
|||||||
check = True
|
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
|
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
|
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
|
check = True
|
||||||
|
|
||||||
if data['avg1500'][i - 1] < data['trend_avg'][i - 1] and data['trend_avg'][i] <= data['avg1500'][i]:
|
# if data['avg1500'][i-1] < data['trend_avg'][i-1] and data['trend_avg'][i] <= data['avg1500'][i]:
|
||||||
check = True
|
# check = True
|
||||||
|
|
||||||
if check:
|
if check:
|
||||||
sell_price = data['close'][i]
|
sell_price = data['close'][i]
|
||||||
|
|||||||
Reference in New Issue
Block a user