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)
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)
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)
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)
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)
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)
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)
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')
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)
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)
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!')
def start_set_grid_scenario(message): telegram_bot.send_message(message.chat.id, "Hi, Boss! Let's trade!") base_price_request(message)
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)