docstr: Loop through the list of open orders in the Portfolio object.
  For each executed order found, create a transaction and apply to the
  Portfolio.
  
  Returns
  -------
  list[Transaction]
docstr_tok: ["Loop","through","the","list","of","open","orders","in","the","Portfolio","object",".","For","each","executed","order","found",",","create","a","transaction","and","apply","to","the","Portfolio",".","Returns","--","--","--","-","list","[","Transaction","]"]
code: def check_open_orders(self):
      """
      Loop through the list of open orders in the Portfolio object.
      For each executed order found, create a transaction and apply to the
      Portfolio.
  
      Returns
      -------
      list[Transaction]
  
      """
      for asset in self.open_orders:
          exchange = self.exchanges[asset.exchange]
  
          for order in self.open_orders[asset]:
              log.debug("found open order: {}".format(order.id))
  
              transactions = exchange.process_order(order)
              # This is a temporary measure, we should really update all
              # trades, not just when the order gets filled. I just think
              # that this is safer until we have a robust way to track
              # the trades already processed by the algo. We can't loose
              # them if the algo shuts down.
              if transactions and order.status == ORDER_STATUS.FILLED:
                  avg_price = np.average(
                      a=[t.price for t in transactions],
                      weights=[t.amount for t in transactions],
                  )
                  ostatus = (
                      "filled" if order.open_amount == 0 else "partial"
                  )
                  log.info(
                      "{} order {} / {}: {}, avg price: {}".format(
                          ostatus,
                          order.id,
                          asset.symbol,
                          order.filled,
                          avg_price,
                      )
                  )
                  for transaction in transactions:
                      yield order, transaction
  
              elif order.status == ORDER_STATUS.CANCELLED:
                  yield order, None
  
              else:
                  delta = pd.Timestamp.utcnow() - order.dt
                  log.info(
                      "{exchange} order {order_id} for {symbol} still open "
                      "after {delta}".format(
                          exchange=exchange.name,
                          order_id=order.id,
                          delta=delta,
                          symbol=order.asset.symbol,
                      )
                  )
  
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 4 for calling the ExchangeBlotter obj's underlying member method code with example usage: obj.check_open_orders() without return types