class_docstr: Since the goal is to support multiple exchanges, it makes sense to
  include additional stats in the portfolio object. This fills the role
  of Blotter and Portfolio in live mode.
  
  Instead of relying on the performance tracker, each exchange portfolio
  tracks its own holding. This offers a separation between tracking an
  exchange and the statistics of the algorithm.
docstr: Create an open order and store in memory.
  
  Parameters
  ----------
  order: Order
docstr_tok: ["Create","an","open","order","and","store","in","memory",".","Parameters","--","--","--","--","--","order",":","Order"]
code: def create_order(self, order):
      """
      Create an open order and store in memory.
  
      Parameters
      ----------
      order: Order
  
      """
      log.debug("creating order {}".format(order.id))
  
      open_orders = (
          self.open_orders[order.asset]
          if order.asset is self.open_orders
          else []
      )
  
      open_orders.append(order)
  
      self.open_orders[order.asset] = open_orders
  
      order_position = (
          self.positions[order.asset]
          if order.asset in self.positions
          else None
      )
  
      if order_position is None:
          order_position = Position(order.asset)
          self.positions[order.asset] = order_position
  
      order_position.amount += order.amount
      log.debug("open order added to portfolio")
  
file_path: catalyst/catalyst/exchange/exchange_portfolio.py
imports: import numpy
  from catalyst.constants import LOG_LEVEL
  from catalyst.protocol import Portfolio, Positions, Position
  from logbook import Logger
label_desc: Use image node_id 2 for calling the ExchangePortfolio obj's underlying member method code with example usage: obj.create_order(order) without return types