Qlib Alpha158 CSI 500 Neural Network Backtest Configuration
Summary
This configuration specifies a Qlib workflow that trains a PyTorch deep neural network on Alpha158 features for the CSI 500 universe. The data spans 2008 through mid-2020, with training through 2014, validation during 2015–2016, and testing from 2017 onward. Feature processing drops VWAP0 and handles missing values; labels are cleaned and cross-sectionally normalized. The model uses mean squared error, Adam, and configured regularization and training parameters.
Portfolio evaluation applies a top-k dropout strategy that holds 50 names and replaces up to five positions at a time. The backtest uses the CSI 500 index as benchmark, closing prices for trades, a limit threshold, and specified transaction costs. This is an experimental setup rather than a report of findings: it contains no signal performance, portfolio returns, or comparison results. The configuration alone also does not establish the quality of the data, guard against all forms of bias, or describe how the predicted target is defined.
Key ideas
- The workflow trains a neural network on Alpha158 features for the CSI 500 stock universe.
- Training, validation, and test periods are separated across the configured historical dates.
- The portfolio strategy holds 50 stocks and rotates up to five positions at a time.
- Backtest assumptions include benchmark, execution price, transaction costs, and a price limit threshold.
- The configuration specifies an experiment but provides no results or details of the prediction target.
Tags
Full text
# workflow_config_mlp_Alpha158_csi500.yaml
```yaml
qlib_init:
provider_uri: "~/.qlib/qlib_data/cn_data"
region: cn
market: &market csi500
benchmark: &benchmark SH000905
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: [
{
"class" : "DropCol",
"kwargs":{"col_list": ["VWAP0"]}
},
{
"class" : "CSZFillna",
"kwargs":{"fields_group": "feature"}
}
]
learn_processors: [
{
"class" : "DropCol",
"kwargs":{"col_list": ["VWAP0"]}
},
{
"class" : "DropnaProcessor",
"kwargs":{"fields_group": "feature"}
},
"DropnaLabel",
{
"class": "CSZScoreNorm",
"kwargs": {"fields_group": "label"}
}
]
process_type: "independent"
port_analysis_config: &port_analysis_config
strategy:
class: TopkDropoutStrategy
module_path: qlib.contrib.strategy
kwargs:
signal: <PRED>
topk: 50
n_drop: 5
backtest:
start_time: 2017-01-01
end_time: 2020-08-01
account: 100000000
benchmark: *benchmark
exchange_kwargs:
limit_threshold: 0.095
deal_price: close
open_cost: 0.0005
close_cost: 0.0015
min_cost: 5
task:
model:
class: DNNModelPytorch
module_path: qlib.contrib.model.pytorch_nn
kwargs:
loss: mse
lr: 0.002
optimizer: adam
max_steps: 8000
batch_size: 8192
GPU: 0
weight_decay: 0.0002
pt_model_kwargs:
input_dim: 157
dataset:
class: DatasetH
module_path: qlib.data.dataset
kwargs:
handler:
class: Alpha158
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:
model: <MODEL>
dataset: <DATASET>
- 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
```Shown in full with attribution under the source's licence. Licence: MIT
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.