docstr: This backtest is used for comparing the nested execution and single layer execution
  Due to the low quality daily-level and miniute-level data, they are hardly comparable.
  So it is used for detecting serious bugs which make the results different greatly.
  
  .. code-block:: shell
  
      [1724971:MainThread](2021-12-07 16:24:31,156) INFO - qlib.workflow - [record_temp.py:441] - Portfolio analysis record 'port_analysis_1day.pkl'
      has been saved as the artifact of the Experiment 2
      'The following are analysis results of benchmark return(1day).'
                             risk
      mean               0.000651
      std                0.012472
      annualized_return  0.154967
      information_ratio  0.805422
      max_drawdown      -0.160445
      'The following are analysis results of the excess return without cost(1day).'
                             risk
      mean               0.001375
      std                0.006103
      annualized_return  0.327204
      information_ratio  3.475016
      max_drawdown      -0.024927
      'The following are analysis results of the excess return with cost(1day).'
                             risk
      mean               0.001184
      std                0.006091
      annualized_return  0.281801
      information_ratio  2.998749
      max_drawdown      -0.029568
      [1724971:MainThread](2021-12-07 16:24:31,170) INFO - qlib.workflow - [record_temp.py:466] - Indicator analysis record 'indicator_analysis_1day.
      pkl' has been saved as the artifact of the Experiment 2
      'The following are analysis results of indicators(1day).'
           value
      ffr    1.0
      pa     0.0
      pos    0.0
      [1724971:MainThread](2021-12-07 16:24:31,188) INFO - qlib.timer - [log.py:113] - Time cost: 0.007s | waiting `async_log` Done
docstr_tok: ["This","backtest","is","used","for","comparing","the","nested","execution","and","single","layer","execution","Due","to","the","low","quality","daily-level","and","miniute-level","data",",","they","are","hardly","comparable",".","So","it","is","used","for","detecting","serious","bugs","which","make","the","results","different","greatly",".","..","code-block",":",":","shell","[","1724971",":","MainThread","]","(","2021-12-07","16:24:31,156",")","INFO","-","qlib.workflow","-","[","record_temp.py:441","]","-","Portfolio","analysis","record","'port_analysis_1day.pkl'","has","been","saved","as","the","artifact","of","the","Experiment","2","'The","following","are","analysis","results","of","benchmark","return","(","1day",")",".","'","risk","mean","0.000651","std","0.012472","annualized_return","0.154967","information_ratio","0.805422","max_drawdown","-0.160445","'The","following","are","analysis","results","of","the","excess","return","without","cost","(","1day",")",".","'","risk","mean","0.001375","std","0.006103","annualized_return","0.327204","information_ratio","3.475016","max_drawdown","-0.024927","'The","following","are","analysis","results","of","the","excess","return","with","cost","(","1day",")",".","'","risk","mean","0.001184","std","0.006091","annualized_return","0.281801","information_ratio","2.998749","max_drawdown","-0.029568","[","1724971",":","MainThread","]","(","2021-12-07","16:24:31,170",")","INFO","-","qlib.workflow","-","[","record_temp.py:466","]","-","Indicator","analysis","record","'indicator_analysis_1day",".","pkl","'","has","been","saved","as","the","artifact","of","the","Experiment","2","'The","following","are","analysis","results","of","indicators","(","1day",")",".","'","value","ffr","1.0","pa","0.0","pos","0.0","[","1724971",":","MainThread","]","(","2021-12-07","16:24:31,188",")","INFO","-","qlib.timer","-","[","log.py:113","]","-","Time","cost",":","0.007s","|","waiting","`","async_log","`","Done"]
code: def backtest_only_daily(self):
      """
      This backtest is used for comparing the nested execution and single layer execution
      Due to the low quality daily-level and miniute-level data, they are hardly comparable.
      So it is used for detecting serious bugs which make the results different greatly.
  
      .. code-block:: shell
  
          [1724971:MainThread](2021-12-07 16:24:31,156) INFO - qlib.workflow - [record_temp.py:441] - Portfolio analysis record 'port_analysis_1day.pkl'
          has been saved as the artifact of the Experiment 2
          'The following are analysis results of benchmark return(1day).'
                                 risk
          mean               0.000651
          std                0.012472
          annualized_return  0.154967
          information_ratio  0.805422
          max_drawdown      -0.160445
          'The following are analysis results of the excess return without cost(1day).'
                                 risk
          mean               0.001375
          std                0.006103
          annualized_return  0.327204
          information_ratio  3.475016
          max_drawdown      -0.024927
          'The following are analysis results of the excess return with cost(1day).'
                                 risk
          mean               0.001184
          std                0.006091
          annualized_return  0.281801
          information_ratio  2.998749
          max_drawdown      -0.029568
          [1724971:MainThread](2021-12-07 16:24:31,170) INFO - qlib.workflow - [record_temp.py:466] - Indicator analysis record 'indicator_analysis_1day.
          pkl' has been saved as the artifact of the Experiment 2
          'The following are analysis results of indicators(1day).'
               value
          ffr    1.0
          pa     0.0
          pos    0.0
          [1724971:MainThread](2021-12-07 16:24:31,188) INFO - qlib.timer - [log.py:113] - Time cost: 0.007s | waiting `async_log` Done
  
      """
      self._init_qlib()
      model = init_instance_by_config(self.task["model"])
      dataset = init_instance_by_config(self.task["dataset"])
      self._train_model(model, dataset)
      strategy_config = {
          "class": "TopkDropoutStrategy",
          "module_path": "qlib.contrib.strategy.signal_strategy",
          "kwargs": {
              "signal": (model, dataset),
              "topk": 50,
              "n_drop": 5,
          },
      }
      pa_conf = deepcopy(self.port_analysis_config)
      pa_conf["strategy"] = strategy_config
      pa_conf["executor"] = {
          "class": "SimulatorExecutor",
          "module_path": "qlib.backtest.executor",
          "kwargs": {
              "time_per_step": "day",
              "generate_portfolio_metrics": True,
              "verbose": True,
          },
      }
      pa_conf["backtest"]["benchmark"] = self.benchmark
  
      with R.start(experiment_name=self.exp_name, resume=True):
          recorder = R.get_recorder()
          par = PortAnaRecord(recorder, pa_conf)
          par.generate()
  
file_path: qlib/examples/nested_decision_execution/workflow.py
imports: from copy import deepcopy
  import qlib
  import fire
  import pandas
  from qlib.constant import REG_CN
  from qlib.config import HIGH_FREQ_CONFIG
  from qlib.data import D
  from qlib.utils import exists_qlib_data, init_instance_by_config, flatten_dict
  from qlib.workflow import R
  from qlib.workflow.record_temp import SignalRecord, PortAnaRecord
  from qlib.tests.data import GetData
  from qlib.backtest import collect_data
label_desc: Use image node_id 6 for calling the NestedDecisionExecutionWorkflow obj's underlying member method code with example usage: obj.backtest_only_daily() without return types