code: def order(self, asset, amount, style, order_id=None):
      log.debug("ordering {} {}".format(amount, asset.symbol))
      if amount == 0:
          log.warn("skipping 0 amount orders")
          return None
  
      if self.simulate_orders:
          return super(ExchangeBlotter, self).order(
              asset, amount, style, order_id
          )
  
      else:
          order = retry(
              action=self.exchange_order,
              attempts=self.attempts["order_attempts"],
              sleeptime=self.attempts["retry_sleeptime"],
              retry_exceptions=(ExchangeRequestError,),
              cleanup=lambda: log.warn("Ordering again."),
              args=(asset, amount, style),
          )
  
          self.open_orders[order.asset].append(order)
          self.orders[order.id] = order
          self.new_orders.append(order)
  
          return order.id
  
imports: import numpy
  import pandas
  from logbook import Logger
  from redo import retry
  from catalyst.assets._assets import TradingPair
  from catalyst.constants import LOG_LEVEL
  from catalyst.exchange.exchange_errors import ExchangeRequestError
  from catalyst.finance.blotter import Blotter
  from catalyst.finance.commission import CommissionModel
  from catalyst.finance.order import ORDER_STATUS
  from catalyst.finance.slippage import SlippageModel
  from catalyst.finance.transaction import create_transaction
  from catalyst.utils.input_validation import expect_types
label_desc: Use image node_id 3 for calling the ExchangeBlotter obj's underlying member method code with example usage: obj.order(asset, amount, style, order_id) and returns: None, super, order