Skip to content
All library documents

Qlib Alpha158 CSI 500 Neural Network Backtest Configuration

Code Qlib

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.