diff --git a/HTS_etf.py b/HTS_etf.py index 758d785..b4b9cef 100644 --- a/HTS_etf.py +++ b/HTS_etf.py @@ -68,6 +68,37 @@ class HTS_etf(HTS): return jangoDic[code]['장부가'], jangoDic[code]['평가금액'], jangoDic[code]['평가손익'] return 0, 0, 0 + def sellStocks(self, stock_code=None, stock_name=None, bs_sell_price=None): + check = False + jangoDic = self.requstJango() + if jangoDic and len(jangoDic.keys()) > 0: + for code in jangoDic: + if stock_code is not None: + if code == "A" + stock_code: + if bs_sell_price is not None: + if jangoDic[code]['매도가능'] > 0: + if jangoDic[code]['평가손익'] < -1.0 or jangoDic[code]['장부가'] + 5 <= jangoDic[code]['현재가']: + # 1.5% 손해 혹은 2% 이상 시 수익 매도 + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], 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]['평가손익'] < -1.0 or jangoDic[code]['장부가'] + 5 <= jangoDic[code]['현재가']: + # 1.5% 손해 혹은 2% 이상 시 수익 매도 + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) + self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) + check = True + else: + if jangoDic[code]['매도가능'] > 0: + if jangoDic[code]['평가손익'] < -1.0 or jangoDic[code]['장부가'] + 5 <= jangoDic[code]['현재가']: + # 1.5% 손해 혹은 2% 이상 시 수익 매도 + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) + self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) + check = True + return check + + """ def sellStocks(self, stock_code=None, stock_name=None, bs_sell_price=None): check = False jangoDic = self.requstJango() @@ -97,6 +128,7 @@ class HTS_etf(HTS): 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): # final_price와 diff를 받으면, 해당 가격으로 그냥 매도한다는 의미 diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 858cd67..bad5b40 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -179,19 +179,30 @@ class BuySellChecker(): # 방법 3: if sum(data['avg480'][i - 5:i]) < data['avg480'][i] and sum(data['avg60'][i - 5:i]) < data['avg60'][i] and sum(data['avg20'][i - 5:i]) < data['avg20'][i] and sum(data['avg5'][i - 5:i]) < data['avg5'][i]: - if data['avg480'][i] < data['avg20'][i] < data['avg5'][i]: - if data['avg60'][i] < data['avg20'][i] < data['avg5'][i]: - if data['avg5'][i] < data['avg5'][i]: - buy_type = 'trend_up' - buy_ymd = data['ymd'][i] - if data['slow_k'][si] < 30: - buy_count = MAX_BUY_PRICE / (1 * data['close'][i]) - elif data['slow_k'][si] < 50: - buy_count = MAX_BUY_PRICE / (1.5 * data['close'][i]) - else: - buy_count = MAX_BUY_PRICE / (2 * data['close'][i]) + if data['avg480'][i] < data['avg20'][i] < data['avg5'][i] and data['avg60'][i] < data['avg20'][i] < data['avg5'][i]: + buy_type = 'trend_up' + buy_ymd = data['ymd'][i] + if data['slow_k'][si] < 30: + buy_count = MAX_BUY_PRICE / (1 * data['close'][i]) + elif data['slow_k'][si] < 50: + buy_count = MAX_BUY_PRICE / (1.5 * data['close'][i]) + else: + buy_count = MAX_BUY_PRICE / (2 * data['close'][i]) - return buy_ymd, buy_price, buy_count, buy_cut, buy_type + return buy_ymd, buy_price, buy_count, buy_cut, buy_type + + # 방법 4: + if data['avg60'][i] < data['avg20'][i] < data['avg5'][i]: + buy_type = 'short_trade' + buy_ymd = data['ymd'][i] + if data['slow_k'][si] < 30: + buy_count = MAX_BUY_PRICE / (1 * data['close'][i]) + elif data['slow_k'][si] < 50: + buy_count = MAX_BUY_PRICE / (1.5 * data['close'][i]) + else: + buy_count = MAX_BUY_PRICE / (2 * data['close'][i]) + + return buy_ymd, buy_price, buy_count, buy_cut, buy_type return buy_ymd, buy_price, buy_count, buy_cut, buy_type diff --git a/hts/HTS.py b/hts/HTS.py index dc0357b..baebbf6 100644 --- a/hts/HTS.py +++ b/hts/HTS.py @@ -191,7 +191,7 @@ class HTS: objStockOrder.SetInputValue(4, count) # 매수수량 count주 objStockOrder.SetInputValue(5, price) # 주문단가 - price 원 objStockOrder.SetInputValue(7, "0") # 주문 조건 구분 코드, 0: 기본 1: IOC 2:FOK - objStockOrder.SetInputValue(8, "01") # 주문호가 구분코드 - 01: 보통 + objStockOrder.SetInputValue(8, "03") # 주문호가 구분코드 - 01: 보통, 03: 시장가 # 매수 주문 요청 nRet = objStockOrder.BlockRequest()