class_docstr: The correctness of the metrics of Account in nested execution depends on the shallow copy of `trade_account` in
  qlib/backtest/executor.py:NestedExecutor
  Different level of executor has different Account object when calculating metrics. But the position object is
  shared cross all the Account object.
code: def init_vars(
      self,
      init_cash: float,
      position_dict: dict,
      freq: str,
      benchmark_config: dict,
  ) -> None:
      # 1) the following variables are shared by multiple layers
      # - you will see a shallow copy instead of deepcopy in the NestedExecutor;
      self.init_cash = init_cash
      self.current_position: BasePosition = init_instance_by_config(
          {
              "class": self._pos_type,
              "kwargs": {
                  "cash": init_cash,
                  "position_dict": position_dict,
              },
              "module_path": "qlib.backtest.position",
          },
      )
      self.accum_info = AccumulatedInfo()
  
      # 2) following variables are not shared between layers
      self.portfolio_metrics: Optional[PortfolioMetrics] = None
      self.hist_positions: Dict[pd.Timestamp, BasePosition] = {}
      self.reset(freq=freq, benchmark_config=benchmark_config)
  
imports: from __future__ import annotations
  import copy
  from typing import Dict, List, Optional, Tuple, cast
  import pandas
  from qlib.utils import init_instance_by_config
  from .decision import BaseTradeDecision, Order
  from .exchange import Exchange
  from .high_performance_ds import BaseOrderIndicator
  from .position import BasePosition
  from .report import Indicator, PortfolioMetrics
label_desc: Use image node_id 2 for calling the Account obj's underlying member method code with example usage: obj.init_vars(init_cash, position_dict, freq, benchmark_config) without return types