def test_bbands(self): a = [i for i in range(1, 20 + 1)] na = np.asanyarray(a) print(na) pa = pd.Series(na) na2 = pa.values print(id(na) == id(na2)) m, u, l = indicators.bollinger_bands(pd.Series(na), n=5) print(m, u, l)
def update_candle(self, df, candle, localtime): logger.info('update_candle %s > %s : %s', df.index[-1], df.iloc[-1], candle) price = df.Close[-1] m, u, l = indicators.bollinger_bands(df.Close, n=20, stdev=1.5) high = round(u[-1], 2) low = round(l[-1], 2) logger.info('BBands high[%s] price[%s] low[%s]', high, price, low) df = indicators.RSI(df, period=14) rsi = df.RSI[-1] rsi = round(rsi, 2) score = 0 if price >= high: logger.info('BBands Upper touched! price[%s] >= bbhigh[%s]', price, high) score += 1 elif price <= low: logger.info('BBands Lower touched! price[%s] <= bblow[%s]', price, low) score -= 1 if rsi >= 60: logger.info('RSI[%s] >= 60.', rsi) score += 1 elif rsi <= 40: logger.info('RSI[%s] <= 40.', rsi) score -= 1 order_qty = 10 if score >= 2: # 질문 메시지 text = f'주문타입: <b>BUY</b>\n' \ f'가격: {df.Close[-1]}\n' \ f'수량: {order_qty}\n' \ f'이유: {self.symbol} Too much buy! price[{price}] >= bbhigh[{high}] AND RSI[{rsi}] >= 60\n'\ f'<a href="https://www.bitmex.com/chartEmbed?symbol=XBTUSD">차트열기</a> \n' \ f'<a href="https://www.bitmex.com/app/trade/XBTUSD">거래소열기</a> \n' self.send_message(text) # 텔레그램으로 주문받기 기능은 삭제.. # self.telegram_bot.send_question(question_text=text, # yes_name="BUY", # yes_func=self.order, # yes_param={"df": df, "qty": order_qty}, # no_name="CANCEL") elif score <= -2: text = f'주문타입: <b>SELL</b>\n' \ f'가격: {df.Close[-1]}\n' \ f'수량: {-order_qty}\n' \ f'이유: {self.symbol} Too much sell! price[{price}] <= bblow[{low}] AND RSI[{rsi}] <= 40\n' \ f'<a href="https://www.bitmex.com/chartEmbed?symbol=XBTUSD">차트열기</a> \n' \ f'<a href="https://www.bitmex.com/app/trade/XBTUSD">거래소열기</a> \n' self.send_message(text)
def update_candle(self, df, candle): # logger.info('update_candle %s > %s : %s', df.index[-1], df.iloc[-1], candle) logger.info( '>> %s >> %s', datetime.fromtimestamp(df.index[-1] / 1000), f'O:{candle.Open} H:{candle.High} L:{candle.Low} C:{candle.Close} V:{candle.Volume}' ) price = df.Close.iloc[-1] m, u, l = indicators.bollinger_bands(df.Close, n=20, stdev=1.5) high = round(u.iloc[-1], 2) low = round(l.iloc[-1], 2) logger.info('BBands high[%s] price[%s] low[%s]', high, price, low) df = indicators.RSI(df, period=14) rsi = df.RSI.iloc[-1] rsi = round(rsi, 2) logger.info('RSI[%s]', rsi) score = 0 if price >= high: logger.info('BBands Upper touched! price[%s] >= bbhigh[%s]', price, high) score += 1 elif price <= low: logger.info('BBands Lower touched! price[%s] <= bblow[%s]', price, low) score -= 1 if rsi >= 60: logger.info('RSI[%s] >= 60.', rsi) score += 1 elif rsi <= 40: logger.info('RSI[%s] <= 40.', rsi) score -= 1 if score >= 2: self.send_telegram( f'{self.symbol} Too much buy! price[{price}] >= bbhigh[{high}] AND RSI[{rsi}] >= 60' ) elif score <= -2: self.send_telegram( f'{self.symbol} Too much sell! price[{price}] <= bblow[{low}] AND RSI[{rsi}] <= 40' ) sys.exit(0)