QlibRL 框架
QlibRL 包含一套完整的组件,覆盖了强化学习(RL)流程的整个生命周期,包括构建市场模拟器、设计状态与动作、训练策略(策略)以及在模拟环境中回测策略。
QlibRL 基本上基于 Tianshou 和 Gym 框架实现。其高层结构如下所示:

下面我们将简要介绍图中的每个组件。
EnvWrapper
EnvWrapper 是模拟环境的完整封装。它接收来自外部(策略/策略/智能体)的动作,模拟市场变化,然后返回奖励和更新后的状态,从而形成一个交互循环。
在 QlibRL 中,EnvWrapper 是 gym.Env 的子类,因此实现了 gym.Env 的所有必要接口。任何接受 gym.Env 的类或流程也应能接受 EnvWrapper。开发者无需自行实现 EnvWrapper 来构建自己的环境,而只需实现 EnvWrapper 的四个组成部分:
- 模拟器
模拟器是负责环境模拟的核心组件。开发者可以以任何方式在模拟器中实现所有与环境模拟直接相关的逻辑。在 QlibRL 中,已提供了两种针对单资产交易的模拟器实现:1)
SingleAssetOrderExecution
,基于 Qlib 的回测工具包构建,考虑了大量实际交易细节,但速度较慢;2)SimpleSingleAssetOrderExecution
,基于简化交易模拟器构建,忽略了许多细节(如交易限制、四舍五入),但速度非常快。
- 状态解释器
状态解释器负责将模拟器提供的原始格式状态“转换”为策略能够理解的格式。例如,将非结构化的原始特征转换为数值张量。
- 动作解释器
动作解释器与状态解释器类似,但其作用对象是动作:它将策略生成的动作从策略的格式转换为模拟器可接受的格式。
- 奖励函数
奖励函数在策略每次执行动作后,返回一个数值奖励。
EnvWrapper 将有机地组织这些组件。这种分解方式提升了开发的灵活性。例如,如果开发者希望在同一环境中训练多种类型的策略,只需设计一个模拟器,并为不同类型的策略设计不同的状态解释器、动作解释器和奖励函数即可。
QlibRL 为上述四个组件都提供了定义良好的基类。开发者只需继承这些基类,并实现基类要求的所有接口即可定义自己的组件。上述基组件的 API 可在此处查看。
策略
QlibRL 直接使用 Tianshou 的策略。开发者可以直接使用 Tianshou 提供的现成策略,或通过继承 Tianshou 的策略来实现自己的策略。
训练容器与训练器
根据其名称,训练船和训练器是用于训练的辅助类。训练船是一艘包含模拟器/解释器/奖励函数/策略的船舶,负责控制训练中与算法相关的部分;相应地,训练器负责控制训练的运行时部分。
正如你可能已经注意到的,训练船本身包含了构建 EnvWrapper 所需的所有组件,而不是直接持有 EnvWrapper 的实例。这使得训练船能够在必要时动态创建 EnvWrapper 的副本(例如,在并行训练下)。
通过训练船,训练器可以通过简单、类似 Scikit-learn 的接口(即 trainer.fit()
)启动训练流程。
Trainer 和 TrainingVessel 的 API 可在 此处 查看。
RL 模块采用松耦合的方式设计。目前,RL 示例已与具体的业务逻辑集成,但 RL 的核心部分比你所见的要简单得多。为了展示 RL 的简洁核心,我们专门创建了 一个不含业务损失的 RL 笔记本。