告别手写代码:Trae + DolphinDB Skill,10 分钟造一个懂期货的投研 Agent

AI Agent 正逐渐从通用问答和代码生成,走向更加专业的业务场景。对于量化投研而言,Agent 的价值不仅在于生成策略代码,更在于能否理解投研人员的策略描述,并调用数据、计算和回测能力完成完整的研究流程。

为探索 Agent 在专业投研场景中的应用,我们基于 Trae,结合 DolphinX Skill、DolphinMind RAG 和系统提示词,搭建了一套 CTA 投研 Agent 工作流。该 Agent 可以根据用户输入的策略描述,自动完成指标计算、主力合约合成和策略回测,并将中间脚本与最终结果进行持久化。

本文将以这一实践为例,介绍如何从工作区、系统提示词、数据模型和任务工作流四个层面构建 CTA 投研 Agent,并展示其在简单策略和复杂截面 CTA 策略中的实际执行效果。

一、任务目标

本项目希望开发一套能够完成 CTA 因子信号计算与策略回测的 Agent 工作流,主要包括以下能力:

  • 多种策略类型:支持时序 CTA、截面 CTA 等多种期货策略类型。
  • 脚本持久化可复用:因子信号计算脚本、主力合约合成脚本、策略回测脚本、回测结果持久化可追溯。
  • 指标数据可复用:支持自动解析 Prompt 中对应因子/信号计算与主力合约逻辑,并复用已有因子/信号 + 主力合约合成规则,避免重复计算。
  • Prompt 描述简化:支持使用股指期货等模糊表述代替具体的标的池表述,并配置不同类型期货回测下的预设参数,如股指期货默认最后交易日前 1 天平仓,以简化整体策略描述。

这一设计的核心并不是让 Agent 简单地"写出一段回测代码",而是让 Agent 能够理解一套相对完整的 CTA 投研工作流,并在数据、代码和计算环境之间建立稳定的执行链路。

二、如何构建一个 CTA 投研 Agent?

目前 DolphinX 各 Skills + DolphinMind + 系统提示词(如 AGENTS.md/)这三板斧能够解决绝大部分 Agent 编写 DolphinDB 业务代码时遇到的问题。三者的设计理念如下所示:

  • DolphinX 各 Skills 能够回答 DolphinDB 有哪些功能函数模块,以及适用于特定场景的任务执行。
  • DolphinMind RAG 提供 RAG 文档检索功能,详细回答了 DolphinDB 功能函数模块用法。
  • 系统提示词规定了 Skills 如何嵌入至工作流,需要以何种方式解决何种任务。

图 2-1:Skills + RAG 检索 + 系统提示词职责

那么,如何将这三者有机的融合在 Agent 的工作区中呢?需要根据目标任务的工作流进行初步规划。

2.1 如何搭建一个 CTA 投研 Agent?

首先进行 Agent 工作区的设计,以便代码与结果的查看与维护;工作区的设计方式有很多种,这里推荐按照任务流的每个环节建立工作区。通过拆解 CTA 投研回测任务的基本流程,我们可以得到下图的形式,将每个流程得到的脚本文件或结果单独存放在一个文件夹中,最终得到工作区的整体设计。

图 2-2:CTA 回测的基本流程及对应文件夹

由于当前 Agent 都是通过 shell 脚本(Powershell/CMD/Git Bash等)执行命令,DolphinDB .dos 脚本无法在本地编译执行,所以需要通过 DolphinDB SDK 进行封装,使得 Agent 通过 shell 脚本运行 DolphinDB Python/Java/C++ SDK,从而提交脚本至远程 DolphinDB 服务器执行。这里以 DolphinDB Python SDK 作为封装进行开发,并将全部 Python SDK 调度代码存放在同一个文件夹中,方便运维管理。

此外,在 Agent 执行任务的过程中,可能涉及到网络连接、环境检查、debug测试等需要 Agent 额外编写代码调试的场景,这部分调试代码需要单独设置文件夹进行存储,否则 Agent 可能会乱放与主要任务无关的代码,从而破坏原有的代码结构。

因而加入 Python SDK 调度逻辑后的工作流程及文件夹如下所示:

图 2-3:最终 Agent 工作区的整体设计

最终该整体项目文件的设计如下所示:

bash 复制代码
.agents: # trae Skills文件夹
  dolphindb-backtest-skill.zip # dolphindb 回测Skills
  dolphindb-daily-factor.zip # dolphindb 日频因子编写 Skills
  dolphindb-highfreq-factor.zip # dolphindb 高频因子编写 Skills
  dolphindb-ops.zip  # dolphindb 运维 Skills
  dolphindb-rag.zip  # dolphindb RAG Skills
  dolphindb-test.zip # dolphindb 测试 Skills
