Skip to content
All library documents

Qlib TRA Configuration for Alpha158 CSI 300 Forecasting

Code Qlib

Summary

This configuration specifies a Qlib experiment using Alpha158 features for CSI 300 equities, with the Shanghai Composite 300 index as benchmark. It divides the history into training, validation, and test periods, applies robust feature normalization and missing-value filling, and ranks labels cross-sectionally. The target is a forward close-to-close return over the next daily interval, as encoded by the configured shifted prices.

The model is a recurrent TRA setup using an LSTM, three latent states, and a 60-step input sequence. It is trained with a 2008–2014 training period, validated on 2015–2016, and evaluated on 2017–2020 data. Portfolio analysis uses a top-k dropout strategy that holds up to 50 names and drops five, with close-price execution and specified transaction costs and price-limit assumptions. This is an experiment recipe, not a report of findings: no predictive performance, portfolio returns, or robustness results are included, and the outcome depends on data and implementation details.

Key ideas

  • The experiment uses Alpha158 features for CSI 300 stocks and the CSI 300 index as its benchmark.
  • Features are robustly normalized and missing feature values are filled before modeling.
  • A recurrent LSTM TRA model processes sequences of 60 observations and learns three states.
  • The portfolio configuration selects up to 50 stocks and can replace five holdings at a time.
  • The file specifies a backtest setup but reports no model or portfolio results.

Tags

Full text
# workflow_config_tra_Alpha158_full.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: CSRankNorm
      kwargs:
        fields_group: label
  label: ["Ref($close, -2) / Ref($close, -1) - 1"]

num_states: &num_states 3

memory_mode: &memory_mode sample

tra_config: &tra_config
  num_states: *num_states
  rnn_arch: LSTM
  hidden_size: 32
  num_layers: 1
  dropout: 0.0
  tau: 1.0
  src_info: LR_TPE

model_config: &model_config
  input_size: 158
  hidden_size: 256
  num_layers: 2
  rnn_arch: LSTM
  use_attn: True
  dropout: 0.2

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: TRAModel
    module_path: qlib.contrib.model.pytorch_tra
    kwargs:
      tra_config: *tra_config
      model_config: *model_config
      model_type: RNN
      lr: 1e-3
      n_epochs: 100
      max_steps_per_epoch:
      early_stop: 20
      logdir: output/Alpha158_full
      seed: 0
      lamb: 1.0
      rho: 0.99
      alpha: 0.5
      transport_method: router
      memory_mode: *memory_mode
      eval_train: False
      eval_test: True
      pretrain: True
      init_state:
      freeze_model: False
      freeze_predictors: False
  dataset:
    class: MTSDatasetH
    module_path: qlib.contrib.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]
      seq_len: 60
      input_size:
      num_states: *num_states
      batch_size: 1024
      n_samples:
      memory_mode: *memory_mode
      drop_last: True
  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.