金融模型代理

🤖 自动化量化交易与迭代模型演进

📖 背景

在量化金融领域,因子发现和模型开发在推动业绩方面发挥着至关重要的作用。虽然通常会给予新金融因子发现大量关注,但利用这些因子的**模型**同样重要。量化策略的有效性不仅依赖于所使用的因子,还依赖于这些因子如何有效地整合到稳健的预测模型中。

然而,开发和优化这些模型的过程可能是劳动密集型和复杂的,需要不断的改进和适应不断变化的市场条件。这就是**金融模型代理**发挥作用的地方。

🎥 演示

🌟 介绍

在这个场景中,我们的自动化系统提出假设,构建模型,实施代码,进行回测,并在一个持续的迭代过程中利用反馈。

目标是在Qlib库中自动优化性能指标,最终通过自主研究和开发发现最有效的代码。

以下是步骤的增强大纲:

步骤 1 : 假设生成 🔍

  • 基于之前实验分析和领域专业知识生成并提出初步假设,附上充分的推理和金融依据。

步骤2:模型创建 ✨

  • 将假设转化为任务。

  • 开发、定义并实施一个量化模型,包括其名称、描述和公式。

步骤3:模型实施 👨‍💻

  • 根据详细描述实现模型代码。

  • 像开发者一样迭代演进模型,确保准确性和效率。

步骤 4 : 使用 Qlib 回测 📉

  • 使用新开发的模型和从Qlib中的Alpha158提取的20个因子进行回测。

  • 评估模型的有效性和性能。

数据集

模型

因子

数据拆分

CSI300

RDAgent-dev

20个因素 (Alpha158)

训练

2008-01-01 至 2014-12-31

验证

2015-01-01 至 2016-12-31

测试

2017-01-01 至 2020-08-01

步骤 5 : 反馈分析 🔍

  • 分析回测结果以评估性能。

  • 结合反馈来优化假设并改进模型。

步骤 6 : 假设优化 ♻️

  • 根据回测反馈优化假设。

  • 重复该过程以持续改进模型。

⚡ 快速开始

请参考 安装与配置 中的安装部分以准备您的系统依赖。

您可以通过运行以下命令尝试我们的演示:

  • 🐍 创建一个 Conda 环境

    • 创建一个新的conda环境,使用Python(3.10和3.11在我们的CI中经过良好测试):

      conda create -n rdagent python=3.10
      
    • 激活环境:

      conda activate rdagent
      
  • 📦 安装RDAgent

    • 您可以从PyPI安装RDAgent包:

      pip install rdagent
      
  • 🚀 运行应用程序

    • 您可以使用以下命令直接运行应用程序:

      rdagent fin_model
      

🛠️ 模块的使用

  • 环境配置

可以在`.env`文件中设置以下环境变量,以自定义应用程序的行为:

pydantic settings rdagent.app.qlib_rd_loop.conf.ModelBasePropSetting

Show JSON schema
{
   "title": "ModelBasePropSetting",
   "type": "object",
   "properties": {
      "scen": {
         "default": "rdagent.scenarios.qlib.experiment.model_experiment.QlibModelScenario",
         "title": "Scen",
         "type": "string"
      },
      "knowledge_base": {
         "default": "",
         "title": "Knowledge Base",
         "type": "string"
      },
      "knowledge_base_path": {
         "default": "",
         "title": "Knowledge Base Path",
         "type": "string"
      },
      "hypothesis_gen": {
         "default": "rdagent.scenarios.qlib.proposal.model_proposal.QlibModelHypothesisGen",
         "title": "Hypothesis Gen",
         "type": "string"
      },
      "hypothesis2experiment": {
         "default": "rdagent.scenarios.qlib.proposal.model_proposal.QlibModelHypothesis2Experiment",
         "title": "Hypothesis2Experiment",
         "type": "string"
      },
      "coder": {
         "default": "rdagent.scenarios.qlib.developer.model_coder.QlibModelCoSTEER",
         "title": "Coder",
         "type": "string"
      },
      "runner": {
         "default": "rdagent.scenarios.qlib.developer.model_runner.QlibModelRunner",
         "title": "Runner",
         "type": "string"
      },
      "summarizer": {
         "default": "rdagent.scenarios.qlib.developer.feedback.QlibModelExperiment2Feedback",
         "title": "Summarizer",
         "type": "string"
      },
      "evolving_n": {
         "default": 10,
         "title": "Evolving N",
         "type": "integer"
      }
   },
   "additionalProperties": false
}

配置:
  • env_prefix: str = QLIB_MODEL_

  • protected_namespaces: tuple = ()

field coder: str = 'rdagent.scenarios.qlib.developer.model_coder.QlibModelCoSTEER'

编码器类

field evolving_n: int = 10

进化次数

field hypothesis2experiment: str = 'rdagent.scenarios.qlib.proposal.model_proposal.QlibModelHypothesis2Experiment'

实验类的假设

field hypothesis_gen: str = 'rdagent.scenarios.qlib.proposal.model_proposal.QlibModelHypothesisGen'

假设生成类

field runner: str = 'rdagent.scenarios.qlib.developer.model_runner.QlibModelRunner'

运行器类

field scen: str = 'rdagent.scenarios.qlib.experiment.model_experiment.QlibModelScenario'

Qlib模型的场景类

field summarizer: str = 'rdagent.scenarios.qlib.developer.feedback.QlibModelExperiment2Feedback'

总结类

  • Qlib配置
    • config.yaml 文件位于 model_template 文件夹中,包含在Qlib中运行开发模型的相关配置。默认设置包括关键信息,如:
      • market: 指定市场,设置为 csi300

      • fields_group: 定义字段组,值为 feature

      • col_list: 使用的列列表,包括各种指标,如 RESI5WVMA5RSQR5 等。

      • start_time: 数据的开始日期,设置为 2008-01-01

      • end_time: 数据的结束日期,设置为 2020-08-01

      • fit_start_time: 拟合模型的开始日期,设置为 2008-01-01

      • fit_end_time: 拟合模型的结束日期,设置为 2014-12-31

    • 配置中使用的默认超参数如下:
      • n_epochs: 迭代次数,设置为 100

      • lr: 学习率,设置为 1e-3

      • early_stop: 提前停止标准,设置为 10

      • batch_size: 批量大小,设置为 2000

      • metric: 评估指标,设置为 loss

      • loss: 损失函数,设置为 mse

      • n_jobs: 并行作业的数量,设置为 20