def main(self): print("========== reset ==========") self.reset() print("========== simulate ==========") self.rolling_online_manager.simulate(end_time=self.end_time) print("========== collect results ==========") print(self.rolling_online_manager.get_collector()()) print("========== signals ==========") signals = self.rolling_online_manager.get_signals() print(signals) # Backtesting # - the code is based on this example https://qlib.readthedocs.io/en/latest/component/strategy.html CSI300_BENCH = "SH000903" STRATEGY_CONFIG = { "topk": 30, "n_drop": 3, "signal": signals.to_frame("score"), } strategy_obj = TopkDropoutStrategy(**STRATEGY_CONFIG) report_normal, positions_normal = backtest_daily( start_time=signals.index.get_level_values("datetime").min(), end_time=signals.index.get_level_values("datetime").max(), strategy=strategy_obj, ) analysis = dict() analysis["excess_return_without_cost"] = risk_analysis( report_normal["return"] - report_normal["bench"]) analysis["excess_return_with_cost"] = risk_analysis( report_normal["return"] - report_normal["bench"] - report_normal["cost"]) analysis_df = pd.concat(analysis) # type: pd.DataFrame pprint(analysis_df)
def analyze(report_normal): _analysis = dict() _analysis["sub_bench"] = risk_analysis(report_normal["return"] - report_normal["bench"]) _analysis["sub_cost"] = risk_analysis(report_normal["return"] - report_normal["bench"] - report_normal["cost"]) analysis_df = pd.concat(_analysis) # type: pd.DataFrame print(analysis_df) return analysis_df
################################### STRATEGY_CONFIG = { "topk": 50, "n_drop": 5, } BACKTEST_CONFIG = { "verbose": False, "limit_threshold": 0.095, "account": 100000000, "benchmark": BENCHMARK, "deal_price": "close", "open_cost": 0.0005, "close_cost": 0.0015, "min_cost": 5, } # use default strategy # custom Strategy, refer to: TODO: Strategy API url strategy = TopkDropoutStrategy(**STRATEGY_CONFIG) report_normal, positions_normal = normal_backtest(pred_score, strategy=strategy, **BACKTEST_CONFIG) ################################### # analyze # If need a more detailed analysis, refer to: examples/train_and_bakctest.ipynb ################################### analysis = dict() analysis["excess_return_without_cost"] = risk_analysis(report_normal["return"] - report_normal["bench"]) analysis["excess_return_with_cost"] = risk_analysis(report_normal["return"] - report_normal["bench"] - report_normal["cost"]) analysis_df = pd.concat(analysis) # type: pd.DataFrame print(analysis_df)
################################### STRATEGY_CONFIG = { "topk": 50, "n_drop": 5, } BACKTEST_CONFIG = { "verbose": False, "limit_threshold": 0.095, "account": 100000000, "benchmark": BENCHMARK, "deal_price": "close", "open_cost": 0.0005, "close_cost": 0.0015, "min_cost": 5, } # use default strategy # custom Strategy, refer to: TODO: Strategy API url strategy = TopkDropoutStrategy(**STRATEGY_CONFIG) report_normal, positions_normal = normal_backtest(pred_score, strategy=strategy, **BACKTEST_CONFIG) ################################### # analyze # If need a more detailed analysis, refer to: examples/train_and_bakctest.ipynb ################################### analysis = dict() analysis["sub_bench"] = risk_analysis(report_normal["return"] - report_normal["bench"]) analysis["sub_cost"] = risk_analysis(report_normal["return"] - report_normal["bench"] - report_normal["cost"]) analysis_df = pd.concat(analysis) # type: pd.DataFrame print(analysis_df)