跳转至

第 31 课 让 AI 参与研究,而不替你偷偷作决定

AI 能把陌生代码解释得更慢一些,也能快速提出测试与反例。真正可靠的合作从明确边界开始,研究问题、数据事实和最终结论仍由研究者负责。

适合谁已经走完基础研究流程,准备第一次用 AI 协助量化研究的读者
前置知识数据时间、特征与标签、回测账本、样本外验证和简单模型基线
建议用时150 分钟
本课成果一张研究卡、一组可核对的小任务、一份测试记录和一次独立审查

一句“帮我做个赚钱策略”会发生什么

第一次使用 AI 的小周输入了一句话。“帮我写一个胜率高的量化策略。”几秒后,他得到一段很长的代码,其中包含双均线、止损、仓位和回测图。程序甚至打印了漂亮指标。问题在于,小周不知道代码默认交易什么资产,不知道均线使用哪一个时点的价格,也不知道订单何时成交。手续费被写成零,数据来自今天仍然存在的股票,测试区间还参与了参数选择。

这段代码运行得很顺利,却没有形成可以相信的研究。模糊任务留下许多空白,AI 会根据常见示例自动填补。它填入的参数未必符合你的市场,填入的时间规则可能产生未来数据,引用的平台接口也可能已经变化。输出越完整,初学者越容易误以为这些默认决定已经经过验证。

更合适的起点,是把 AI 当成四种受约束的助手。第一种角色负责追问,把模糊想法拆成可回答的问题;第二种角色负责解释与草拟,每次只处理一个小组件;第三种角色负责生成边界测试;第四种角色负责寻找漏洞和反例。它可以在四种角色之间切换,研究者始终保留决定权和证据责任。

学习者和 AI 一起检查研究卡、数据时间与风险清单

上图中的合作顺序值得留意。人先写出研究问题和已知事实,AI 帮助找出空白;数据时间和交易规则经过核验后,AI 才开始草拟小段实现;程序测试与人工手算给出反馈,最后再由独立审查寻找遗漏。若跳过中间检查,合作会退化成“生成一大段代码,再凭结果猜它是否正确”。

先让 AI 做采访者

本课继续使用一个教学想法。中期相对强、长期趋势向上的资产,未来几天可能继续相对强;短期涨得过快时暂不追入。这句话听起来已经很具体,实际仍有许多空白。“中期”是二十日还是六十日,“相对强”与谁比较,“未来几天”从哪个可成交时点开始,都需要研究者说明。

第一轮对话不要写代码。让 AI 把自己限制成采访者,并要求它每次只问少量问题。这样初学者可以逐项理解,避免一次面对几十个陌生术语。

我正在学习量化,希望研究下面这句话。
“中期相对强、长期趋势向上的资产,未来几天可能继续相对强;短期涨得过快时暂不追入。”

请先当采访者,不写代码,不推荐最佳参数,也不评价能否盈利。
按市场与股票池、数据时间、信号、标签、组合、订单、成本、验证和放弃条件检查空白。
每次只问三个问题。出现术语时,用一句普通中文解释,并给一个小例子。

这段提示包含任务、禁止事项、检查范围和输出节奏。AI 如果问“你的股票池如何确定”,研究者不能回答“全市场”就结束,还要说明历史每个日期如何保存当时可交易成员。AI 如果问“信号何时形成”,研究者要回到真实数据可得时间。对话的价值来自这些逐步澄清,而非句子写得多么漂亮。

把回答写成一张研究卡

口头对话很容易在几十轮后互相矛盾。研究卡把关键选择放进一张表,后续每次修改都能留下痕迹。下面是一份教学版本,其中的二十日、六十日和五日只是演示参数,正式研究需要说明选择理由,并检查邻近范围。

栏目 当前教学决定 仍需核验的证据
市场与股票池 日线资产池,使用历史每个日期真实可交易成员 股票池变更、停牌、退市与上市日期记录
中期强势 过去 20 日收益在同日资产中的排名 复权方式与窗口缺失处理
长期趋势 收盘价高于过去 60 日平均价 收盘字段时间与停牌日规则
短期过热 过去 5 日涨幅进入极高区域时暂不选择 阈值只在训练与验证期确定
标签 从下一可成交时点开始的未来 5 日相对收益 起点、终点与基准必须逐日核对
组合 先选择高分资产并等权持有 持仓数量、行业和流动性限制
订单 T 日收盘后计算,T+1 进入可成交时段 使用开盘、均价还是限价情景
成本 费用、价差与三档滑点压力 市场规则、最低费用和冲击假设
验证 按时间滚动,规则冻结后打开最终测试 标签重叠隔离与尝试次数记录
放弃条件 扣费样本外不优于简单动量,或结果集中在少数日期 事先写入研究日志,避免事后修改

