3.4 使用 AI 编写和回测验证策略

适用版本 V2V3

本篇重点:本篇讲让 AI 写策略的一套固定流程,重点是怎么验证它写对了,并附一段 Codex 实际跑完全程的实拍。

1 两条路怎么选

V3:命令行 + Skill(推荐)V2:网页对话 + 参考文档
AI 工具Claude Code、Codex、Cursor、DeepSeek harness、WorkBuddy 等编码助手任意网页版对话 AI
AI 能做的写 .py 和 .kh、检查结构、跑回测、读结果、改代码再跑只写代码;回测要你在界面里点
你要做的提需求、批准命令、核对结果复制代码、加载回测、把日志和报错贴回去
准备按 2.2 装好 kh 和 khQuant Skill按 3.3 下载 Skill 的参考文档

两条路写出来的策略文件是一样的:V2 和 V3 的策略接口完全相同(3.1),同一个 .py 两边都能加载。

2 先把需求说清楚

AI 写错策略,多数是因为需求含糊,它只能自己猜。下面几项说得越具体,返工越少:

要素例子
标的和股票池「股票池用沪深300指数本身,只为演示」或「我自己给的 5 只股票」
周期和触发方式日 K 线触发,用日线数据(触发方式见 1.8)
指标和参数RSI 周期 14;参数写成固定值,不要用随机数
买卖规则RSI 从下往上穿过 30 且没有持仓时买入;从上往下穿过 70 且有持仓时卖出
仓位每次用 30% 的可用资金,按 100 股整数倍下单
价格和时点用当天开盘价下单;指标只用到前一天收盘为止的数据
回测设置区间、初始资金、复权方式,以及要不要沿用自带案例的交易成本
要交回什么策略文件、回测摘要、交易记录里的前几笔、你自己的检查结论

「价格和时点」一项特别要写明。khQuant 的 khHistory 不含当前 K 线,自带案例都用当天开盘价下单、用前一天为止的收盘价算指标,这样不会用到未来数据。让 AI 照这个写法来,后面核对起来最省事。

3 V3:让 AI 写一个新策略并跑通

前提:已经按 2.2 第 1 节让 kh 能用、装好 khQuant Skill。下面的例子把文件都放在研究目录 C:\khdemo_ai,请换成你自己的路径。这段可以直接改了用:

用 $khquant 帮我写一个新策略并回测验证。

策略:RSI 均值回归。日 K 线触发,用日线前复权数据。
- RSI 周期 14,参数写成固定值,不要用随机数。
- RSI 从下往上穿过 30、且没有持仓时,用 30% 的可用资金买入,按 100 股整数倍;
  RSI 从上往下穿过 70、且有持仓时,全部卖出。
- 用当天开盘价下单;RSI 只用到前一天收盘为止的数据。
- 交易成本沿用自带双均线案例的 .kh;初始资金用 1000 万元。

要求:
1. 先用 tx 源下载 000300.SH 自 2022-01-01 起的日线,加 --adj front(前复权),用 --data-root 存到 C:\khdemo_ai\data;不要因为库里已经有 000300.SH 就跳过下载。
2. 读 Skill 里的策略开发参考,按 khQuant 的回调和信号格式写,文件放在 C:\khdemo_ai,名字叫 rsi_demo。
3. 写完先运行 kh strategy validate 检查结构,通过后再回测,每条 kh run 都加 --data-root C:\khdemo_ai\data。
4. 先用 000300.SH 跑 2025-01-01 到 2025-06-30 的短区间,用 --json 给我摘要。
5. 把交易记录里的前 5 笔列出来,逐笔说明当天为什么买或卖(对应的 RSI 数值),让我核对。
6. 没问题再跑 2023-01-01 到 2026-09-30,生成 HTML 报告。
7. 不要修改全局配置,不要删除任何回测结果。

AI 一般会依次运行这些命令(每条执行前先在回复里写出来,等你批准):

kh data download --source tx --stocks 000300.SH --start 20220101 --adj front --data-root C:\khdemo_ai\data
kh strategy create rsi_demo --dir C:\khdemo_ai     # 生成带四个回调的模板和 .kh
kh strategy validate C:\khdemo_ai\rsi_demo.py
kh run C:\khdemo_ai\rsi_demo.kh --data-root C:\khdemo_ai\data --stocks 000300.SH --start 20250101 --end 20250630 --json
kh result show --json
kh run C:\khdemo_ai\rsi_demo.kh --data-root C:\khdemo_ai\data --stocks 000300.SH --start 20230101 --end 20260930 --report --no-open
  • 先短后长:短区间几秒就跑完,逐笔核对容易;规则对了再跑长区间。
  • 指标需要预热:RSI 14 至少要往前多 15 根 K 线,数据要比回测开始日早下一段(上面从 2022 年起下载就够了)。
  • 想同时试几组参数,用 2.2 第 1.5 节的研究提示词,或第 4.7 节的脚本写法。