script: # trae Agent工作文件夹
  indicator: 
    testSignal.dos  # 供Agent参考的CTA信号计算脚本
    testFactor.dos  # 供Agent参考的CTA因子计算脚本
  mainCont:
    default.dos # 供Agent参考的主力合约合成template
  result: 
    # 存放每个策略的回测结果csv文件
  strategy: 
    demo.dos  # 供Agent参考的CTA策略template
  sysScript:  # DolphinDB Python SDK代码, 负责让Agent执行对应 DolphinDB .dos脚本
    getIndicator.py
    getMainCont.py
    getSchema.py
    runIndicator.py
    runStrategy.py # Agent运行策略
    utils.py # 工具函数
  usrScript:
    # 存放其他Agent生成的脚本(系统调试、环境变量检查等与主要任务无关的脚本)
  config.json5: # dolphindb session 配置项

2.2 用 AGENTS.md 定义 Agent 的工作方式

Trae 支持按照 AGENTS.md 以及 CLAUDE.md 作为提示词,因而使用 Codex 与 Claude 的用户可以无缝迁移 Agent 工作项目至 Trae。本项目使用 AGENTS.md 作为系统提示词,系统提示词的设计如下:

图 2-4:系统提示词 AGENTS.md 文件内容结构

以下介绍一些较为简略的提示词,剩余部分在其余章节进行介绍:

角色定义:该部分提示词可结合任务目标自行编写,这里准备了一般粗糙的提示词:

bash 复制代码
你是一个精通使用DolphinDB函数进行因子编写以及使用DolphinDB Backtest回测插件进行期货策略回测专家,Always respond in Chinese-simplified

工作区文件目录:AGENTS.md 中的工作区文件目录如章节 2.1 工作区设计所示,填入文件目录具体内容即可,这里不做赘述。

当前任务说明:当前任务说明为任务流的概述,能够帮助 Agent 快速理解总体任务流所要达成的目标,同时需要说明必要的环境信息,以及工作流执行方式:

2.3 设计库表结构

由前文描述可知,本文设计的 Agent 需要实现一项关键能力指标数据可复用,即支持自动解析 Prompt 中对应因子/信号计算与主力合约逻辑,并复用已有因子/信号 + 主力合约合成规则,避免重复计算。

同时,DolphinDB Backtest 回测插件也需要对应的行情数据与基础数据。特别针对 CTA 策略,每日保证金率与手续费率都可能进行变动,因而在库表层面,不仅需要准备标的的基本信息表,还要准备标的每日信息表。汇总以上 Agent 能力需求与 Backtest 回测插件的数据需求,设计库表结构如下:

图 2-5:Agent 所需 DolphinDB 库表结构设计

2.4 搭建完整任务工作流

根据前文基本工作流的梳理以及库表的设计,我们可以梳理 Agent 端与数据库端的交互过程,这里进一步加入环境检查、SDK 调度等环节。同时为了提升任务执行的成功率,这里在 DolphinX Skills 的基础上增加了 Agent 对样例代码的学习环节。

在任务流执行的全程过程中,特别是在策略代码编写时使用到的 DolphinDB 语法,Agent 可以通过DolphinMind RAG 能力进行搜索并得出正确用法。

最终,我们构建了用于 CTA 因子/信号计算与策略回测的投研 Agent,其任务工作流如下所示:

图 2-6:CTA 投研 Agent 任务工作流设计

三、效果展示

用户向 Agent 输入指标计算与策略具体逻辑的 Prompt,Agent 就会依次执行前文提及的任务工作流。

以下展示了不同详细程度的策略的描述 Prompt 以及 Agent 执行效果,可以看出该 Agent 能够较好地理解用户需求,并执行 CTA 指标计算、主力合约合成以及不同类型的 CTA 策略回测任务。

3.1 简易策略:以一个时序 CTA 策略为例

3.1.1 策略描述 Prompt

以下是这个简易版本的策略描述 Prompt:

bash 复制代码
现需要执行DolphinDB Backtest:
标的池规则:股指期货
初始资金:10000000
回测开始时间:2022.01.01
回测结束时间:2023.01.01
止盈止损比例:保证金比例10%
开平仓条件:结算价计算金叉死叉,金叉多头信号+死叉空头信号;下一个交易日开盘价开仓,已有持仓则跳过

3.1.2 任务流分析

遇到类似金叉死叉这类模糊表述,Trae 会自动生成若干候选精确表述指标,根据需求选择即可:

