From 0821fd4b8d87e48c961dbc78e12ca7b6ba644ac2 Mon Sep 17 00:00:00 2001 From: Xisen-Wang Date: Wed, 24 Jul 2024 10:26:06 +0000 Subject: [PATCH] Revised to enable logging of backtesting in Qlib & storing of rich-text-description in Trace --- rdagent/core/scenario.py | 9 +++++++++ rdagent/scenarios/qlib/experiment/model_experiment.py | 4 ++++ .../qlib/experiment/model_template/read_exp_res.py | 4 ++++ rdagent/scenarios/qlib/experiment/workspace.py | 3 +++ 4 files changed, 20 insertions(+) diff --git a/rdagent/core/scenario.py b/rdagent/core/scenario.py index 31f5f5d3..18ffcd3f 100644 --- a/rdagent/core/scenario.py +++ b/rdagent/core/scenario.py @@ -27,6 +27,15 @@ class Scenario(ABC): def simulator(self) -> str: """Simulator description""" + @property + @abstractmethod + def rich_style_description(self) -> str: + """Rich style description to present""" + @abstractmethod def get_scenario_all_desc(self) -> str: """Combine all the description together""" + + + + diff --git a/rdagent/scenarios/qlib/experiment/model_experiment.py b/rdagent/scenarios/qlib/experiment/model_experiment.py index 7b35b474..3da3c15e 100644 --- a/rdagent/scenarios/qlib/experiment/model_experiment.py +++ b/rdagent/scenarios/qlib/experiment/model_experiment.py @@ -38,6 +38,10 @@ class QlibModelScenario(Scenario): @property def simulator(self) -> str: return prompt_dict["qlib_model_simulator"] + + @property + def rich_style_description(self)->str: + return "Below is QlibModel Evolving Automatic R&D Demo." def get_scenario_all_desc(self) -> str: return f"""Background of the scenario: diff --git a/rdagent/scenarios/qlib/experiment/model_template/read_exp_res.py b/rdagent/scenarios/qlib/experiment/model_template/read_exp_res.py index 19930248..01976cb9 100644 --- a/rdagent/scenarios/qlib/experiment/model_template/read_exp_res.py +++ b/rdagent/scenarios/qlib/experiment/model_template/read_exp_res.py @@ -39,7 +39,11 @@ else: # Load the specified file from the latest recorder metrics = pd.Series(latest_recorder.list_metrics()) + output_path = Path(__file__).resolve().parent / "qlib_res.csv" metrics.to_csv(output_path) print(f"Output has been saved to {output_path}") + + ret_data_frame = latest_recorder.load_object("portfolio_analysis/report_normal_1day.pkl") + ret_data_frame.to_pickle("ret.pkl") diff --git a/rdagent/scenarios/qlib/experiment/workspace.py b/rdagent/scenarios/qlib/experiment/workspace.py index b9b58038..98f50124 100644 --- a/rdagent/scenarios/qlib/experiment/workspace.py +++ b/rdagent/scenarios/qlib/experiment/workspace.py @@ -36,6 +36,9 @@ class QlibFBWorkspace(FBWorkspace): env=run_env, ) + ret_df = pd.read_pickle(self.workspace_path / "ret.pkl") + logger.log_object(ret_df, tag="returns") # TODO: tag + csv_path = self.workspace_path / "qlib_res.csv" if not csv_path.exists():