diff --git a/HTS_etf.py b/HTS_etf.py index 9662c23..1bfb1b0 100644 --- a/HTS_etf.py +++ b/HTS_etf.py @@ -38,14 +38,11 @@ class HTS_etf(HTS): ichimokuCloud = None - def __init__(self, RESOURCE_PATH, stock_code, stock_name, SELL_GAP): + def __init__(self, RESOURCE_PATH): super().__init__(RESOURCE_PATH) self.RESOURCE_PATH = RESOURCE_PATH - self.SELL_GAP = SELL_GAP - self.stock_code = stock_code - self.stock_name = stock_name self.orderChecker = OrderChecker(self.RESOURCE_PATH, self.stock_code) self.bot = TelegramBot() self.stockStatus = StockStatus(RESOURCE_PATH) @@ -78,34 +75,31 @@ class HTS_etf(HTS): if code == "A" + stock_code: if bs_sell_price is not None: if jangoDic[code]['매도가능'] > 0: - if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익'] or self.SELL_GAP < jangoDic[code]['평가금액']-jangoDic[code]['매입금액']: - # 1.5% 손해 혹은 2% 이상 시 수익 매도 - if sell_count == 0: - self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], bs_sell_price) - else: - self.requestOrder(OrderType.sell, code[1:], sell_count, bs_sell_price) - self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) - check = True + #if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익']: + if sell_count == 0: + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], bs_sell_price) + else: + self.requestOrder(OrderType.sell, code[1:], sell_count, bs_sell_price) + self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) + check = True else: if jangoDic[code]['매도가능'] > 0: - if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익'] or self.SELL_GAP < jangoDic[code]['평가금액']-jangoDic[code]['매입금액']: - # 1.5% 손해 혹은 2% 이상 시 수익 매도 - if sell_count == 0: - self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) - else: - self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가']) - self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) - check = True + #if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익']: + if sell_count == 0: + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) + else: + self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가']) + self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) + check = True else: if jangoDic[code]['매도가능'] > 0: - if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익'] or self.SELL_GAP < jangoDic[code]['평가금액']-jangoDic[code]['매입금액']: - # 1.5% 손해 혹은 2% 이상 시 수익 매도 - if sell_count == 0: - self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) - else: - self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가']) - self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) - check = True + #if jangoDic[code]['평가손익'] < -0.6 or 1.0 < jangoDic[code]['평가손익']: + if sell_count == 0: + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) + else: + self.requestOrder(OrderType.sell, code[1:], sell_count, jangoDic[code]['현재가']) + self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) + check = True return check def getSellingPrice(self, log_time, stock_code, final_price, without_loss=False): @@ -391,10 +385,10 @@ class HTS_etf(HTS): return result def getDisparityLimit(self, ticker, RESOURCE_PATH): - conn = sqlite3.connect(os.path.join(RESOURCE_PATH, 'coins.db')) + 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 minutely WHERE (CODE=? or CODE=?) order by ymd, hms', (ticker['stock_code'], ticker['stock_code'].replace('KRW-', ''),)) + 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'],)) disparity = { 'avg': {}, diff --git a/HTS_etf_all.py b/HTS_etf_all.py index 06e6563..6e32d7b 100644 --- a/HTS_etf_all.py +++ b/HTS_etf_all.py @@ -26,36 +26,36 @@ if __name__ == "__main__": os.mkdir(os.path.join(RESOURCE_PATH, "log")) 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'): - if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'): - THIS_TIME = datetime.now() - for stock in stocks: - with open("config.json", "r", encoding="utf-8") as f: - config = json.load(f) - MAX_BUY_PRICE = config['MAX_BUY_PRICE'] - BUY_LIST_1 = config['BUY_LIST_1'] - BUY_LIST_1["disparity"] = hts.getDisparityLimit(stock, RESOURCE_PATH) - if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 090100", '%Y%m%d %H%M%S'): - hts.bot.sendMsg("START... {} ({}) SLOW_K: {}".format(stock['stock_code'], stock['stock_name'], MAX_BUY_PRICE)) + #while datetime.strptime(today + " 060000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 153100", '%Y%m%d %H%M%S'): + #if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'): + THIS_TIME = datetime.now() + for stock in stocks: + with open("config.json", "r", encoding="utf-8") as f: + config = json.load(f) + MAX_BUY_PRICE = config['MAX_BUY_PRICE'] + BUY_LIST_1 = config['BUY_LIST_1'] + BUY_LIST_1["disparity"] = hts.getDisparityLimit(stock, RESOURCE_PATH) + if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(today + " 090100", '%Y%m%d %H%M%S'): + hts.bot.sendMsg("START... {} ({}) SLOW_K: {}".format(stock['stock_code'], stock['stock_name'], MAX_BUY_PRICE)) - LAST_DATA = hts.getLastData(stock['stock_code'], today) - result_m1 = hts.getRealTime(stock['stock_code'], today, LAST_DATA) - result_tic_m1 = hts.makeTickData1(result_m1, mins=1) - data = hts.analyze(result_tic_m1) - result_tic_m30 = hts.makeTickData2(result_tic_m1, mins=30) - data_signal = hts.analyze(result_tic_m30) - # data.drop(data.index[:len(data) - analyzed_day], inplace=True) + LAST_DATA = hts.getLastData(stock['stock_code'], today) + result_m1 = hts.getRealTime(stock['stock_code'], today, LAST_DATA) + result_tic_m1 = hts.makeTickData1(result_m1, mins=1) + data = hts.analyze(result_tic_m1) + result_tic_m30 = hts.makeTickData2(result_tic_m1, mins=30) + data_signal = hts.analyze(result_tic_m30) + # data.drop(data.index[:len(data) - analyzed_day], inplace=True) - hts.buyRealTime(stock, data, data_signal, MAX_BUY_PRICE, BUY_LIST_1) + hts.buyRealTime(stock, data, data_signal, MAX_BUY_PRICE, BUY_LIST_1) - if (int(THIS_TIME.strftime("%M")) % 50 == 0 or int(THIS_TIME.strftime("%M")) % 20 == 0): - vm = psutil.virtual_memory() - vm_item = dict() - vm_item['free'] = vm.available // (1024 * 1024) - vm_item['idle'] = vm.available / vm.total * 100 - hts.bot.sendMsg("Alive... mem: {:.1f}".format(vm_item['idle'])) + if (int(THIS_TIME.strftime("%M")) % 50 == 0 or int(THIS_TIME.strftime("%M")) % 20 == 0): + vm = psutil.virtual_memory() + vm_item = dict() + vm_item['free'] = vm.available // (1024 * 1024) + vm_item['idle'] = vm.available / vm.total * 100 + hts.bot.sendMsg("Alive... mem: {:.1f}".format(vm_item['idle'])) - time.sleep(60) + time.sleep(60) db_filename = os.path.join(RESOURCE_PATH, "hts.db") diff --git a/hts/HTS.py b/hts/HTS.py index 0eb0bbe..aaf979c 100644 --- a/hts/HTS.py +++ b/hts/HTS.py @@ -574,7 +574,7 @@ class HTS: def getDBData(self, stock_code, day, result): - self.cursor.execute('SELECT ymd, hms, open, high, low, close, volume, label FROM hts WHERE CODE=? and ymd=? order by ymd, hms', (stock_code, day, )) + self.cursor.execute('SELECT ymd, hms, open, high, low, close, volume FROM hts WHERE CODE=? and ymd=? order by ymd, hms', (stock_code, day, )) db_result = self.cursor.fetchall() for rows in db_result: ymd = rows[0] # hts.날짜 @@ -584,7 +584,6 @@ class HTS: low = rows[4] # hts.저가 close = rows[5] # hts.종가 volume = rows[6] # hts.거래량 - label = 0 if rows[7] is None else rows[7] # hts.매매구분 temp = datetime.strptime(str(ymd) + " " + str(hms).zfill(4) + "00", '%Y%m%d %H%M%S') @@ -594,7 +593,6 @@ class HTS: result["high"].append(int(high)) result["low"].append(int(low)) result["volume"].append(int(volume)) - result["label"].append(int(label)) return