Skip to content
All library documents

Qlib ALSTM Configuration for CSI 300 Stock Ranking and Portfolio Backtesting

Code Qlib

Summary

This configuration specifies a Qlib experiment that trains an ALSTM model on China’s CSI 300 universe and evaluates stock selections in a portfolio backtest. The data handler uses Alpha360 features, robust feature normalization, missing-value filling, and cross-sectional rank normalization for labels. The prediction target is a short-horizon close-to-close return. Training, validation, and test periods are separated, with the model fitted on historical data before the later test period.

Portfolio construction uses a top-k dropout strategy: it holds up to 50 names and replaces a limited number of positions as rankings change. The backtest includes a benchmark, transaction costs, a minimum fee, closing-price execution, and a market limit threshold. These settings show how model training and portfolio evaluation can be assembled, but the document contains no reported performance or validation results. The stated time ranges and execution assumptions constrain interpretation; realistic conclusions would depend on data quality, point-in-time availability, and whether the modeled costs and fills match actual trading.

Key ideas

  • The setup applies an ALSTM model to rank CSI 300 stocks using Alpha360 features.
  • Feature normalization and cross-sectional label ranking are included in data preprocessing.
  • Training and validation periods precede a distinct test interval.
  • The portfolio strategy holds a ranked set of stocks and periodically drops and replaces positions.
  • Backtest settings account for benchmark comparison, commissions, minimum fees, and price limits, but no results are provided.

Tags

Full text
# workflow_config_alstm_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: ALSTM
        module_path: qlib.contrib.model.pytorch_alstm
        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
            rnn_type: GRU
    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.