Skip to content
All library documents

Qlib LightGBM Configuration with Daily and Intraday Features

Code Qlib

Summary

This configuration describes a Qlib experiment for CSI 300 equities using a LightGBM regression model. The dataset combines daily features with intraday one-minute data resampled to a daily frequency through a custom handler. The configured label frequency is daily, and the date ranges divide observations into training, validation, and test segments. Model settings specify mean squared error loss and tree, sampling, regularization, and threading parameters.

For portfolio analysis, the configuration uses a top-k dropout strategy that holds 50 names and replaces five, then evaluates a backtest against the CSI 300 benchmark from 2017 through the specified end date. It sets an account value, closing-price execution, transaction costs, minimum fees, and a price-limit threshold. The file is an experiment setup rather than a report of findings: it supplies no prediction metrics, returns, or risk results. Custom data handlers and local data paths are required, and the configuration alone does not establish that the features avoid look-ahead bias or that the backtest reflects live execution.

Key ideas

  • The experiment trains a LightGBM regression model on daily labels with daily and resampled intraday features.
  • The dataset defines separate training, validation, and test date segments for CSI 300 instruments.
  • Portfolio analysis uses a top-k dropout strategy with 50 holdings and five replacements.
  • The backtest specifies benchmark, closing-price execution, trading costs, and a price-limit threshold.
  • The configuration reports no predictive or portfolio performance and does not by itself validate data timing or live tradability.

Tags

Full text
# workflow_config_lightgbm_multi_freq.yaml


```yaml
qlib_init:
    provider_uri:
        day: "~/.qlib/qlib_data/cn_data"
        1min: "~/.qlib/qlib_data/cn_data_1min"
    region: cn
    dataset_cache: null
    maxtasksperchild: null
market: &market csi300
benchmark: &benchmark SH000300
data_handler_config: &data_handler_config
    start_time: 2008-01-01
    # 1min closing time is 15:00:00
    end_time: "2020-08-01 15:00:00"
    fit_start_time: 2008-01-01
    fit_end_time: 2014-12-31
    instruments: *market
    freq:
        label: day
        feature_15min: 1min
        feature_day: day
    # with label as reference
    inst_processors:
        feature_15min:
            - class: ResampleNProcessor
              module_path: features_resample_N.py
              trusted: true
              kwargs:
                  target_frq: 1d

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: LGBModel
        module_path: qlib.contrib.model.gbdt
        kwargs:
            loss: mse
            colsample_bytree: 0.8879
            learning_rate: 0.2
            subsample: 0.8789
            lambda_l1: 205.6999
            lambda_l2: 580.9768
            max_depth: 8
            num_leaves: 210
            num_threads: 20
    dataset:
        class: DatasetH
        module_path: qlib.data.dataset
        kwargs:
            handler:
                class: Avg15minHandler
                module_path: multi_freq_handler.py
                trusted: true
                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.