init
This commit is contained in:
68
HTS_etf.py
68
HTS_etf.py
@@ -41,18 +41,18 @@ class HTS_etf(HTS):
|
||||
|
||||
return
|
||||
|
||||
def getTodayRSI(self, dbfile_name="stock.db"):
|
||||
def getTodayStateValue(self, stock_code, dbfile_name="stock.db"):
|
||||
try:
|
||||
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, dbfile_name))
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute('SELECT rsi FROM stock_analysis WHERE CODE=? order by ymd desc', (self.stock_code,))
|
||||
db_result = cursor.fetchall()
|
||||
cursor.execute('SELECT stochastic_slow_k FROM stock_analysis WHERE CODE=? order by ymd desc limit 1', (stock_code,))
|
||||
db_result = cursor.fetchone()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
if db_result is not None:
|
||||
return db_result[0][0]
|
||||
return db_result[0]
|
||||
except:
|
||||
return 100
|
||||
return 100
|
||||
@@ -129,11 +129,55 @@ class HTS_etf(HTS):
|
||||
|
||||
return result
|
||||
|
||||
def buyRealTime(self, today, analyzed_day=1000, MAX_PRICE=10000, logFp=None):
|
||||
rsi = self.getTodayRSI()
|
||||
if rsi > 79:
|
||||
self.bot.sendMsg("exit... {} ({}) RSI: {}".format(self.stock_code, self.stock_name, rsi))
|
||||
return
|
||||
def get_MAX_PRICE(self, stock_code, stochastic_slow_k):
|
||||
MAX_PRICE = 30000
|
||||
|
||||
if stock_code == "252670":
|
||||
# "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...")
|
||||
THIS_TIME = datetime.now()
|
||||
@@ -141,11 +185,9 @@ class HTS_etf(HTS):
|
||||
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'):
|
||||
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'):
|
||||
self.bot.sendMsg("START... {} ({}) RSI: {}".format(self.stock_code, self.stock_name, rsi))
|
||||
logFp.write("START {} ({}) RSI: {}\n".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 {} ({}) 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'):
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ if __name__ == "__main__":
|
||||
if not os.path.exists(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')
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=40000, logFp=logFp)
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
|
||||
logFp.close()
|
||||
|
||||
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")):
|
||||
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')
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=30000, logFp=logFp)
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
|
||||
logFp.close()
|
||||
|
||||
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")):
|
||||
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')
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=50000, logFp=logFp)
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
|
||||
logFp.close()
|
||||
|
||||
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")):
|
||||
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')
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, MAX_PRICE=100000, logFp=logFp)
|
||||
hts.buyRealTime(today_str, analyzed_day=1000, logFp=logFp)
|
||||
logFp.close()
|
||||
|
||||
db_filename = os.path.join(RESOURCE_PATH, "hts.db")
|
||||
|
||||
@@ -271,18 +271,13 @@ if __name__ == "__main__":
|
||||
|
||||
simulation = Simulation(RESOURCE_PATH)
|
||||
|
||||
day_list = ['20231025']
|
||||
# to check bying
|
||||
stock_codes = {
|
||||
#"252670": ['20210930'],
|
||||
#"252670": ['20210903','20210910','20210913'],
|
||||
#"252670": ['20210901', '20210902', '20210903', '20210906', '20210907', '20210908', '20210909', '20210910', '20210913', '20210914', '20210915', '20210916', '20210917', '20210923', '20210924', '20210927', '20210928', '20210929', '20210930', '20211001', '20211005','20231012','20231013'],
|
||||
#"122630": ['20230930'],
|
||||
#"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']
|
||||
"233740": day_list,
|
||||
"252670": day_list,
|
||||
"251340": day_list,
|
||||
"122630": day_list
|
||||
}
|
||||
#simulation.simulate(stock_codes)
|
||||
simulation.simulate(stock_codes)
|
||||
|
||||
@@ -215,60 +215,39 @@ class BuySellChecker:
|
||||
|
||||
return buy, weight
|
||||
|
||||
|
||||
|
||||
|
||||
def getBuyPriceAndWeight(self, stock_code, i, data):
|
||||
buy, weight = -1, -1
|
||||
|
||||
if i > 40:
|
||||
"""
|
||||
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 i > 50:
|
||||
|
||||
if data['macd'][i] < 0 and data['macd'][i - 1] < data['macd'][i] and data['macds'][i] < data['macd'][i]:
|
||||
check = True
|
||||
for c in range(2, 5):
|
||||
if data['macds'][i - c] < data['macd'][i - c]:
|
||||
check = False
|
||||
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]:
|
||||
if stock_code == '233740':
|
||||
if data['macd'][i-2] < 0 and 0 < data['macd'][i-1] and 0 < data['macd'][i]:
|
||||
if data['volume'][i - 2] < data['volume'][i - 1] < data['volume'][i]:
|
||||
if min(data['macd'][i-30:i].tolist()) < -50:
|
||||
buy, weight = data['close'][i], 1
|
||||
|
||||
check = True
|
||||
for c in range(i - 40 - 26, 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]:
|
||||
if min(data['macd'][i-5:i].tolist()) < min(data['macd'][i-15:i-10].tolist()) < -50:
|
||||
if -50 < max(data['macd'][i-15:i-7].tolist()):
|
||||
buy, weight = data['close'][i], 1
|
||||
|
||||
elif stock_code == '122630':
|
||||
if data['macd'][i - 2] < 0 and 0 < data['macd'][i - 1] and 0 < data['macd'][i]:
|
||||
if data['volume'][i - 2] < data['volume'][i - 1] < data['volume'][i]:
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user