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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)