This commit is contained in:
dsyoon
2023-11-01 00:16:52 +09:00
parent 08b5915d89
commit 03cbec5803
7 changed files with 93 additions and 77 deletions

View File

@@ -41,18 +41,18 @@ class HTS_etf(HTS):
return return
def getTodayRSI(self, dbfile_name="stock.db"): def getTodayStateValue(self, stock_code, dbfile_name="stock.db"):
try: try:
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, dbfile_name)) conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, dbfile_name))
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute('SELECT rsi FROM stock_analysis WHERE CODE=? order by ymd desc', (self.stock_code,)) cursor.execute('SELECT stochastic_slow_k FROM stock_analysis WHERE CODE=? order by ymd desc limit 1', (stock_code,))
db_result = cursor.fetchall() db_result = cursor.fetchone()
cursor.close() cursor.close()
conn.close() conn.close()
if db_result is not None: if db_result is not None:
return db_result[0][0] return db_result[0]
except: except:
return 100 return 100
return 100 return 100
@@ -129,11 +129,55 @@ class HTS_etf(HTS):
return result return result
def buyRealTime(self, today, analyzed_day=1000, MAX_PRICE=10000, logFp=None): def get_MAX_PRICE(self, stock_code, stochastic_slow_k):
rsi = self.getTodayRSI() MAX_PRICE = 30000
if rsi > 79:
self.bot.sendMsg("exit... {} ({}) RSI: {}".format(self.stock_code, self.stock_name, rsi)) if stock_code == "252670":
return # "KODEX 200선물인버스2X"
if stochastic_slow_k < 20:
MAX_PRICE = 200000
elif 20 <= stochastic_slow_k < 40:
MAX_PRICE = 150000
elif 40 <= stochastic_slow_k < 60:
MAX_PRICE = 100000
else:
MAX_PRICE = 50000
elif stock_code == "122630":
# "KODEX 레버리지"
if stochastic_slow_k < 20:
MAX_PRICE = 100000
elif 20 <= stochastic_slow_k < 40:
MAX_PRICE = 70000
elif 40 <= stochastic_slow_k < 60:
MAX_PRICE = 50000
else:
MAX_PRICE = 30000
elif stock_code == "251340":
# "KODEX 코스닥150선물인버스"
if stochastic_slow_k < 20:
MAX_PRICE = 100000
elif 20 <= stochastic_slow_k < 40:
MAX_PRICE = 70000
elif 40 <= stochastic_slow_k < 60:
MAX_PRICE = 50000
else:
MAX_PRICE = 30000
elif stock_code == "233740":
# "KODEX 코스닥150레버리지"
if stochastic_slow_k < 20:
MAX_PRICE = 70000
elif 20 <= stochastic_slow_k < 40:
MAX_PRICE = 50000
elif 40 <= stochastic_slow_k < 60:
MAX_PRICE = 30000
else:
MAX_PRICE = 10000
return MAX_PRICE
def buyRealTime(self, today, analyzed_day=1000, logFp=None):
stochastic_slow_k = self.getTodayStateValue(self.stock_code)
MAX_PRICE = self.get_MAX_PRICE(self.stock_code, stochastic_slow_k)
print("START...") print("START...")
THIS_TIME = datetime.now() THIS_TIME = datetime.now()
@@ -141,11 +185,9 @@ class HTS_etf(HTS):
LAST_DATA = self.getLastData(self.stock_code, today) LAST_DATA = self.getLastData(self.stock_code, today)
while datetime.strptime(today + " 063000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 153100",'%Y%m%d %H%M%S'): while datetime.strptime(today + " 063000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 153100",'%Y%m%d %H%M%S'):
if THIS_TIME < datetime.strptime(today + " 085500", '%Y%m%d %H%M%S'):
self.bot.sendMsg("WAIT... {} ({}) RSI: {}".format(self.stock_code, self.stock_name, rsi))
if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 090100", '%Y%m%d %H%M%S'): if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 090100", '%Y%m%d %H%M%S'):
self.bot.sendMsg("START... {} ({}) RSI: {}".format(self.stock_code, self.stock_name, rsi)) self.bot.sendMsg("START... {} ({}) SLOW_K: {}".format(self.stock_code, self.stock_name, MAX_PRICE))
logFp.write("START {} ({}) RSI: {}\n".format(self.stock_code, self.stock_name, rsi)) logFp.write("START {} ({}) SLOW_K: {}\n".format(self.stock_code, self.stock_name, MAX_PRICE))
if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'): if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'):