图 3-1:Agent 解析金叉死叉指标

同时,由于 Prompt 中为给出明确的平仓信号,Agent 也会进行询问:

图 3-2:Agent 确认平仓信号

之后,Agent 会自动按照 AGENTS.md 中规划的工作流进行执行,遇到报错也会按照工作流进行调试。遇到无法通过命令行 shell 脚本调试的行为,Agent 会自动在 ./script/usrScript 文件夹下编写相关代码进行调试。

3.1.3 执行结果观察

下图展示了回测的执行工作流结果与策略回测结果,可以发现 Agent 严格按照了 AGENTS.md 中规划的工作流,并将计算的因子与策略脚本文件保存至指定的文件夹。

图 3-3:Agent 工作流执行结果

图 3-4:Agent 策略回测结果

3.2 复杂策略:以一个截面 CTA 策略为例

3.2.1 策略描述 Prompt

如果将策略的复杂程度提升,增加更多的策略条件;同时自定义主力合约合成规则,这里假设按照前一交易日的成交量区分主力合约,从而得到如以下所示策略 Prompt 的复杂策略描述。

bash 复制代码
现需要执行DolphinDB Backtest:
指标计算规则:
    - kurtRet10D: 过去10日settle涨跌幅的kurtosis
标的池规则:除了['ZC', 'PM', 'WH', 'RI']以外的所有商品期货品种
初始资金:10000000
资金分配规则:开仓固定为1手
回测开始时间:2022.01.01
回测结束时间:2023.01.01
调仓日规则:每周第一个交易日为调仓日
主力合约规则:volRule,上一个交易日成交量第一的合约定义为该交易日该品种的主力合约,若新主力合约到期日<旧主力合约,则保持旧主力合约不变
止盈止损比例:按照保证金比例计算的10%止盈 + 5%止损,多单空单均适用
到期日条件:离最后交易日15天必须强行平仓,且不得开该合约新仓
开多仓条件:当前交易日为调仓日 + 未持有该品种多单 + 到期日条件满足 + kurtRet10D排名TOP10大  -> 下一交易日开盘价主力合约开仓
开空仓条件:当前交易日为调仓日 + 未持有该品种空单 + 到期日条件满足 + kurtRet10D排名TOP10小  -> 下一交易日开盘价主力合约开仓
平多仓条件:下一个交易日为调仓日 or 止盈止损 or 到期日条件不满足 -> 下一交易日开盘价平仓
平空仓条件:下一个交易日为调仓日 or 止盈止损 or 到期日条件不满足 -> 下一交易日开盘价平仓

3.2.2 执行结果观察

下图是该截面 CTA 策略的执行结果汇报,可以看出在复杂的 CTA 策略投研场景下,该 Agent 依然能够理解用户的意图并根据工作流严格执行。

图 3-5:Agent 策略运行结果

此时观察工作区,可以发现 indicator 文件夹与 strategy 文件夹下已经出现了Agent 生成的指标计算脚本文件与策略文件。result 文件夹下按照策略名称创建了一个名为 kurtRet10DStrategy 的子文件夹,其中保存着具体的回测结果。

由于策略描述 Prompt 文本中包含了名为 volRule 的主力合约规则及描述,因而 Agent 在 mainCont 文件夹下生成了一个名为 volRule.dos 的主力合约合成脚本,并按照 volRule 规则在回测中进行调仓。

图 3-6:Agent 工作区生成脚本文件与结果文件

同时观察 DolphinDB 表 dfs://factorDB/infoCTA,发现其已经记录了所有的信号与因子名称及其描述。当新的 Prompt 中涉及到与库内因子/信号语义一致的指标时,Agent 会自动使用含义一致的这些指标,从而实现指标复用的功能。

图 3-7:更新后的 infoCTA 表

四、部署方式

下载附件中的压缩包,按照以下操作进行部署即可:

step1. 确保 powershell 读取中文注释不会输出乱码。

以管理员身份打开 powershell,粘贴执行以下命令:

bash 复制代码
#允许运行自定义脚本
set-executionpolicy remotesigned

#创建默认profile,如果存在则不创建
if (!(Test-Path -Path $PROFILE)) {
  New-Item -ItemType File -Path $PROFILE -Force
}

#查看创建的profile文件位置
$PROFILE

根据输出的位置,找到 profile 文件,

bash 复制代码
C:\Users\Admin\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

使用任意文本编辑器打开该 profile 文件,加入一行:

bash 复制代码
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

重启 powershell,输入 chcp 查看编码,若为 65001 则说明修改成功,此时 powershell 执行 shell 脚本读取代码文件遇到中文不会输出乱码。

