From 8318aebb06789e17df00491adf2a4e55d22e7556 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Sun, 7 Mar 2021 09:52:30 +0000 Subject: [PATCH] Add DoubleEnsemble --- ...rkflow_config_doubleensemble_Alpha360.yaml | 97 +++++++++++++++++++ exps/trading/baselines.py | 3 + 2 files changed, 100 insertions(+) create mode 100644 configs/qlib/workflow_config_doubleensemble_Alpha360.yaml diff --git a/configs/qlib/workflow_config_doubleensemble_Alpha360.yaml b/configs/qlib/workflow_config_doubleensemble_Alpha360.yaml new file mode 100644 index 0000000..8885a3d --- /dev/null +++ b/configs/qlib/workflow_config_doubleensemble_Alpha360.yaml @@ -0,0 +1,97 @@ +qlib_init: + provider_uri: "~/.qlib/qlib_data/cn_data" + region: cn +market: &market all +benchmark: &benchmark SH000300 +data_handler_config: &data_handler_config + start_time: 2008-01-01 + end_time: 2020-08-01 + fit_start_time: 2008-01-01 + fit_end_time: 2014-12-31 + instruments: *market + infer_processors: [] + learn_processors: + - class: DropnaLabel + - class: CSRankNorm + kwargs: + fields_group: label + label: ["Ref($close, -2) / Ref($close, -1) - 1"] +port_analysis_config: &port_analysis_config + strategy: + class: TopkDropoutStrategy + module_path: qlib.contrib.strategy.strategy + kwargs: + topk: 50 + n_drop: 5 + backtest: + verbose: False + limit_threshold: 0.095 + account: 100000000 + benchmark: *benchmark + deal_price: close + open_cost: 0.0005 + close_cost: 0.0015 + min_cost: 5 +task: + model: + class: DEnsembleModel + module_path: qlib.contrib.model.double_ensemble + kwargs: + base_model: "gbm" + loss: mse + num_models: 6 + enable_sr: True + enable_fs: True + alpha1: 1 + alpha2: 1 + bins_sr: 10 + bins_fs: 5 + decay: 0.5 + sample_ratios: + - 0.8 + - 0.7 + - 0.6 + - 0.5 + - 0.4 + sub_weights: + - 1 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + epochs: 136 + colsample_bytree: 0.8879 + learning_rate: 0.0421 + subsample: 0.8789 + lambda_l1: 205.6999 + lambda_l2: 580.9768 + max_depth: 8 + num_leaves: 210 + num_threads: 20 + verbosity: -1 + dataset: + class: DatasetH + module_path: qlib.data.dataset + kwargs: + handler: + class: Alpha360 + module_path: qlib.contrib.data.handler + kwargs: *data_handler_config + segments: + train: [2008-01-01, 2014-12-31] + valid: [2015-01-01, 2016-12-31] + test: [2017-01-01, 2020-08-01] + record: + - class: SignalRecord + module_path: qlib.workflow.record_temp + kwargs: {} + - class: SigAnaRecord + module_path: qlib.workflow.record_temp + kwargs: + ana_long_short: False + ann_scaler: 252 + - class: PortAnaRecord + module_path: qlib.workflow.record_temp + kwargs: + config: *port_analysis_config diff --git a/exps/trading/baselines.py b/exps/trading/baselines.py index b91d085..679aede 100644 --- a/exps/trading/baselines.py +++ b/exps/trading/baselines.py @@ -8,6 +8,7 @@ # python exps/trading/baselines.py --alg SFM # # python exps/trading/baselines.py --alg XGBoost # # python exps/trading/baselines.py --alg LightGBM # +# python exps/trading/baselines.py --alg DoubleE # ##################################################### import sys import argparse @@ -46,6 +47,8 @@ def retrieve_configs(): alg2names["LightGBM"] = "workflow_config_lightgbm_Alpha360.yaml" # State Frequency Memory (SFM): Stock Price Prediction via Discovering Multi-Frequency Trading Patterns, KDD-2017 alg2names["SFM"] = "workflow_config_sfm_Alpha360.yaml" + # DoubleEnsemble: A New Ensemble Method Based on Sample Reweighting and Feature Selection for Financial Data Analysis, https://arxiv.org/pdf/2010.01265.pdf + alg2names["DoubleE"] = "workflow_config_doubleensemble_Alpha360.yaml" # find the yaml paths alg2paths = OrderedDict()