View File

@@ -20,7 +20,7 @@ if __name__ == "__main__":
if not os.path.exists(os.path.join(RESOURCE_PATH, "log")): if not os.path.exists(os.path.join(RESOURCE_PATH, "log")):
os.mkdir(os.path.join(RESOURCE_PATH, "log")) os.mkdir(os.path.join(RESOURCE_PATH, "log"))
logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8') logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8')
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=40000, logFp=logFp) hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
logFp.close() logFp.close()
db_filename = os.path.join(RESOURCE_PATH, "hts.db") db_filename = os.path.join(RESOURCE_PATH, "hts.db")

View File

@@ -20,7 +20,7 @@ if __name__ == "__main__":
if not os.path.exists(os.path.join(RESOURCE_PATH, "log")): if not os.path.exists(os.path.join(RESOURCE_PATH, "log")):
os.mkdir(os.path.join(RESOURCE_PATH, "log")) os.mkdir(os.path.join(RESOURCE_PATH, "log"))
logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8') logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8')
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=30000, logFp=logFp) hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
logFp.close() logFp.close()
db_filename = os.path.join(RESOURCE_PATH, "hts.db") db_filename = os.path.join(RESOURCE_PATH, "hts.db")

View File

@@ -20,7 +20,7 @@ if __name__ == "__main__":
if not os.path.exists(os.path.join(RESOURCE_PATH, "log")): if not os.path.exists(os.path.join(RESOURCE_PATH, "log")):
os.mkdir(os.path.join(RESOURCE_PATH, "log")) os.mkdir(os.path.join(RESOURCE_PATH, "log"))
logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8') logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8')
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=50000, logFp=logFp) hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
logFp.close() logFp.close()
db_filename = os.path.join(RESOURCE_PATH, "hts.db") db_filename = os.path.join(RESOURCE_PATH, "hts.db")

View File

@@ -20,7 +20,7 @@ if __name__ == "__main__":
if not os.path.exists(os.path.join(RESOURCE_PATH, "log")): if not os.path.exists(os.path.join(RESOURCE_PATH, "log")):
os.mkdir(os.path.join(RESOURCE_PATH, "log")) os.mkdir(os.path.join(RESOURCE_PATH, "log"))
logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8') logFp = open(os.path.join(RESOURCE_PATH, "log", today_str + "_" + stock_code + ".log"), "w", encoding='utf-8')
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=100000, logFp=logFp) hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
logFp.close() logFp.close()
db_filename = os.path.join(RESOURCE_PATH, "hts.db") db_filename = os.path.join(RESOURCE_PATH, "hts.db")

View File

@@ -271,18 +271,13 @@ if __name__ == "__main__":
simulation = Simulation(RESOURCE_PATH) simulation = Simulation(RESOURCE_PATH)
day_list = ['20231025']
# to check bying # to check bying
stock_codes = { stock_codes = {
#"252670": ['20210930'], "233740": day_list,
#"252670": ['20210903','20210910','20210913'], "252670": day_list,
#"252670": ['20210901', '20210902', '20210903', '20210906', '20210907', '20210908', '20210909', '20210910', '20210913', '20210914', '20210915', '20210916', '20210917', '20210923', '20210924', '20210927', '20210928', '20210929', '20210930', '20211001', '20211005','20231012','20231013'], "251340": day_list,
#"122630": ['20230930'], "122630": day_list
#"122630": ['20210901','20210902','20210903','20210906','20231012','20231013']
#"122630": ['20210901', '20210902', '20210903', '20210906', '20210907', '20210908', '20210909', '20210910', '20210913', '20210914', '20210915', '20210916', '20210917', '20210923', '20210924', '20210927', '20210928', '20210929', '20210930', '20211001', '20211005','20231012','20231013'],
"233740": ['20231023'],
"252670": ['20231023'],
"251340": ['20231023'],
"122630": ['20231023']
} }
#simulation.simulate(stock_codes) #simulation.simulate(stock_codes)
simulation.simulate(stock_codes) simulation.simulate(stock_codes)

