Skip to content
All library documents

Qlib HIST Configuration for CSI 300 Alpha360 Backtesting

Code Qlib

Summary

This configuration specifies a Qlib workflow for training the HIST model on Alpha360 features for CSI 300 stocks and evaluating its signals in a portfolio backtest. The data handler normalizes features, fills missing feature values, drops rows without labels, and cross-sectionally rank-normalizes labels. Its label measures a close-to-close return over the next two trading sessions. The configuration separates training, validation, and test periods and uses a historical Chinese equity dataset.

For portfolio evaluation, it selects the top 50 ranked names and permits five holdings to be replaced at a time, with the CSI 300 index as benchmark. The backtest uses closing prices and specifies transaction costs and a price-limit threshold. Records include signal analysis and portfolio analysis. These settings describe an experiment, not its outcome: the document reports no performance, comparison, or robustness checks. Results would depend on the data, model implementation, and assumptions in the backtest, including execution at the close and the specified costs.

Key ideas

  • The workflow trains Qlib's HIST model on Alpha360 features for CSI 300 constituents.
  • Feature values are robustly normalized and missing feature values are filled.
  • The label captures a forward close-to-close return across two sessions.
  • The portfolio strategy selects 50 stocks and replaces up to five holdings at a time.
  • The configuration specifies a benchmark, closing-price execution, transaction costs, and price limits.
  • No empirical performance results or robustness analysis are provided.

Tags

Full text
# workflow_config_hist_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: HIST
        module_path: qlib.contrib.model.pytorch_hist
        kwargs:
            d_feat: 6
            hidden_size: 64
            num_layers: 2
            dropout: 0
            n_epochs: 200
            lr: 1e-4
            early_stop: 20
            metric: ic
            loss: mse
            base_model: LSTM
            model_path: "benchmarks/LSTM/model_lstm_csi300.pkl"
            stock2concept: "benchmarks/HIST/qlib_csi300_stock2concept.npy"
            stock_index: "benchmarks/HIST/qlib_csi300_stock_index.json"
            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.