step2. 将压缩包解压至 windows 用户允许读写的任意路径下,若当前存在 pandas + dolphindb + json5 环境,可以修改 AGENTS.md 中的本地 Python Conda 环境为该环境。

图 4-1:指定 Agent 执行某一 Conda 环境

step3. 配置 DolphinDB 连接,打开解压后的文件夹,修改 ./script/strategy 文件夹下的 config.json5 文件,填入对应的配置项,该配置项将作为 DolphinDB 的连接配置在 Agent 中全局使用:

bash 复制代码
{  "session": {  "host": "",  "port": "",  "userid": "",  "password": ""  } }

step4. 建库建表 + 数据导入,打开解压后的文件夹,依次运行 Python 代码即可完成教程数据导入。后续可以接入 tushare 或通联等数据提供商的数据,并通过设置定时任务的方式实现数据的增量更新。

图 4-2:建库建表 + 导入示例数据的 Python 代码文件

step5. 运行 Trae Agent 客户端,打开目标文件夹。为确保网络端沙箱放行,尤其是 DolphinDB 部署在远程 linux 服务器上的情况,这里需要以自定义权限模式进行执行。点击设置 - 权限审批 - 自定义配置,进入 global.json 文件,修改配置项 enable 为 false:

bash 复制代码
 "shellSandbox": {  "enable": false, // 默认为true,导致沙箱拦截部分行为  "onRestrict": "request_permission_retry_sandbox"  },

step6. 根据网页 DolphinMind 中的提示,并在该页面上申请 DolphinMind api-key,将 DolphinMind 接入 agent,使其可以通过 DolphinMind 的 RAG 能力查询文档中 DolphinDB 函数用法。

图 4-3:Agent 接入 DolphinMind RAG

step7. 输入策略描述 Prompt,即可让 agent 生成对应的主力合约拼接、因子信号计算与期货策略回测脚本,agent 执行最终的回测脚本返回对应结果。

五、总结

本文利用 Trae + DolphinX Skills 实现了一个能够进行 CTA 因子信号计算、主力合约合成以及策略回测全套流程的 Agent,展现了当前 DolphinMind RAG、DolphinX Skills 与系统提示词相结合的强大执行能力。

以下是基于 DolphinX Skills 进行 Agent 开发的几点实际体验:

  • 在初始建库建表时,可以通过 setTableCommentsetColumnComment 函数为整个表以及每个字段添加注释,这样减少了后续向 Agent 的字段解释成本,可以直接将整个表的 schema 返回给 Agent。
  • 在强业务逻辑的场景下,受限于 Agent 自身的能力以及 Skills 本身的文档属性,Agent 生成的代码可能较为混乱,且运行效率较为低下。此时可以针对性地给出一个或几个业务场景中的真实代码,让 Agent进行学习,能够大幅提升任务执行的成功率。
  • **数据层面必须遵守的逻辑,须同时在系统提示词 AGENTS.md 与原始库表注释中均加以说明,**保证 Agent 在取数过程中的行为符合预期。
  • 在测试过程中,应当结合真实用户输入的 Prompt,**尝试简化 Prompt,并观察 Agent 的任务执行是否符合预期,**该过程有助于预防工作流执行时的潜在问题。
  • 在测试过程中,对于回测场景下常用但 Agent 需要迭代多轮才能写出的函数,可在 ./script/strategy 文件夹中的 demo.dos 策略样例文件中予以使用。
相关推荐
ChenNyan2 小时前
从一块 ESP32-S3 开发板到 AI 陪伴设备:我们如何搭建一套可持续演进的端云架构
后端
ValueHD2 小时前
视频会议终端是什么,有哪几种类型?
后端·音视频·视频编解码·腾讯会议
.Hypocritical.2 小时前
SpringBoot 各版本 Profile 多环境配置完整对比(2.x/ 2.4+ / 3.x/4.x
java·spring boot·后端
乐橙开放平台3 小时前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
笔记·后端·物联网·自动化·音视频·智能家居
卷无止境3 小时前
FastAPI 的可观测性进化,从打日志到看清整个系统的呼吸
后端·python·fastapi
MetaLite4 小时前
SpringBoot防重复提交-加一把Redis锁就够吗
spring boot·redis·后端
卷无止境4 小时前
FastAPI 的 CI/CD 之路,从代码提交到线上运行
后端·python·fastapi
计算机毕设定制辅导-无忧学长4 小时前
《基于SpringBoot的图书管理系统设计与实现》
java·spring boot·后端
小蒜学长4 小时前
借助于大模型工具Cursor的中药材交易系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端