Skip to content
All library documents

Qlib TCN Workflow for CSI 300 Stock Ranking and Backtesting

Code Qlib

Summary

This Qlib configuration defines a temporal convolutional network workflow for ranking CSI 300 stocks. It uses Alpha360 features, robust feature normalization, missing-value filling, and cross-sectional rank normalization of labels. The prediction target is based on the relative movement of closing prices over adjacent future days. Data is divided into training, validation, and test periods spanning 2008 through 2020, with model fitting limited to the training period. The workflow specifies a five-layer TCN trained with mean squared error and Adam, then evaluates signals and simulates a top-50 portfolio that can replace up to five holdings at a time. The backtest uses the CSI 300 benchmark, closing prices, transaction costs, and a price-limit threshold. These settings describe an experiment, not evidence of profitability: the document supplies no performance results, and its assumptions, data quality, costs, and potential look-ahead or survivorship issues would need independent review.

Key ideas

  • The workflow trains a temporal convolutional network on Alpha360 features for CSI 300 stocks.
  • Feature normalization and label ranking are applied through separate data processing steps.
  • The target is defined from closing-price relationships across adjacent future days.
  • Portfolio simulation ranks signals, holds up to 50 stocks, and allows five replacements at a time.
  • The configuration specifies fees and price limits but provides no evidence of backtest performance.

Tags

Full text
# workflow_config_tcn_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: TCN
        module_path: qlib.contrib.model.pytorch_tcn
        kwargs:
            d_feat: 6
            num_layers: 5
            n_chans: 128
            kernel_size: 3
            dropout: 0.5
            n_epochs: 200
            lr: 1e-3
            early_stop: 20
            batch_size: 2000
            metric: loss
            loss: mse
            optimizer: adam
            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.