View File

@@ -215,61 +215,40 @@ class BuySellChecker:
return buy, weight return buy, weight
def getBuyPriceAndWeight(self, stock_code, i, data): def getBuyPriceAndWeight(self, stock_code, i, data):
buy, weight = -1, -1 buy, weight = -1, -1
if i > 40: if i > 50:
"""
up, up_volume, down, down_volume = 0, 0, 0, 0
for c in range(i-26, i):
if data['open'][c] < data['close'][c]:
up += 1
up_volume += data['volume'][c]
if data['close'][c] < data['open'][c]:
down += 1
down_volume += data['volume'][c]
if down_volume < up_volume * 0.75:
buy, weight = data['close'][i], 1
"""
if data['macd'][i] < 0 and data['macd'][i - 1] < data['macd'][i] and data['macds'][i] < data['macd'][i]: if stock_code == '233740':
check = True if data['macd'][i-2] < 0 and 0 < data['macd'][i-1] and 0 < data['macd'][i]:
for c in range(2, 5): if data['volume'][i - 2] < data['volume'][i - 1] < data['volume'][i]:
if data['macds'][i - c] < data['macd'][i - c]: if min(data['macd'][i-30:i].tolist()) < -50:
check = False buy, weight = data['close'][i], 1
break
if check:
up, middle, down = 0, 0, 0
for c in range(i - 26, i):
if data['open'][c] < data['close'][c]:
min_value = min(data['open'][c], data['close'][c])
if data['laggingSpan'][c] < min_value:
down += 1
elif min_value < data['laggingSpan'][c]:
up += 1
else:
middle += 1
if middle < 10:
check = True
for c in range(i - 56, i - 26):
if min(data['open'][c], data['close'][c]) < data['laggingSpan'][c]:
check = False
break
if check:
if max(data['low'][i - 5:i].tolist() + data['high'][i - 5:i].tolist()) < data['close'][i]:
buy, weight = data['close'][i], 1
check = True if min(data['macd'][i-5:i].tolist()) < min(data['macd'][i-15:i-10].tolist()) < -50:
for c in range(i - 40 - 26, i - 26): if -50 < max(data['macd'][i-15:i-7].tolist()):
if min(data['open'][c], data['close'][c]) < data['laggingSpan'][c]: buy, weight = data['close'][i], 1
check = False
break elif stock_code == '122630':
if check: if data['macd'][i - 2] < 0 and 0 < data['macd'][i - 1] and 0 < data['macd'][i]:
if max(data['low'][i - 5:i].tolist() + data['high'][i - 5:i].tolist()) < data['close'][i]: if data['volume'][i - 2] < data['volume'][i - 1] < data['volume'][i]:
buy, weight = data['close'][i], 1 if min(data['macd'][i - 30:i].tolist()) < -25:
buy, weight = data['close'][i], 1
if min(data['macd'][i-5:i].tolist()) < min(data['macd'][i - 15:i - 10].tolist()) < -30:
if -20 < max(data['macd'][i - 15:i - 7].tolist()):
buy, weight = data['close'][i], 1
elif stock_code == '252670':
if min(data['macd'][i - 40:i - 20].tolist()) < -5 < data['macd'][i]:
if data['close'][i] < min(data['close'][i - 40:i - 20].tolist()):
buy, weight = data['close'][i], 1
elif stock_code == '251340':
if min(data['macd'][i-40:i-20].tolist()) < -20 < data['macd'][i]:
if data['close'][i] < min(data['close'][i-40:i-20].tolist()):
buy, weight = data['close'][i], 1
return buy, weight return buy, weight