code: def __init__(self, *args, **kwargs):
      self.simulate_orders = kwargs.pop("simulate_orders", False)
      self.attempts = kwargs.pop("attempts", False)
  
      self.exchanges = kwargs.pop("exchanges", None)
      if not self.exchanges:
          raise ValueError(
              "ExchangeBlotter must have an `exchanges` attribute."
          )
  
      super(ExchangeBlotter, self).__init__(*args, **kwargs)
  
      # Using the equity models for now
      # We may be able to define more sophisticated models based on the fee
      # structure of each exchange.
      self.slippage_models = {TradingPair: TradingPairFixedSlippage()}
      self.commission_models = {TradingPair: TradingPairFeeSchedule()}
  
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 1 to create a new ExchangeBlotter object from inherited base classes: Blotter with example: obj = ExchangeBlotter()