Skip to content
All library documents

Qlib ADARNN Configuration for CSI 300 Stock Prediction

Code Qlib

Summary

This configuration specifies a Qlib workflow for training an ADARNN model on CSI 300 equities in the Chinese market. It uses Alpha360 features, robust z-score normalization with outlier clipping, feature filling for missing values, and cross-sectional rank normalization for labels. The target is a forward close-price return defined using the next two reference points. Data is divided into training, validation, and test periods, followed by signal analysis and portfolio evaluation.

For portfolio analysis, the setup uses a top-k dropout strategy that holds 50 names and drops five, with the CSI 300 index as benchmark. The backtest specifies close-price dealing, transaction costs, a minimum fee, and a limit threshold. The neural model uses six input features, two layers, a hidden size of 64, mean squared error loss, and early stopping. This is an experiment recipe rather than a report: it includes no prediction or portfolio results, and its outcomes depend on the data, implementation, and execution assumptions. Its specified historical intervals also do not establish performance beyond the test period.

Key ideas

  • The workflow trains ADARNN on Alpha360 features for CSI 300 instruments.
  • Features are robustly normalized and missing values are filled, while labels receive cross-sectional rank normalization.
  • The target represents a forward close-price return, and the data is split into training, validation, and test segments.
  • Portfolio evaluation uses a top-k dropout strategy with a CSI 300 benchmark and explicit transaction-cost assumptions.
  • The configuration describes an experiment but reports no model accuracy or investment performance.

Tags

Full text
# workflow_config_adarnn_Alpha360.yaml


```yaml
qlib_init:
    provider_uri: "~/.qlib/qlib_data/cn_data"
    region: cn
market: &market csi300
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:
        - class: RobustZScoreNorm
          kwargs:
              fields_group: feature
              clip_outlier: true
        - class: Fillna
          kwargs:
              fields_group: feature
    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
        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: ADARNN
        module_path: qlib.contrib.model.pytorch_adarnn
        kwargs:
            d_feat: 6
            hidden_size: 64
            num_layers: 2
            dropout: 0.0
            n_epochs: 200
            lr: 1e-3
            early_stop: 20
            batch_size: 800
            metric: loss
            loss: mse
            GPU: 0
    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: 
            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.