'Your ask: {4:.2f}, Your bid: {5:.2f}, Your spread: {6:.2f} '
              'Avg: {7:.10f} Min: {8:.10f} Max: {9:.10f}'.format(
            ((datetime.now(tzlocal()) - order_book.last_time).microseconds * 1e-6),
            order_book.asks.price_tree.min_key(), order_book.bids.price_tree.max_key(),
            order_book.asks.price_tree.min_key() - order_book.bids.price_tree.max_key(),
            open_orders.decimal_open_ask_price, open_orders.decimal_open_bid_price,
            open_orders.decimal_open_ask_price - open_orders.decimal_open_bid_price,
            order_book.average_rate*1e-6, order_book.fastest_rate*1e-6, order_book.slowest_rate*1e-6), end='\r')


if __name__ == '__main__':
    if args.command_line:
        stream_handler = logging.StreamHandler()
        stream_handler.setFormatter(logging.Formatter('\n%(asctime)s, %(levelname)s, %(message)s'))
        stream_handler.setLevel(logging.INFO)
        trading_file_logger.addHandler(stream_handler)
        order_book_file_logger.addHandler(stream_handler)
        command_line = True

    loop = asyncio.get_event_loop()
    if args.trading:
        loop.run_in_executor(None, functools.partial(buyer_strategy, order_book, open_orders, spreads))
        loop.run_in_executor(None, update_balances)
        loop.run_in_executor(None, update_orders)
    if args.command_line:
        loop.run_in_executor(None, monitor)
    n = 0
    while True:
        start_time = loop.time()
        loop.run_until_complete(websocket_to_order_book())
        end_time = loop.time()
                open_orders.decimal_open_ask_price,
                open_orders.decimal_open_bid_price,
                open_orders.decimal_open_ask_price -
                open_orders.decimal_open_bid_price,
                order_book.average_rate * 1e-6, order_book.fastest_rate * 1e-6,
                order_book.slowest_rate * 1e-6),
            end='\r')


if __name__ == '__main__':
    if args.command_line:
        stream_handler = logging.StreamHandler()
        stream_handler.setFormatter(
            logging.Formatter('\n%(asctime)s, %(levelname)s, %(message)s'))
        stream_handler.setLevel(logging.INFO)
        trading_file_logger.addHandler(stream_handler)
        order_book_file_logger.addHandler(stream_handler)
        command_line = True

    loop = asyncio.get_event_loop()
    if args.trading:
        loop.run_in_executor(
            None,
            functools.partial(buyer_strategy, order_book, open_orders,
                              spreads))
        loop.run_in_executor(None, update_balances)
        loop.run_in_executor(None, update_orders)
    if args.command_line:
        loop.run_in_executor(None, monitor)
    n = 0
    while True:
    if open_orders.open_ask_order_id and Decimal(open_orders.open_ask_price) > round(
                    max_bid + Decimal(spreads.ask_adjustment_spread), 2):
        file_logger.info('CANCEL: open ask {0} threshold {1} diff {2}'.format(
            Decimal(open_orders.open_ask_price),
            round(max_bid - Decimal(spreads.ask_adjustment_spread), 2),
            Decimal(open_orders.open_ask_price) - round(max_bid + Decimal(spreads.ask_adjustment_spread), 2)))
        open_orders.cancel('ask')
        return True
    return True

if __name__ == '__main__':
    if len(sys.argv) == 1:
        stream_handler = logging.StreamHandler()
        stream_handler.setFormatter(logging.Formatter('\n%(asctime)s, %(levelname)s, %(message)s'))
        stream_handler.setLevel(logging.INFO)
        file_logger.addHandler(stream_handler)
        command_line = True

    loop = asyncio.get_event_loop()
    n = 0
    while True:
        start_time = loop.time()
        loop.run_until_complete(websocket_to_order_book())
        end_time = loop.time()
        seconds = end_time - start_time
        if seconds < 2:
            n += 1
            sleep_time = (2 ** n) + (random.randint(0, 1000) / 1000)
            file_logger.error('Websocket connectivity problem, going to sleep for {0}'.format(sleep_time))
            time.sleep(sleep_time)
            if n > 6: