遇到量化问题时,怎样请 AI 帮忙¶
这一页放在手边随时查。它不再介绍一套新策略,只处理四件常见小事,补全研究问题、读懂代码、写检查和核对资料。

图中把一次协作分成六步。AI 可以参与第二步和第四步,数据时间、程序输出与最后的研究决定仍由人核对。
一段很顺的代码,为什么仍然不能交差¶
小林把一张行情表交给 AI,只写了一句“做一个动量策略”。几秒以后,屏幕上已经有下载数据、计算二十日收益、选择股票和画净值的完整程序。变量名很整齐,图也能显示。小林却回答不了几个普通问题。股票从哪些公司里选,二十日收益算到哪一刻,信号按什么价格成交,手续费有没有扣,图中的测试时期是否参与过参数选择。
这些问题不是代码细节。它们决定程序模拟的是哪一次交易,也决定曲线能否被相信。请求里留下的空白越多,AI 需要补的条件越多。回答看起来完整,许多决定却没有来路。
把 AI 给出的内容当作一份待核对草稿。能运行,只完成了语法检查;能说清时间、数据和证据,研究才开始站稳。
下面四种用法都从一个具体缺口出发。每次只交给 AI 一项工作,拿到结果以后立即核对,再决定是否继续。
想法太含糊时,请它只负责追问¶
“寻找强势股票”还不能交给程序。强势可能指过去五日上涨,也可能指过去一年跑赢同类;股票范围可能是今天仍上市的公司,也可能是每个历史日期当时可选的公司。任何一项没有说明,都会改变结果。
这时先禁止生成代码,让 AI 找空白。请求可以这样写。
我想研究“近期相对强势的股票是否会继续较强”。
现在不要写公式和代码。请逐项检查这句话还缺少哪些决定,至少覆盖研究市场、历史股票池、数据字段、信息完整时间、强势的计算方法、比较对象、最早成交时点、持有期、费用、基线和放弃条件。
每个问题后说明它为什么会改变研究结果。资料无法确定的地方写“待查”,不要替我猜。
一份有用的回答会把问题问到可以行动的程度。例如,它会追问“相对谁更强”,因为和自己的过去比较属于时间序列动量,和同一天其他股票比较属于截面动量。它也会追问信号在收盘前还是收盘后完成,因为这决定订单能否使用当天价格。
回答拿到手以后,由研究者填写。某项条件只能从交易所、数据供应方或平台文档确认,就保留“待查”。AI 可以提醒这里缺材料,不能替资料所有者给出事实。
代码看不懂时,请它沿着一行数据解释¶
直接问“解释这段代码”,常会得到一段概括。它可能说程序“计算指标并生成信号”,却没有告诉你第六行数据到底读了哪几天、结果又影响哪一段收益。
把任务缩到一个日期,解释会具体很多。假设代码中出现了这两行。
可以把请求改成下面这样。
请不要概括整段策略。只跟随第 25 行数据解释下面两行代码。
先列出 rolling(20) 在第 25 行读取的行号和日期,再说明比较结果何时完整。随后解释 shift(1) 把哪一天的信号放到了哪一天。请用一张四列表格回答,列名为日期、当时可见输入、生成的信号、对应持仓。
最后给出 25 行以内的虚构价格,使第 20 日第一次得到均线、第 21 日信号发生变化。不要下载真实行情。
这里要求虚构小样本,是为了让答案能够手算。收到表格后,自己计算第一个完整窗口的平均值,再检查 shift(1) 有没有把信号向后移动。若 AI 解释的日期与程序实际输出不同,以程序和手算为准,并把第一处不同的位置贴回去继续追问。
程序已经写好时,请它补能失败的检查¶
量化错误经常不报错。把未来数据放进特征、把多只股票混在一起移动、把费用符号写反,程序都可能顺利画图。测试要给这些错误准备一个会失败的例子。
假设已有函数 build_features(data),它根据历史数据制作特征。最先可以检查“未来新增的数据不应改变过去特征”。请求里要把这条关系写清。
请为 build_features(data) 写一个最小 pytest 测试。
测试数据由你在代码中构造,只含两只虚构股票、八个日期和收盘价。先用前六个日期计算特征,再用完整八个日期计算特征。比较两份结果共同日期的数值,未来两天加入以后,过去特征必须保持不变。
测试失败时,请打印第一只股票、第一处不同日期、两边数值和对应原始价格。不要放宽误差来掩盖差异。
这个测试只能守住一条边界。另一条常见错误是跨股票移动。可以再构造甲股票最后一天为 10 元、乙股票第一天为 100 元的极端小表,检查收益计算不会把 10 元与 100 元接成相邻两天。费用函数则可以检查“交易次数增加而其他条件不变时,总费用不能下降”。
AI 生成的测试也要读。若它调用了与被测函数相同的实现来计算预期值,两边可能一起犯错。好的预期来自手写数字、简单关系或另一种足够独立的计算方法。
涉及平台、规则和论文时,请它把事实交回来源¶
软件功能、交易规则和数据字段会变化。AI 可能记住旧版本,也可能把两个相似接口拼在一起。凡是答案会影响数据时间、成交资格、费用或程序调用,都要打开原始资料。
可以先让 AI 帮忙列检索方向,但请求中要限制来源。
我需要确认某量化平台的历史行情函数是否返回复权价格,以及该函数在研究环境和回测环境中有没有差别。
请只依据平台当前官方文档回答。每项结论后附上直接页面链接和对应章节名称。若官方资料没有写清,标记为“官方资料未说明”,不要用社区帖子补成确定答案。
回答最后列出一个五行以内的小实验,用来比较两个环境返回的同一股票、同一日期数据。
这种先找资料、再依据资料回答的方法叫作检索增强生成,英文全称是 Retrieval-Augmented Generation,常用缩写 RAG。它先取回与问题有关的页面,再让模型基于这些页面组织回答。工作方式很朴素,相当于先把几页官方说明摊在桌上,再请 AI 帮忙寻找和整理。
带链接仍不等于核验完成。打开链接,确认页面确实来自官方域名,文字支持的是眼前这项结论,发布日期或版本仍适用于自己的环境。来源只介绍今天的接口时,也不能自动证明十年前的历史数据使用同样口径。
结果太漂亮时,换一份对话专门找漏洞¶
参与过策略设计的对话已经知道研究者喜欢哪套解释。让同一段对话继续“客观评价”,它往往会沿用早期设定。可以新开一份没有旧讨论的对话,只提供最终研究卡、数据说明、关键代码、测试结果和逐日账本,请它站在反方位置审查。
这是一份已经完成初稿的量化研究。请不要改参数,也不要提出提高收益的方法。
请从数据可得时间、历史股票池、标签区间、训练与测试边界、订单成交、费用、收益集中和复现八个位置寻找会推翻结论的问题。每发现一项风险,都要引用我提供材料中的具体句子或字段,并给出一个最小检查办法。材料不足时写“无法判断”。
这种审查通常叫红队。红队回答不是裁决,它只是把可能失败的位置摆到桌面。若它说“可能存在未来函数”,却找不到具体列和时间关系,要求它指出哪一列最早何时可见,以及哪笔订单何时发生。泛泛的风险清单不能代替检查。
哪些材料不要交给公共模型¶
真实账户密钥、券商口令、身份证明、客户资料、未公开策略和受许可限制的行情,都不应直接贴进公共 AI 服务。处理报错时可以保留列名与数据类型,把真实代码、证券名称和数值换成虚构小样本。问题如果在脱敏后消失,说明还需要在受控环境中由有权限的人检查。
生成代码运行以前,也要看它会读写哪些文件、是否请求网络、会不会读取环境变量中的密钥。一个数据清洗问题通常不需要连接账户。多出的外部调用找不到明确用途,就先删掉或放进隔离环境测试。
研究日志怎样记,才不会变成聊天收藏夹¶
没有必要保存每一句寒暄。真正影响实验的内容要留下来,包括日期、使用的模型或工具、交给它哪些材料、它建议改什么、研究者是否接受、用什么证据检查,以及它有没有看过最终测试结果。
例如,AI 建议把动量窗口从二十日改成三十日。日志不能只写“优化参数”。它应记录建议来自哪段结果,当时测试集是否已经打开,三十日是否进入事先规定的候选范围。若这项修改看过测试答案,它就属于新的开发版本,原测试期不能继续冒充独立证据。
收到回答以后,按什么顺序检查¶
先确认 AI 有没有偷偷扩大任务。只让它解释函数,它却重写了策略,新增部分先放到一边。再检查回答中的事实来源,平台接口、市场规则和论文都回到官方文档或原文。代码放进虚构小样本运行,与手算比较第一处输出。最后才把通过检查的小改动放回完整研究,并记录版本。
| 收到的内容 | 最先核对什么 | 暂时不要做什么 |
|---|---|---|
| 研究问题补全 | 新增条件是否由你确认 | 直接采用自动填入的市场与参数 |
| 代码解释 | 一个具体日期的输入和输出 | 只看大段功能概括 |
| 新代码 | 手算样例、时间边界和异常输入 | 立即替换完整项目 |
| 外部事实 | 官方原文、日期和版本 | 因为带链接就直接相信 |
| 红队意见 | 是否指出具体证据位置 | 把泛泛风险当成确定错误 |
一分钟自测¶
AI 给出一段能够运行的因子代码,并引用了一页官方文档。程序已经通过语法检查,链接也确实存在。现在能否直接把结果写进研究结论?
查看答案
还不能。要确认官方页面支持的正是代码使用的字段与版本,再用小样本核对时间、分组和计算结果。代码还要进入与原研究相同的时间切分、成交、费用和账本流程。链接和运行成功各解决了一个小问题,没有替整项研究提供证据。遇到含糊想法时先让 AI 追问,读代码时跟随一个日期,写完函数后补能失败的小测试,碰到外部事实就回到原始资料。更完整的 AI 研究流程与五道练习见[第 31 课](../handbook/12-ai-first-strategy.md)。