实拍:Codex 跑这段提示词的过程和结果

2026 年 10 月 10 日,我们在 Codex 桌面版(研究目录 C:\khdemo_ai,khQuant 3.4.1.9)里发了这段提示词(当时还没有「初始资金 1000 万」这半句),用时约 10 分钟。过程中有三处值得看:

  • 它发现了需求里的矛盾并先问。自带案例的初始资金是 100 万,30% 只有 30 万;沪深 300 指数点位约 3700~4900,按 100 股整数倍买一手就要 37 万以上,按原需求一笔都买不进。它停下来问初始资金用多少,建议 1000 万。所以上面的提示词已经补上了这半句。
  • 跑完短区间先自查。它发现预热数据比预期短,RSI 的起算点会随回测区间变化,于是改了取历史数据的写法、重新验证再重跑,并在回复里说明了原因。AI 改了什么、为什么改,要让它说清楚。
  • 逐笔给出核对依据。每笔交易都列出前两个交易日的 RSI 数值,按规则一眼能核对;它还另写了一个独立复核脚本,逐笔重算 RSI 和成交数量。
过程:validate 检查结构 → 短区间回测 → 发现预热数据问题、改写法后重跑
过程:validate 检查结构 → 短区间回测 → 发现预热数据问题、改写法后重跑

最后的回复:短区间 2025 年上半年只有 1 笔买入(4 月 10 日,RSI 从 28.18 回到 32.81);长区间 2023-01-01~2026-09-30 共 6 笔,总收益约 +4.11%、最大回撤约 5.97%。这只是演示规则写得对不对,不是一个好策略,不构成任何投资建议。

结果:短区间 JSON 摘要、长区间前 5 笔交易与对应 RSI、完整核对记录和 HTML 报告链接
结果:短区间 JSON 摘要、长区间前 5 笔交易与对应 RSI、完整核对记录和 HTML 报告链接

拿到这样的回复,按下一节的清单再自己过一遍:打开 HTML 报告看交易明细,挑一两笔按 RSI 数值手算,确认和规则一致。

4 怎么验证 AI 写的策略

回测「跑通」不等于「写对」。下面这份清单逐项过一遍,大部分错误都能在短区间里发现:

检查什么怎么查
结构对不对有 init(stock_codes, init_data)(必须写、两个参数)和 khHandlebar(data),khHandlebar 返回信号列表(3.1)。V3 的 kh strategy validate 能查出缺函数和语法错误
有没有用到未来数据指标是否只用到前一天;有没有拿当天收盘价判断、又按当天开盘价成交
下单数量信号的 volume 单位是股,股票按 100 股整数倍;有没有把「手」当成「股」
参数是否固定有没有残留 random;同一配置连跑两次,结果应完全一样
交易记录对得上规则吗打开报告或 trades.csv,挑几笔,按规则手算当天该不该买卖
一笔交易都没有多半是数据不够预热,或复权不一致(tx 下载要加 --adj front);看日志里的提示
和自带案例对照让 AI 改的是双均线这类自带案例时,先用相同参数跑原案例和改后的版本,结果应该一致,再改规则
返回值khHandlebar 每条路径最后都返回列表,没有信号返回 [];generate_signal 的结果用 signals.extend(),不要 append
周期一致代码里 khHistory 的周期('1d'、'1m'、'5m')和触发方式、数据周期一致;计算指标前检查了历史数据够不够
没有编造对不上文档的函数名、参数名,让 AI 指出出处;指不出来就让它改(函数清单见 3.2)
V2 用户不要让 AI 用 kh 命令行(V2 没有);写了 khPreMarket/khPostMarket 要在界面里勾选对应回调,否则不会运行
换一段区间再看在没参与挑参数的区间上再跑一次,警惕只在一段历史里好看的过度拟合
注意

AI 说「回测通过、收益不错」时,请自己打开报告看交易明细。收益数字本身不能证明策略写对了,更不代表未来会赚钱。

5 接着做:批量试参数

本篇第 3 节是「写新策略」;规则核对无误后,想批量试参数,照抄 2.2 第 1.5 节的研究提示词即可,那里有一次真实研究的完整过程和结果(2.2 第 2 节)。

6 V2:用网页对话 AI 写策略

V2 没有命令行,AI 看不到你的数据和结果,每一步都要你来转述;能用 V3 的话,第 3 节的流程会省事得多。V2 的做法是:

  1. 按 3.3 第 5 节取出 khQuant Skill 的策略开发参考文档 strategy-development.md,作为附件发给对话 AI,再发下面的开场白。
  2. 按第 2 节把需求写清楚发过去,让它交回完整的 .py。
  3. 按第 4 节的清单看一遍代码,存成文件,在 V2 界面里加载回测。
  4. 有报错或交易对不上规则,把日志贴回去让它改;确认无误后再用长区间回测。

6.1 开场白模板(可照抄)

附件发过去后,在同一条消息里贴上这段话。方括号里的内容按你的情况改:

