init
This commit is contained in:
68
HTS_etf.py
68
HTS_etf.py
@@ -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'):
|
||||||
|
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user