Qlib-巨人級的AI量化投資平台
QlibRL 的框架
QlibRL 包含一套完整的组件,涵盖了强化学习管道的整个生命周期,包括构建市场模拟器、塑造状态和行动、训练策略以及在模拟环境中回测策略。
QlibRL 主要是在 Tianshou 和 Gym 框架的支持下实现的。QlibRL 的高级结构如下所示:
在这里,我们简要介绍图中每个组件。
EnvWrapper
EnvWrapper
是模拟环境的完整封装。它接收来自外部(策略/agent)的行动,模拟市场的变化,然后返回奖励和更新后的状态,从而形成一个交互循环。
在 QlibRL 中,EnvWrapper
是 gym.Env
的子类,因此它实现了 gym.Env
的所有必要接口。任何接受 gym.Env
的类或管道也应该接受 EnvWrapper
。开发者无需实现自己的 EnvWrapper
来构建自己的环境。相反,他们只需要实现 EnvWrapper
的 4 个组件:
-
模拟器 (Simulator)
-
模拟器是负责环境模拟的核心组件。开发者可以以他们喜欢的任何方式在
Simulator
中实现与环境模拟直接相关的所有逻辑。在 QlibRL 中,已经有两个针对单资产交易的Simulator
实现:-
SingleAssetOrderExecution
:基于 Qlib 的回测工具包构建,因此考虑了许多实际交易细节,但速度较慢。 -
SimpleSingleAssetOrderExecution
:基于简化的交易模拟器构建,忽略了许多细节(例如交易限制、四舍五入)但速度很快。
-
-
-
状态解释器 (State interpreter)
-
状态解释器负责将原始格式(由模拟器提供)的状态“解释”为策略可以理解的格式。例如,将非结构化原始特征转换为数值张量。
-
-
行动解释器 (Action interpreter)
-
行动解释器与状态解释器类似。但它解释的是策略生成的行动,将其从策略提供的格式解释为模拟器可以接受的格式。
-
-
奖励函数 (Reward function)
-
奖励函数在策略每次采取行动后,向策略返回一个数值奖励。
-
EnvWrapper
将有机地组织这些组件。这种分解方式可以更好地提高开发的灵活性。例如,如果开发者想在同一个环境中训练多种类型的策略,他们只需要设计一个模拟器,并为不同类型的策略设计不同的状态解释器/行动解释器/奖励函数。
QlibRL 为所有这 4 个组件都定义了良好基础类。开发者需要做的就是通过继承这些基础类并实现基础类要求的所有接口来定义他们自己的组件。上述基础组件的 API 可以在此处找到。
策略 (Policy)
QlibRL 直接使用 Tianshou 的策略。开发者可以使用 Tianshou 现成的策略,或者通过继承 Tianshou 的策略来实现自己的策略。
训练容器 (Training Vessel) & 训练器 (Trainer)
顾名思义,训练容器和训练器是训练中使用的辅助类。训练容器是一个包含模拟器/解释器/奖励函数/策略的“容器”,它控制训练中与算法相关的部分。相应地,训练器负责控制训练的运行时部分。
您可能已经注意到,训练容器本身包含构建 EnvWrapper
所需的所有组件,而不是直接包含 EnvWrapper
的实例。这使得训练容器可以在必要时(例如,在并行训练下)动态创建 EnvWrapper
的副本。
有了训练容器,训练器最终可以通过简单、类似 Scikit-learn 的接口(即 trainer.fit()
)启动训练管道。
Trainer
和 TrainingVessel
的 API 可以在此处找到。
强化学习模块采用松散耦合的方式设计。目前,强化学习示例与具体的业务逻辑集成在一起。但强化学习的核心部分比您看到的要简单得多。为了展示强化学习的简单核心,我们创建了一个专门的笔记本,用于没有业务损失的强化学习。