我在用 khQuant 回测平台的 V2 版本(图形界面,没有 kh 命令行)。
附件 strategy-development.md 是 khQuant 官方的策略开发文档,请以它为唯一依据写代码:
文档里没有的函数、参数不要使用,也不要自己编;拿不准的地方直接告诉我。

要求:
1. 只写一个 .py 策略文件,开头用 from khQuantImport import *。
2. 必须有 init(stock_codes, init_data) 和 khHandlebar(data) 两个函数,init 用不到也要写上。
3. khHandlebar 返回信号列表;用 generate_signal 生成信号时用 signals.extend(),不要用 append()。
4. 股票代码带交易所后缀(如 000001.SZ);信号里的 volume 单位是“股”。
5. 取历史数据用 khHistory,必须显式传 current_time,只传 khGet(data, "date_num") 或 khGet(data, "datetime_str"),不能用到当前这根 K 线之后的数据。
6. 不要使用 kh 命令行,V2 没有。
7. 在关键判断处用 logging.info 打日志,买卖时的日志加上 [TRADE] 前缀。
8. 代码写完后,单独列出我需要在 V2 界面里设置的回测参数:
   触发方式、K 线周期、复权方式、股票池、回测区间、初始资金,以及是否要开启盘前/盘后回调。

先回复“已读完文档”,并用三五句话说明这个框架的策略结构,然后等我描述策略。

让 AI 先复述框架结构,是为了确认它真的读了文档。如果它复述得和文档对不上(比如说 khHandlebar 返回一个字典),就换一个能读附件的 AI,或者改成粘贴全文。

6.2 在 V2 界面里加载回测

  1. 把 AI 给的代码存成 .py 文件,文件编码用 UTF-8。建议和示例策略放在同一个文件夹,方便管理。
  2. 打开 V2,最好先点工具栏「加载配置」载入一个和新策略类型相近的示例配置(比如日线策略就载入双均线示例的 .kh),在它的基础上改,参数不容易漏。
  3. 点「选择策略文件」,选中刚保存的 .py。
  4. 按 AI 列出的回测参数逐项设置:触发方式和数据周期见 1.8 触发方式与盘前盘后,区间、资金、股票池、复权方式见 1.7 回测配置详解。回测用到的数据要先下载好,见 1.4 数据管理模块。
  5. 点「配置另存为」保存成新的 .kh,以后直接「加载配置」就能复现。
  6. 点「开始运行」,看右侧日志;跑完在回测报告里检查交易记录,看看买卖点是否符合你的逻辑(见 1.10 回测报告)。

也可以让 AI 连 .kh 配置文件一起写,但字段多、路径容易写错,不如在界面里设置可靠。如果用了 AI 写的 .kh,加载后请在界面上逐项核对一遍,尤其是策略文件路径。

6.3 报错了怎么办

回到同一个对话,把日志里的完整报错(包括前后几行)原样贴给 AI,说明「这是在 V2 里运行时的报错,请按文档修改」。常见的几类:

  • NameError 或「没有这个属性」:多半是用了不存在的函数,让 AI 对照文档改。
  • 运行正常但一笔交易都没有:先看日志里有没有打出判断过程;再检查数据有没有下载、复权方式是否和策略预期一致、指标需要的历史长度是否超过了区间。
  • 结果和预期差很多:把一两天的日志和交易记录贴给 AI,让它逐笔解释为什么在那天买卖。

如果你用的是 Claude Code、Codex 这类桌面 AI 工具,也可以让它读 strategy-development.md 直接把 .py 写进你的策略文件夹,省去复制粘贴。但不要点名使用 khquant Skill,它找不到 kh 命令会停下;回测仍然要你在 V2 界面里做。

常见问题

问:AI 写的代码用了 khQuant 里没有的函数?
答:让它先读 Skill 的策略开发参考,再改;函数清单见 3.2。V3 用 kh strategy validate 能发现缺函数、语法错误,逻辑对不对还要看交易记录。

问:同一个策略两次回测结果不一样?
答:代码里还有随机数。让 AI 把 random 生成的参数全部改成固定值。

问:AI 改完说没问题,但交易次数明显不对?
答:按第 4 节逐项查,重点看下单数量的单位(股)和指标的时点。让 AI 把有疑问的那几笔逐笔解释,通常就能发现问题。

问:能让 AI 直接帮我下单吗?
答:不能。kh 只有数据、回测和结果功能,没有任何下单功能。

本篇基于 V3.4.1.10、开源 V2 和 khQuant Skill v1.3.3 编写。

×
没有账号?注册  忘记密码?

风险提示

投资有风险,开户需谨慎。本系统仅为投资者提供量化交易相关的数据处理与分析工具,不构成任何投资建议。 请您在审慎思考后作出选择。特别声明:本系统对您与券商之间的交易、合作不承担任何法律责任。 市场有风险,投资需谨慎。

© 2024 khQuant看海量化回测平台 版权所有

官网:www.khsci.com/khQuant