class_docstr: Executor that simulate the true market
code: def _collect_data(
      self, trade_decision: BaseTradeDecision, level: int = 0
  ) -> Tuple[List[object], dict]:
      trade_start_time, _ = self.trade_calendar.get_step_time()
      execute_result: list = []
  
      for order in self._get_order_iterator(trade_decision):
          # Each time we move into a new date, clear `self.dealt_order_amount` since it only maintains intraday
          # information.
          now_deal_day = self.trade_calendar.get_step_time()[0].floor(
              freq="D"
          )
          if self.deal_day is None or now_deal_day > self.deal_day:
              self.dealt_order_amount = defaultdict(float)
              self.deal_day = now_deal_day
  
          # execute the order.
          # NOTE: The trade_account will be changed in this function
          (
              trade_val,
              trade_cost,
              trade_price,
          ) = self.trade_exchange.deal_order(
              order,
              trade_account=self.trade_account,
              dealt_order_amount=self.dealt_order_amount,
          )
          execute_result.append(
              (order, trade_val, trade_cost, trade_price)
          )
  
          self.dealt_order_amount[order.stock_id] += order.deal_amount
  
          if self.verbose:
              print(
                  "[I {:%Y-%m-%d %H:%M:%S}]: {} {}, price {:.2f}, amount {}, deal_amount {}, factor {}, "
                  "value {:.2f}, cash {:.2f}.".format(
                      trade_start_time,
                      "sell"
                      if order.direction == Order.SELL
                      else "buy",
                      order.stock_id,
                      trade_price,
                      order.amount,
                      order.deal_amount,
                      order.factor,
                      trade_val,
                      self.trade_account.get_cash(),
                  ),
              )
      return execute_result, {"trade_info": execute_result}
  
imports: from __future__ import annotations
  import copy
  from abc import abstractmethod
  from collections import defaultdict
  from types import GeneratorType
  from typing import Any, Dict, Generator, List, Tuple, Union, cast
  import pandas
  from qlib.backtest.account import Account
  from qlib.backtest.position import BasePosition
  from qlib.log import get_module_logger
  from ..strategy.base import BaseStrategy
  from ..utils import init_instance_by_config
  from .decision import BaseTradeDecision, Order
  from .exchange import Exchange
  from .utils import CommonInfrastructure, LevelInfrastructure, TradeCalendarManager, get_start_end_idx
label_desc: Use image node_id 3 for calling the SimulatorExecutor obj's underlying member method code with example usage: obj._collect_data(trade_decision, level) and returns: execute_result,  dict