研究卡填完后,让 AI 只检查内部冲突,不急着改写方案。可以明确要求它引用有问题的原句,说明影响,并把无法确认的事实标成待查。这样能减少它用常识补全数据供应商、交易所或平台规则。

下面是我的研究卡。请检查各栏是否互相冲突。
重点核对特征截止时间、标签起点、订单时间、成交时间和财务数据可得时间。
发现问题时引用对应栏目,说明它会怎样影响回测,并给出最小核验方法。
材料不足时写“待查官方资料”,不要猜测字段含义和平台规则。

打开 AI 研究卡

一次只生成能够手算的小组件

研究卡明确以后,仍不适合直接要求完整策略。完整系统会同时包含数据读取、特征、排名、信号、仓位、订单、费用和图表,任何一步出错都可能被最终曲线掩盖。把任务缩小到一项可以手算的输出,错误范围会清楚许多。

第一项任务可以只计算三列特征。提示中写清输入顺序、输出定义、禁止行为和测试数据。AI 需要解释每个 rollingshift 的时间含义,数据不足时保留空值,也不能下载未知来源的数据。

请用 pandas 写一个函数,只完成特征计算。

输入是一列按日期升序排列的收盘价。
输出包括过去 20 日收益、过去 60 日平均价和过去 5 日收益。

请先用普通中文说明每一列在第 T 日允许使用哪些价格,再给代码。
不得下载数据,不生成订单,不填造窗口不足的早期值。
最后给一张答案可以人工检查的虚构小表,并解释每个 rolling 和 shift。

拿到代码后,研究者先选两三个日期手算。只有特征与预期相同,才增加同日排名;排名通过后,再增加趋势过滤;随后才进入仓位与订单。每次扩展只改变一个环节,提交给 AI 的材料也只包含相关输入、当前输出和失败差异。

让 AI 先解释代码,再允许修改

初学者经常把“看得懂函数名”误当成理解代码。更有效的提问方式,是让 AI 按数据形状和时间含义解释。它应说明进入一行代码以前,表格有哪些列、多少行;执行以后新增什么列;窗口最早在哪一天有值;当前行是否读取了下一行。

可以要求它输出一张逐行阅读表,而非大段概括。

代码片段 输入是什么 输出怎样变化 时间上能否使用未来 应怎样手算
close.pct_change(20) 按日期排列的收盘价 当前价与二十行前价格的变化 正确排序时只看当前和过去 选一行,用两个价格相除
close.rolling(60).mean() 同一列收盘价 当前行及之前六十行的平均 默认窗口包含当前行,不看后行 对短教学窗口逐项求和
groupby(date).rank() 同日多资产特征 每个日期内部的相对次序 取决于输入特征是否已守住时间 手排同日三只资产

AI 的解释也可能出错。若它声称某个函数“通常不会泄漏未来”,仍要回到官方文档和小数组实验。解释提供的是检查路线,程序行为才是证据。

测试要比漂亮结果更早出现

第二类适合交给 AI 的工作,是为小组件提出会失败的边界案例。常数价格可以检查收益是否为零;连续上涨可以检查方向和窗口;历史不足可以检查空值;中间缺失可以检查程序是否跨过未知日期;末尾追加极端未来价格可以检查早期结果是否被未来改变。

下面的截断测试非常重要。先把价格截到 2024 年末计算一次,再用完整数据计算一次。完整数据在 2024 年末以前的特征必须与截断版本相同。若两者不同,早期计算吸收了后来信息,或预处理参数使用了全样本。

past = make_features(price.loc[:"2024-12-31"])
full = make_features(price)

pd.testing.assert_frame_equal(
    past,
    full.loc[past.index]
)

阅读这段代码时,第一行只给函数早期数据,第二行给完整历史。full.loc[past.index] 从完整结果中取回同一批早期日期,最后一行逐项比较。测试失败时,不要立即把容差调大。先打印第一个不同日期和对应输入,查明变化来自标准化、排名股票池、缺失填充还是窗口方向。

还可以让 AI 先用文字说明每个测试防什么错误,再写测试代码。若它给出十个看似专业的测试,却无法说出失败时代表什么,这些测试对初学者帮助有限。

回测以前先打印八天账本

第三步是把特征、信号、订单和持仓串起来。此时仍不要先画总收益。让 AI 使用八个虚构交易日,生成一张人可以逐行核对的账本。表中应列出原始价格、特征最晚使用日期、信号形成时刻、计划下单时刻、模拟成交时刻、成交价、持仓变化和费用。

若 T 日收盘后形成的信号已经出现在 T 日收盘持仓中,时间顺序就有问题。若订单在涨停或停牌日仍按理想价格成交,成交规则就有问题。先把一笔交易从信息出现追到现金变化,比直接看三年净值更容易发现错误。

