第 31 课 让 AI 参与研究,而不替你偷偷作决定¶
AI 能把陌生代码解释得更慢一些,也能快速提出测试与反例。真正可靠的合作从明确边界开始,研究问题、数据事实和最终结论仍由研究者负责。
一句“帮我做个赚钱策略”会发生什么¶
第一次使用 AI 的小周输入了一句话。“帮我写一个胜率高的量化策略。”几秒后,他得到一段很长的代码,其中包含双均线、止损、仓位和回测图。程序甚至打印了漂亮指标。问题在于,小周不知道代码默认交易什么资产,不知道均线使用哪一个时点的价格,也不知道订单何时成交。手续费被写成零,数据来自今天仍然存在的股票,测试区间还参与了参数选择。
这段代码运行得很顺利,却没有形成可以相信的研究。模糊任务留下许多空白,AI 会根据常见示例自动填补。它填入的参数未必符合你的市场,填入的时间规则可能产生未来数据,引用的平台接口也可能已经变化。输出越完整,初学者越容易误以为这些默认决定已经经过验证。
更合适的起点,是把 AI 当成四种受约束的助手。第一种角色负责追问,把模糊想法拆成可回答的问题;第二种角色负责解释与草拟,每次只处理一个小组件;第三种角色负责生成边界测试;第四种角色负责寻找漏洞和反例。它可以在四种角色之间切换,研究者始终保留决定权和证据责任。

上图中的合作顺序值得留意。人先写出研究问题和已知事实,AI 帮助找出空白;数据时间和交易规则经过核验后,AI 才开始草拟小段实现;程序测试与人工手算给出反馈,最后再由独立审查寻找遗漏。若跳过中间检查,合作会退化成“生成一大段代码,再凭结果猜它是否正确”。
先让 AI 做采访者¶
本课继续使用一个教学想法。中期相对强、长期趋势向上的资产,未来几天可能继续相对强;短期涨得过快时暂不追入。这句话听起来已经很具体,实际仍有许多空白。“中期”是二十日还是六十日,“相对强”与谁比较,“未来几天”从哪个可成交时点开始,都需要研究者说明。
第一轮对话不要写代码。让 AI 把自己限制成采访者,并要求它每次只问少量问题。这样初学者可以逐项理解,避免一次面对几十个陌生术语。
我正在学习量化,希望研究下面这句话。
“中期相对强、长期趋势向上的资产,未来几天可能继续相对强;短期涨得过快时暂不追入。”
请先当采访者,不写代码,不推荐最佳参数,也不评价能否盈利。
按市场与股票池、数据时间、信号、标签、组合、订单、成本、验证和放弃条件检查空白。
每次只问三个问题。出现术语时,用一句普通中文解释,并给一个小例子。
这段提示包含任务、禁止事项、检查范围和输出节奏。AI 如果问“你的股票池如何确定”,研究者不能回答“全市场”就结束,还要说明历史每个日期如何保存当时可交易成员。AI 如果问“信号何时形成”,研究者要回到真实数据可得时间。对话的价值来自这些逐步澄清,而非句子写得多么漂亮。
把回答写成一张研究卡¶
口头对话很容易在几十轮后互相矛盾。研究卡把关键选择放进一张表,后续每次修改都能留下痕迹。下面是一份教学版本,其中的二十日、六十日和五日只是演示参数,正式研究需要说明选择理由,并检查邻近范围。
| 栏目 | 当前教学决定 | 仍需核验的证据 |
|---|---|---|
| 市场与股票池 | 日线资产池,使用历史每个日期真实可交易成员 | 股票池变更、停牌、退市与上市日期记录 |
| 中期强势 | 过去 20 日收益在同日资产中的排名 | 复权方式与窗口缺失处理 |
| 长期趋势 | 收盘价高于过去 60 日平均价 | 收盘字段时间与停牌日规则 |
| 短期过热 | 过去 5 日涨幅进入极高区域时暂不选择 | 阈值只在训练与验证期确定 |
| 标签 | 从下一可成交时点开始的未来 5 日相对收益 | 起点、终点与基准必须逐日核对 |
| 组合 | 先选择高分资产并等权持有 | 持仓数量、行业和流动性限制 |
| 订单 | T 日收盘后计算,T+1 进入可成交时段 | 使用开盘、均价还是限价情景 |
| 成本 | 费用、价差与三档滑点压力 | 市场规则、最低费用和冲击假设 |
| 验证 | 按时间滚动,规则冻结后打开最终测试 | 标签重叠隔离与尝试次数记录 |
| 放弃条件 | 扣费样本外不优于简单动量,或结果集中在少数日期 | 事先写入研究日志,避免事后修改 |
研究卡填完后,让 AI 只检查内部冲突,不急着改写方案。可以明确要求它引用有问题的原句,说明影响,并把无法确认的事实标成待查。这样能减少它用常识补全数据供应商、交易所或平台规则。
下面是我的研究卡。请检查各栏是否互相冲突。
重点核对特征截止时间、标签起点、订单时间、成交时间和财务数据可得时间。
发现问题时引用对应栏目,说明它会怎样影响回测,并给出最小核验方法。
材料不足时写“待查官方资料”,不要猜测字段含义和平台规则。
一次只生成能够手算的小组件¶
研究卡明确以后,仍不适合直接要求完整策略。完整系统会同时包含数据读取、特征、排名、信号、仓位、订单、费用和图表,任何一步出错都可能被最终曲线掩盖。把任务缩小到一项可以手算的输出,错误范围会清楚许多。
第一项任务可以只计算三列特征。提示中写清输入顺序、输出定义、禁止行为和测试数据。AI 需要解释每个 rolling 与 shift 的时间含义,数据不足时保留空值,也不能下载未知来源的数据。
请用 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 最适合在研究早期承担哪些工作,哪些决定必须由研究者确认?
提示与答案
AI 适合追问、解释小段代码、草拟测试和列出审查线索。市场与股票池、字段事实、时间边界、风险权限和最终结论必须由研究者用证据确认。 -
边界判断。 AI 能否直接确认某个数据供应商的字段在十年历史中从未修订?为什么?
提示与答案
不能。需要供应商版本记录、原始快照或可核验时间戳。AI 只能提醒研究者需要查哪些证据。 -
排错。 一份提示只写“帮我做个高胜率策略”。请列出至少六项 AI 会被迫猜测的决定。
提示与答案
可能包括市场、资产池、数据频率、信号时点、成交时点、费用、标签、持仓、风险限制、验证方式和放弃条件。任意六项并说明影响即可。 -
动手。 使用 AI 研究卡,为自己的毕业问题写一份提示,包含任务、已知事实、待查资料、禁止事项和交付格式。再要求 AI 每次只问三个问题。
提示与答案
高质量提示应把事实与假设分开,禁止猜测字段和查看测试答案,交付顺序先列问题,再给最小组件与测试。完成后检查 AI 是否仍偷偷增加参数。 -
开放思考。 AI 把每天可尝试的策略版本从两个提高到二十个,为什么研究结果反而可能更不可靠?你会怎样控制?
评价要点
尝试次数增加会放大选择偏差,也更容易污染测试集。应记录全部重要尝试,限制候选范围,使用滚动验证,预先写放弃条件,只在规则冻结后打开最终测试。
AI 在研究里可以追问空白、解释小段代码、草拟测试,也可以在另一次独立审查中专门找漏洞。数据字段是否正确、市场规则当前怎样、实验结果支持到哪里,仍要由官方资料和程序输出作证。研究日志把采用与拒绝都留下,参数的来路才不会在几轮对话后消失。