Qlib LightGBM Configuration with Daily and Intraday Features
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.