sequenceDiagram
    accTitle: 学习者与 AI 协作完成研究的顺序
    accDescr: 学习者先提出问题与事实,AI 分批追问并草拟小组件,测试与账本给出可核对反馈,独立审查最后寻找偏差,研究者决定继续修改或放弃
    participant H as 学习者
    participant A as AI 助手
    participant T as 测试与账本
    H->>A: 提交想法,要求先追问
    A-->>H: 每次返回少量事实缺口
    H->>A: 提交研究卡和时间边界
    A-->>H: 草拟一个最小组件
    H->>T: 用手算样本和截断测试验证
    T-->>H: 返回具体差异与失败位置
    H->>A: 提交差异,请求解释或修正
    A-->>H: 完成偏差与失败路径审查
    H->>H: 记录证据,决定继续、修改或放弃

AI 怎样帮助做公平的版本比较

基础流程正确以后,可以比较三个有明确关系的版本。版本 A 只使用二十日动量排名,充当简单基线。版本 B 增加六十日趋势过滤,观察它是否改善结果,还是只减少持仓。版本 C 再增加短期过热过滤,检查新增复杂度带来的具体变化。

三个版本必须共用数据、股票池、时间切分、订单、费用和风险限制。AI 可以帮助整理每一折结果,却不能只返回最好版本。报告应保留失败时间段、最大贡献日期、换手、持仓数量、回撤和三档成本压力。若趋势过滤只降低换手而没有改善预测,它仍可能有组合价值;若过热过滤只让研究期曲线更漂亮,进入滚动验证就消失,应当删除。

AI 让尝试速度显著提高,也会提高选择偏差。过去一天只能试两个版本,现在可能试二十个。即使每个版本都没有故意作弊,最后挑出的最佳结果也更可能来自偶然。研究日志应记录所有重要尝试、产生原因、看过哪些结果和为何保留或放弃,最终测试集一旦被查看,就不能继续充当从未见过的考试。

换一个新对话专门做红队审查

参与设计的 AI 容易沿用早期假设。完成初稿后,可以开启一个没有旧对话的新审查,让它只接收最终研究卡、数据说明、代码、测试和账本。这个专门寻找反例、漏洞和失败条件的角色常叫作红队

你没有参与这项研究的设计。请只做证据审查,不改成另一套策略。

逐项寻找未来数据与标签重叠、历史股票池与退市处理、全样本预处理、
订单与无法成交、成本遗漏、重复试验、测试集污染、收益集中和市场状态依赖。

每个问题给出材料位置、为何重要、最小复现方法和修复建议。
材料不足时写“无法判断”,不要给策略打分,也不要猜测平台规则。

红队输出仍然只是待核验线索。它可能误解代码,也可能把合理操作标成问题。研究者要逐项回到数据、官方资料和小样本测试,记录确认、驳回或仍待调查的理由。第二次 AI 对话扩大了视角,却不能替代独立数据和可重复实验。

哪些 AI 评价听起来正确,却没有证据

“这个策略很稳健”需要翻译成可以查证的问题。它在哪些未参与选择的时期有效,在更高成本下是否仍有余量,参数邻域是否连续,收益是否集中在少数日期。没有这些材料,“稳健”只是流畅评价。

“这个参数最好”也需要搜索范围、尝试次数和样本外比较。AI 无法凭常识证明二十日一定优于十九日和二十一日。参数应先从机制给出有限候选,再在验证窗口选择,最终测试只打开一次。

“这列没有未来数据”必须落实到字段时间。要求逐列写出最早可得时刻,并通过截断测试验证。财务公告日、修订日、交易所状态和数据供应商处理都可能影响可见性,语言保证不能替代时间戳。

“回测表现很好”则要回到账本和基线。平均收益无法说明成交是否可能、费用是否合理、亏损是否集中,也无法说明新增规则相对简单方案提供了什么。让 AI 同时展示失败时期和反例,能降低单一曲线带来的诱惑。

事实、引用与平台接口必须另行核验

AI 可能生成不存在的论文、写错发布日期,或混淆两个平台的接口。凡是涉及软件版本、市场规则、数据字段和平台功能的事实,都应打开官方文档核验,并把访问日期记入研究材料。代码示例也要在固定版本环境运行,不能因为接口名称看起来熟悉就直接接入。

研究者还要区分公开知识与敏感材料。真实账户密钥、券商口令、个人信息、未公开数据和受许可限制的数据不应提交给公共 AI 服务。即使在本地使用模型,密钥也要通过权限隔离和安全存储管理,不能写进提示词、笔记或仓库。

生成代码更不能直接控制真实下单。进入模拟盘以前,应设定最大仓位、最大订单、允许交易资产、日志、人工确认和停机条件。AI 可以帮助写检查清单,实际权限必须由独立程序边界限制。

把每次对话变成可以复查的研究记录

