コード例 #1
0
def tranche_size_request(message):
    telegram_bot.send_message(
        message.chat.id,
        'Set tranche size in WAVES, for example *10.5*',
        parse_mode='Markdown',
    )
    telegram_bot.register_next_step_handler(message, tranche_size_receive)
コード例 #2
0
def grid_levels_request(message):
    telegram_bot.send_message(
        message.chat.id,
        'Set number of bid and ask orders. Send them in format *N N*, for example *3 12*',
        parse_mode='Markdown'
    )
    telegram_bot.register_next_step_handler(message, grid_levels_receive)
コード例 #3
0
def interval_request(message):
    telegram_bot.send_message(
        message.chat.id,
        'Set step interval in percents, for example *3* or *12*',
        reply_markup=remove_keyboard(),
        parse_mode='Markdown')
    telegram_bot.register_next_step_handler(message, interval_receive)
コード例 #4
0
def interval_receive(message):
    if re.search("^[0-9]{1,2}$", message.text):
        black_bot.interval = int(message.text) / 100
        grid_levels_request(message)
    else:
        telegram_bot.send_message(message.chat.id, 'Wrong format. Try again', parse_mode='Markdown')
        telegram_bot.register_next_step_handler(message, interval_receive)
コード例 #5
0
def manual_base_price_receive(message):
    if re.search("^[0-9]{5}$", message.text):
        black_bot.base_price = int(message.text)
        interval_request(message)
    else:
        telegram_bot.send_message(message.chat.id, 'Wrong format. Try again with *nnnnn* format', parse_mode='Markdown')
        telegram_bot.register_next_step_handler(message, manual_base_price_receive)
コード例 #6
0
def manual_base_price_request(message):
    telegram_bot.send_message(
        message.chat.id,
        'Send base price in *nnnnn* format',
        reply_markup=remove_keyboard(),
        parse_mode='Markdown'
    )
    telegram_bot.register_next_step_handler(message, manual_base_price_receive)
コード例 #7
0
def grid_levels_receive(message):
    try:
        [bid_levels, ask_levels] = map(lambda x: int(x), message.text.split(' '))
        black_bot.grid_levels = bid_levels + 1 + ask_levels
        black_bot.base_level = bid_levels
        black_bot.last_level = black_bot.base_level
        black_bot.grid = ["-"] * black_bot.grid_levels
        tranche_size_request(message)
    except:
        telegram_bot.send_message(message.chat.id, 'Wrong format. Try again', parse_mode='Markdown')
        telegram_bot.register_next_step_handler(message, grid_levels_receive)
コード例 #8
0
def set_grid(message):
    telegram_bot.send_message(message.chat.id, 'Grid setting...', reply_markup=remove_keyboard())

    [bids, asks] = black_bot.init_grid()

    msg_text = ''
    for bid in bids:
        msg_text += f'BID {black_bot.tranche_size} *{bid}*\n'
    msg_text += '\n'
    for ask in asks:
        msg_text += f'ASK {black_bot.tranche_size} *{ask}*\n'
    telegram_bot.send_message(message.chat.id, msg_text, parse_mode='Markdown')
コード例 #9
0
def tranche_size_receive(message):
    try:
        black_bot.tranche_size = int(float(message.text) * 10 ** black_bot.asset_pair.asset1.decimals)
        telegram_bot.send_message(
            message.chat.id,
            f'Here is your grid parameters:\n\n'
            f'Base price: *{black_bot.base_price}*\n'
            f'Interval: *{black_bot.interval}*\n'
            f'Bids: *{black_bot.base_level}*\n'
            f'Asks: *{black_bot.grid_levels - 1 - black_bot.base_level}*\n'
            f'Tranche size: *{black_bot.tranche_size}*',
            reply_markup=set_grid_keyboard(),
            parse_mode='Markdown',
        )
        telegram_bot.register_next_step_handler(message, set_grid)
    except:
        telegram_bot.send_message(message.chat.id, 'Wrong format. Try again', parse_mode='Markdown')
        telegram_bot.register_next_step_handler(message, tranche_size_receive)
コード例 #10
0
def update_grid():
    # attempt to retrieve order history from matcher
    try:
        history = black_bot.wallet.getOrderHistory(black_bot.asset_pair)
    except:
        history = []

    if history:
        # loop through all grid levels
        # first all ask levels from the lowest ask to the highest -> range(grid.index("") + 1, len(grid))
        # then all bid levels from the highest to the lowest -> range(grid.index("") - 1, -1, -1)
        for n in list(range(0, black_bot.last_level)) + list(range(black_bot.last_level + 1, len(black_bot.grid))):
            # find the order with id == grid9*-+[n] in the history list

            order = [item for item in history if item['id'] == black_bot.grid[n]]
            status = order[0].get("status") if order else ""
            if status == "Filled":
                black_bot.wallet.deleteOrderHistory(black_bot.asset_pair)
                black_bot.grid[n] = ""
                black_bot.last_level = n
                filled_price = float(order[0].get("price")) / 10 ** (black_bot.asset_pair.asset2.decimals + (
                            black_bot.asset_pair.asset2.decimals - black_bot.asset_pair.asset1.decimals))
                filled_type = order[0].get("type")

                black_bot.log("## [%03d] %s%-4s Filled %18.*f%s" % (
                    n, COLOR_BLUE, filled_type.upper(), black_bot.asset_pair.asset2.decimals, filled_price, COLOR_RESET))
                telegram_bot.send_message(
                    config.USER_ID,
                    f'{filled_type.upper()} filled *{filled_price}*',
                    parse_mode='Markdown',
                )

                if filled_type == "buy":
                    black_bot.sell(n + 1)
                    telegram_bot.send_message(
                        config.USER_ID,
                        f'SELL order *{black_bot.get_level_price(n + 1)}*',
                        parse_mode='Markdown',
                    )
                elif filled_type == "sell":
                    black_bot.buy(n - 1)
                    telegram_bot.send_message(
                        config.USER_ID,
                        f'BUY order *{black_bot.get_level_price(n - 1)}*',
                        parse_mode='Markdown',
                    )

            # attempt to place again orders for empty grid levels or cancelled orders
            elif (status == "" or status == "Cancelled") and black_bot.grid[n] != "-":
                black_bot.grid[n] = ""
                if n > black_bot.last_level:
                    black_bot.sell(n)
                elif n < black_bot.last_level:
                    black_bot.buy(n)
コード例 #11
0
 def check_user(message):
     if message.chat.id == config.USER_ID:
         func(message)
     else:
         telegram_bot.send_message(message.chat.id,
                                   'You are not my Boss! Get out!')
コード例 #12
0
def start_set_grid_scenario(message):
    telegram_bot.send_message(message.chat.id, "Hi, Boss! Let's trade!")
    base_price_request(message)
コード例 #13
0
def base_price_request(message):
    telegram_bot.send_message(message.chat.id, 'Set base price', reply_markup=base_price_keyboard())
    telegram_bot.register_next_step_handler(message, base_price_receive)