Skip to content
All library documents

Qlib Transformer Workflow for CSI 300 Alpha158 Signals

Code Qlib

Summary

This configuration specifies a Qlib time-series Transformer workflow for predicting Chinese CSI 300 stock returns from Alpha158 features. It defines a Chinese market data source, uses the CSI 300 as the instrument universe and SH000300 as the benchmark, and divides the data into training, validation, and test periods. The dataset uses 20-step sequences and labels based on the relative change between two future close-price references. Feature processing filters a specified subset of columns, applies robust z-score normalization with outlier clipping, and fills missing values; label processing drops missing labels and applies cross-sectional rank normalization.

For portfolio analysis, the configuration selects a top-k dropout strategy that holds 50 names and replaces five, then backtests at close prices with specified transaction costs and a limit threshold. It also requests signal analysis and portfolio analysis records. These are experiment settings, not reported findings: the document includes no model accuracy, trading returns, or comparison against alternatives. The chosen universe, dates, features, execution assumptions, and turnover rules constrain any conclusions drawn from a run.

Key ideas

  • The workflow trains a time-series Transformer on Alpha158 features for CSI 300 constituents.
  • It uses a 20-step sequence and a future close-price return expression as its label.
  • Feature processing filters columns, applies robust normalization, and fills missing values.
  • The portfolio configuration holds 50 names and drops five under a top-k dropout strategy.
  • Specified transaction costs and close-price execution shape the backtest assumptions, but no results are provided.

Tags

Full text
# workflow_config_transformer_Alpha158.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: FilterCol
          kwargs:
              fields_group: feature
              col_list: ["RESI5", "WVMA5", "RSQR5", "KLEN", "RSQR10", "CORR5", "CORD5", "CORR10", 
                            "ROC60", "RESI10", "VSTD5", "RSQR60", "CORR60", "WVMA60", "STD5", 
                            "RSQR20", "CORD60", "CORD10", "CORR20", "KLOW"
                        ]
        - 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: TransformerModel
        module_path: qlib.contrib.model.pytorch_transformer_ts
        kwargs:
            seed: 0
            n_jobs: 20
    dataset:
        class: TSDatasetH
        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]
            step_len: 20
    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.