研究日志至少保存日期、使用的模型或工具、提供了哪些材料、AI 给出什么建议、研究者接受或拒绝什么、使用什么证据验证,以及 AI 是否看过样本外结果。若平台允许,还可以保存提示与回答的文本快照,并删除敏感内容。

这份记录能回答参数从哪里来。它可能来自事先假设,可能来自 AI 建议,也可能是看完结果后的修补。三种来源具有不同的选择偏差。完整记录也能帮助未来复现,当 AI 模型或平台更新后,研究者仍知道当时依据了什么。

研究完成的标志并不要求收益为正。一张没有关键空白的研究卡、一份数据时间说明、可以手算的小组件、通过的边界测试、逐日交易账本、简单基线、时间滚动结果、成本压力、独立红队记录和清楚的继续或放弃理由,已经构成一次完整研究。

人提出问题,AI 草拟,程序检验,人再判断并写入复盘

上图把 AI 放在研究循环中间,而没有放在结论终点。每次草拟都要经过程序检验和人工判断,失败结果也写入复盘。这样使用 AI 的目标,是缩短从问题到证据的距离,同时保留每项决定的来路。

容易弄错的地方

容易出现的做法 隐藏的问题 更稳妥的处理
一次要求完整策略和回测 AI 会填入大量未说明的默认选择 拆成特征、排名、仓位、订单和账本小组件
把流畅解释当作事实 文字可以合理,却没有原始证据 回到官方资料、时间戳和小样本测试
让同一对话既设计又最终审查 早期假设容易被重复接受 新开对话做红队,并保留人工复核
AI 提高试验速度后只记录胜者 尝试次数越多,最佳结果越可能偶然 保存尝试日志,冻结规则并保护测试集
把真实密钥交给 AI 生成接入代码 凭据可能泄漏或进入日志 使用安全存储、最小权限和模拟环境
生成代码直接接真实账户 未验证错误可能产生实际交易 先单元测试、账本、模拟盘和停机控制

一分钟自测

AI 说“这个字段通常在收盘前可得”,这句话能否直接写进回测假设?如果不能,下一步应该找什么证据?

查看答案 不能。“通常”没有给出具体市场、字段和历史时期。应查数据供应商的字段说明、交易所或公告原始时间、接口时间戳和修订记录,再用真实样本核对。

本课术语

词语 先这样理解
提示词 交给 AI 的任务、材料、禁止事项和交付要求
上下文 AI 在当前对话中能够看到并用于回答的资料
研究卡 集中记录研究问题、数据、时间、组合和放弃条件的表
红队 专门寻找反例、漏洞和失败条件的独立审查角色
幻觉 AI 生成听起来合理却缺少可靠依据的内容
截断测试 比较早期数据单独计算与完整历史早期计算是否一致
选择偏差 多次尝试后只保留最佳结果造成的高估
人工签字 研究者对数据事实、时间边界和最终结论承担责任

课后练习

  1. 基础理解。 AI 最适合在研究早期承担哪些工作,哪些决定必须由研究者确认?

    提示与答案AI 适合追问、解释小段代码、草拟测试和列出审查线索。市场与股票池、字段事实、时间边界、风险权限和最终结论必须由研究者用证据确认。

  2. 边界判断。 AI 能否直接确认某个数据供应商的字段在十年历史中从未修订?为什么?

    提示与答案不能。需要供应商版本记录、原始快照或可核验时间戳。AI 只能提醒研究者需要查哪些证据。

  3. 排错。 一份提示只写“帮我做个高胜率策略”。请列出至少六项 AI 会被迫猜测的决定。

    提示与答案可能包括市场、资产池、数据频率、信号时点、成交时点、费用、标签、持仓、风险限制、验证方式和放弃条件。任意六项并说明影响即可。

  4. 动手。 使用 AI 研究卡,为自己的毕业问题写一份提示,包含任务、已知事实、待查资料、禁止事项和交付格式。再要求 AI 每次只问三个问题。

    提示与答案高质量提示应把事实与假设分开,禁止猜测字段和查看测试答案,交付顺序先列问题,再给最小组件与测试。完成后检查 AI 是否仍偷偷增加参数。

  5. 开放思考。 AI 把每天可尝试的策略版本从两个提高到二十个,为什么研究结果反而可能更不可靠?你会怎样控制?

    评价要点尝试次数增加会放大选择偏差,也更容易污染测试集。应记录全部重要尝试,限制候选范围,使用滚动验证,预先写放弃条件,只在规则冻结后打开最终测试。

离开本页前
AI 在研究里可以追问空白、解释小段代码、草拟测试,也可以在另一次独立审查中专门找漏洞。数据字段是否正确、市场规则当前怎样、实验结果支持到哪里,仍要由官方资料和程序输出作证。研究日志把采用与拒绝都留下,参数的来路才不会在几轮对话后消失。