Qlib-巨人級的AI量化投資平台
完成条件
快速入门
QlibRL 提供了一个单资产订单执行任务的实现示例,下面是使用 QlibRL 进行训练的配置文件示例。
YAML
simulator:
# 每一步包含 30 分钟
time_per_step: 30
# 交易量的上限,应为 null 或一个 0 到 1 之间的浮点数。
# 如果是浮点数,表示上限是市场交易量的百分比
vol_limit: null
env:
# 并发环境工作者
concurrency: 1
# dummy、subproc 或 shmem。对应于 `tianshou 中的 parallelism <https://tianshou.readthedocs.io/en/master/api/tianshou.env.html#vectorenv>`_。
parallel_mode: dummy
action_interpreter:
class: CategoricalActionInterpreter
kwargs:
# 候选行动,可以是一个长度为 L 的列表:[a_1, a_2,..., a_L],
# 或一个整数 n,在这种情况下会自动生成一个长度为 n+1 的列表,
# 即 [0, 1/n, 2/n,..., n/n]。
values: 14
# 总步数(上限估计)
max_step: 8
module_path: qlib.rl.order_execution.interpreter
state_interpreter:
class: FullHistoryStateInterpreter
kwargs:
# 数据维度
data_dim: 6
# 等于总记录数。例如,在 SAOE 每分钟模式下,data_ticks 是以分钟为单位的一天时长。
data_ticks: 240
# 总步数(上限估计)。例如,390 分钟 / 30 分钟/步 = 13 步。
max_step: 8
# 已处理数据的提供者。
processed_data_provider:
class: PickleProcessedDataProvider
module_path: qlib.rl.data.pickle_styled
kwargs:
data_dir: ./data/pickle_dataframe/feature
module_path: qlib.rl.order_execution.interpreter
reward:
class: PAPenaltyReward
kwargs:
# 短时间内大交易量的惩罚。
penalty: 100.0
module_path: qlib.rl.order_execution.reward
data:
source:
order_dir: ./data/training_order_split
data_dir: ./data/pickle_dataframe/backtest
# 时间索引数量
total_time: 240
# 开始时间索引
default_start_time: 0
# 结束时间索引
default_end_time: 240
proc_data_dim: 6
num_workers: 0
queue_size: 20
network:
class: Recurrent
module_path: qlib.rl.order_execution.network
policy:
class: PPO
kwargs:
lr: 0.0001
module_path: qlib.rl.order_execution.policy
runtime:
seed: 42
use_cuda: false
trainer:
max_epoch: 2
# 每个训练迭代中收集的 episode 数量
repeat_per_collect: 5
earlystop_patience: 2
# 训练时每次收集的 episode 数量
episode_per_collect: 20
batch_size: 16
# 每 n 个迭代执行一次验证
val_every_n_epoch: 1
checkpoint_path: ./checkpoints
checkpoint_every_n_iters: 1
回测的配置文件如下:
YAML
order_file: ./data/backtest_orders.csv
start_time: "9:45"
end_time: "14:44"
qlib:
provider_uri_1min: ./data/bin
feature_root_dir: ./data/pickle
# 由今天信息生成的特征
feature_columns_today: [
"$open", "$high", "$low", "$close", "$vwap", "$volume",
]
# 由昨天信息生成的特征
feature_columns_yesterday: [
"$open_v1", "$high_v1", "$low_v1", "$close_v1", "$vwap_v1", "$volume_v1",
]
exchange:
# 买卖股票限制的表达式
limit_threshold: ['$close == 0', '$close == 0']
# 买卖成交价格
deal_price: ["If($close == 0, $vwap, $close)", "If($close == 0, $vwap, $close)"]
volume_threshold:
# 交易量限制适用于买卖双方,"cum" 表示这是一个随时间累积的值
all: ["cum", "0.2 * DayCumsum($volume, '9:45', '14:44')"]
# 买入的交易量限制
buy: ["current", "$close"]
# 卖出的交易量限制,"current" 表示这是一个实时值,不会随时间累积
sell: ["current", "$close"]
strategies:
30min:
class: TWAPStrategy
module_path: qlib.contrib.strategy.rule_strategy
kwargs: {}
1day:
class: SAOEIntStrategy
module_path: qlib.rl.order_execution.strategy
kwargs:
state_interpreter:
class: FullHistoryStateInterpreter
module_path: qlib.rl.order_execution.interpreter
kwargs:
max_step: 8
data_ticks: 240
data_dim: 6
processed_data_provider:
class: PickleProcessedDataProvider
module_path: qlib.rl.data.pickle_styled
kwargs:
data_dir: ./data/pickle_dataframe/feature
action_interpreter:
class: CategoricalActionInterpreter
module_path: qlib.rl.order_execution.interpreter
kwargs:
values: 14
max_step: 8
network:
class: Recurrent
module_path: qlib.rl.order_execution.network
kwargs: {}
policy:
class: PPO
module_path: qlib.rl.order_execution.policy
kwargs:
lr: 1.0e-4
# 本地到最新模型的路径。模型在训练期间生成,因此如果要使用训练好的策略运行回测,请先运行训练。
# 您也可以删除此参数文件,以使用随机初始化的策略运行回测。
weight_file: ./checkpoints/latest.pth
# 并发环境工作者
concurrency: 5
有了上述配置文件,您可以使用以下命令开始训练智能体:
python -m qlib.rl.contrib.train_onpolicy.py --config_path train_config.yml
训练完成后,您可以使用以下命令进行回测:
python -m qlib.rl.contrib.backtest.py --config_path backtest_config.yml
在这种情况下,SingleAssetOrderExecution
和 SingleAssetOrderExecutionSimple
是仿真器的示例,qlib.rl.order_execution.interpreter.FullHistoryStateInterpreter
和 qlib.rl.order_execution.interpreter.CategoricalActionInterpreter
是解释器的示例,qlib.rl.order_execution.policy.PPO
是策略的示例,而 qlib.rl.order_execution.reward.PAPenaltyReward
是奖励的示例。对于单资产订单执行任务,如果开发者已经定义了他们的仿真器/解释器/奖励函数/策略,他们只需修改配置文件中相应的设置,即可启动训练和回测流程。有关此示例的详细信息可以在此处找到。
未来,我们将为更多不同的场景(例如基于强化学习的投资组合构建)提供更多示例。
最后修改: 2025年08月4日 星期一 12:13