跳转至

第 33 课 完成第一个可解释的量化研究

毕业项目不要求找到最赚钱的策略。它要求你从一个可以被推翻的问题出发,留下数据、规则、账本、验证、失败分析和模拟计划,让另一位读者能够重新检查。

适合谁准备把全书知识汇入一个完整项目,并继续建立长期学习路线的读者
前置知识至少完成第 0 至 24 课、第 31 课和第 32 课;机器学习路线可按项目需要选修
建议用时先用 90 分钟规划,再用 4 至 8 周完成
本课成果一份可执行任务书、一篇小论文式报告和一张毕业验收表

最后一课从一个空文件夹开始

假设你已经读完前面的课程,知道均线、动量、回撤和滚动验证,也能让 Python 计算一张表。此时最容易出现两种冲动。第一种是继续收藏更多策略,等“知识足够多”再开始;第二种是把所有学过的指标、模型和 AI 工具一起塞进一个项目,希望复杂度证明自己已经进阶。

真正能推动能力增长的做法,是选择一个范围很小的问题,把完整流程走到底。你会在过程中发现,写信号可能很快,确认字段时间、处理缺失、核对订单、解释失败时期和重新运行通常会占用更多时间。毕业项目把这些工作都当作成果,而没有只留下最终净值。

本课使用一项教学问题贯穿示范。过去二十日相对更强、且价格位于六十日平均线以上的资产,在未来五个交易日是否仍然具有相对优势?这个问题故意保持朴素,读者可以用前面已经理解的工具完成。若你更熟悉单一指数、期货或基金,也可以更换研究对象,但每次只保留一个核心问题。

先写一段能够被数据否定的问题

研究问题需要说明对象、现象、时间和比较基线。下面这段话可以直接作为任务书的起点。

本项目研究一组教学资产在日线频率下的中期相对强弱。每个交易日收盘后,使用当时已经可得的价格计算二十日收益,并用六十日平均线过滤长期方向。下一可成交时点建立等权组合,持有五个交易日。项目比较最简单的二十日动量、加入趋势过滤后的版本和不交易基线,并在扣除教学成本后检查滚动样本外结果。若过滤版本没有稳定超过简单动量,或结果主要来自少数日期,本项目接受无增量结论。

这段话已经写入放弃条件,因此研究者看见结果以后不容易临时改变问题。它仍然没有决定股票池、复权方式、成交价、换仓重叠和成本数字,这些内容要进入数据卡与策略卡。研究问题负责提出假设,后面的材料负责让假设可执行。

第一份交付是数据说明,而不是模型

数据说明要让读者知道每一行来自哪里、何时可见、如何变化。至少写出来源与版本、资产范围、日期范围、字段定义、时区、复权、缺失、重复、停牌、上市与退市处理,以及历史股票池怎样保存。

可以从一张数据卡开始。

数据项目 毕业项目需要填写的内容 初学者最容易漏掉的问题
资产范围 市场、品种、历史成员规则 用今天的资产名单回填过去
时间范围 起止日期、交易日历、时区 把自然日和交易日混在一起
价格字段 开高低收、复权口径、最早可得时刻 用收盘信号按同一收盘价成交
成交字段 成交量、成交额、停牌与价格限制 默认所有订单必然成交
财务字段 公告日、修订日、原始期末 把财报期末当成市场可见日
缺失处理 保留、删除、等待或阻止 用零填造未知数据
版本记录 文件摘要、下载日期、处理脚本 数据更新后无法复现旧结果

毕业项目可以使用虚构行情或公开教学数据。数据少一点没有关系,只要时间与规则清楚。无法获得历史股票池时,可以把范围缩成一只长期存在的教学资产,并在报告里明确局限。承认数据边界比用不可靠名单假装完成全市场研究更有价值。

第二份交付是能够逐字执行的策略卡

策略卡要把自然语言变成没有歧义的步骤。指标是什么,信号在哪一刻形成,订单何时提交,成交价怎样模拟,持有多久,何时退出,资金如何分配,费用如何扣除,都要写清。

步骤 本项目的教学规则 必须留下的检查
指标 T 日收盘后计算过去 20 日收益与过去 60 日均价 只使用 T 日及以前价格
排名 在 T 日可交易资产中按 20 日收益排名 历史股票池和同日缺失处理
过滤 收盘价高于 60 日均线才保留 过滤前后样本数变化
目标 选择排名靠前的一小组资产并等权 行业、流动性和持仓上限
订单 T 日收盘后形成,T+1 使用规定成交情景 信号、计划、成交三种时间
持有 教学版持有 5 个交易日,按规则再平衡 多批持仓是否重叠
成本 买卖均扣费用与滑点,另做高成本压力 换手定义和费用扣除位置
退出 到期、信号退出或风险停止 停牌与无法卖出如何处理

二十日、六十日和五日都要写出来源。它们可以来自策略机制与常见月度节奏,不能声称是市场最佳答案。验证阶段应展示邻近范围,例如十八至二十二日和五十至七十日,检查结果是否只在一个尖点成立。候选范围需要在最终测试以前冻结。

第三份交付是三张答案已知的小表

正式回测以前,先构造极小数据。第一张表验证指标。可以使用连续上涨、连续不变和先涨后跌的价格,手算两三个窗口。第二张表验证横截面排名。每天只放三只资产,手工写出名次与入选结果。第三张表验证账本,安排一次买入、一次部分持有和一次卖出,手算现金、持仓、费用和权益。

小表的价值在于答案独立于程序。若程序与手算不同,研究者知道应修代码,而不会被一条漂亮曲线说服。测试还应包含历史不足、字段缺失、重复行、停牌、末尾追加未来极端价格和数据截断。任何未来数据的新增都不应改变早期特征与信号。

可以把检查顺序画成下面这条链。每一关通过后,才把输出交给下一关。

flowchart LR
    accTitle: 毕业项目从原始数据到研究结论的验收链
    accDescr: 原始数据先通过数据卡与质量检查,再生成特征和信号,人工样例验证后进入订单与逐日账本,随后进行样本外验证和失败分析,最后才形成模拟盘计划
    data["原始教学数据<br/>来源、时间、版本"] --> quality["数据检查<br/>缺失、重复、可见性"]
    quality --> feature["特征与信号<br/>前缀稳定测试"]
    feature --> example["人工小样本<br/>答案逐项一致"]
    example --> ledger["订单与账本<br/>现金、持仓、费用"]
    ledger --> validation["滚动样本外<br/>基线、压力、消融"]
    validation --> failure["失败分析<br/>时期、资产、假设"]
    failure --> paper["模拟盘计划<br/>监控、停机、复盘"]

第四份交付是能够追踪每一元钱的回测账本

回测结果表至少包含日期、原始信号、目标仓位、计划订单、模拟成交、实际持仓、现金、费用和组合权益。信号与持仓之间要有明确延迟,无法成交的订单保留状态。组合收益从持仓和价格变化逐日计算,不能直接把信号乘以同日收益后累加。

抽查应集中在信号变化附近。随机选取一次首次建仓、一次再平衡、一次退出和一次无法成交,沿时间手算。检查前一天现金加上今天卖出所得,减去买入支出和费用,是否等于今天现金;检查持仓数量乘以价格再加现金,是否等于组合权益。

账本通过以后才汇总净值、回撤、换手和风险指标。任何图表都应从最终账本生成,正文数字与图使用同一版本。若修改一项成本,报告中的指标与图应一起更新,避免手工复制产生版本不一致。

第五份交付是基线、消融和压力测试

主策略至少与三个参照比较。空仓基线告诉我们没有交易时权益如何变化;买入并持有或市场基准告诉我们市场方向贡献;仅使用二十日动量的简单版本告诉我们六十日过滤是否提供独立增量。

消融会一次删除一个组件。先比较简单动量,再加入趋势过滤,最后才加入其他限制。如果同时增加过滤、止损和新数据,结果变化无法归因。毕业项目不要求每个组件都有效,删除一个无增量部件是合格结论。

压力测试应改变最关键假设。费用提高,成交推迟,滑点增大,部分订单不成交,股票池减少,起止日期移动,参数在邻近范围变化。结果随成本平滑下降通常符合直觉;费用升高以后收益反而大幅增加,可能暗示成本符号、换手或订单逻辑有错。

第六份交付是按时间推进的独立验证

毕业项目使用第 17 课的滚动验证。每一轮只用较早窗口确定规则与参数,再把冻结方案应用到紧随其后的验证窗口。标签跨越五日时,训练结束与验证开始之间需要隔离,避免两个集合共享同一段未来结果。

最终测试窗口只在特征、参数、成本、停止规则和报告模板冻结后打开一次。若看到测试结果后又修改策略,新版本的测试已经吸收前一次反馈,应诚实记录并寻找新的独立数据。测试集不是一个永远可重复查询的排行榜。

报告不能只放所有窗口的平均值。每一折的收益、回撤、换手、持仓数量、成本和相对基线差值都要保留。一个版本在五折中只靠一折获胜,其证据明显弱于四折小幅一致改善。还要按市场阶段、资产和行业拆分,寻找结果集中与失败环境。

第七份交付是失败分析

失败分析回答哪些证据与原假设不一致。趋势过滤可能没有改善预测,只减少交易;收益可能完全来自高波动阶段;某个行业可能贡献绝大部分结果;高成本情景可能吞掉全部优势;邻近参数可能迅速失效。每一项都值得写入正文,而非藏在附录。

一份有用的失败分析会区分实现错误、数据限制和假设未成立。实现错误修复后需要重新运行;数据限制要求缩小结论范围;假设未成立则允许项目停止。研究者不必为了交作业不断增加条件,直到历史曲线转正。

还可以加入一个负对照。例如,把信号日期整体打乱,或使用一个按机制不应相关的特征。负对照若与主策略同样好,说明结果可能来自市场暴露、股票池结构或回测错误。负对照不是要证明策略无效,它帮助判断当前证据是否具有区分力。

第八份交付是 AI 参与记录

若项目使用 AI,应保存它在哪些步骤提供帮助。研究者可以让 AI 追问研究卡、解释小段代码、草拟测试和进行红队审查。数据字段、平台规则、时间事实和最终结论需要由人用官方资料与程序输出核验。

报告中可以放一张简短表格,记录提示目的、AI 建议、人工决定和核验证据。无需公开敏感对话,也不要包含账户信息。重点是说明参数和规则从哪里来,哪些建议被拒绝,以及 AI 是否已经看过测试结果。

第九份交付是模拟盘任务书

把第 32 课的每日流程应用到毕业策略。写出数据预计何时到达、门禁检查什么、信号何时生成、风险限制如何阻止订单、订单编号怎样防止重复、收盘后如何对账。至少安排数据迟到、程序重启、部分成交和持仓不一致四种故障演练。

模拟盘任务书还要写停止新单、逐步降仓和紧急处理的区别。每个停机条件包含数值阈值、立即动作、通知对象、恢复证据和批准权限。项目不需要连接真实券商,使用虚构订单也能完整演示运行逻辑。

毕业项目的模拟阶段主要检验过程。连续运行是否准时,数据缺失是否被阻止,重复订单是否为零,持仓差异能否解释,日志能否重放。短期模拟盈亏只作为记录,不作为项目评分中心。

把九份材料写成一篇小论文

最终报告可以按摘要、研究问题、数据、方法、验证、结果、失败分析、运行计划和结论组织。摘要用一段话说明研究对象、核心假设、主要方法、最重要证据和局限。它不能写收益承诺,也不能把一段历史推广到所有市场。

数据章节说明来源、版本、字段和最早可得时间。方法章节让读者能够重新计算信号、订单和费用。验证章节先写时间切分,再写基线、消融和压力测试。结果章节先展示逐折证据,随后才展示汇总图。失败分析保留不利结果,运行计划说明模拟盘如何发现研究与现实之间的偏差。

结论的范围应与证据相同。若项目只研究一组虚构日线资产,就只能说明这套教学数据和假设下发生了什么。不能从一段样本推断未来一定盈利,也不能把相关关系写成经济因果。清楚的边界不会削弱报告,反而让读者知道哪些部分已经验证,哪些仍然未知。

图表要帮助读者追问

毕业报告至少准备数据时间线、策略流程、净值与回撤、逐折结果、换手与成本、参数邻域和失败时期分解。每张图的标题或图注写清数据口径、费用、日期和基线。主文只放最能回答研究问题的图,诊断细节可以进入附录。

颜色应兼顾色觉差异,红绿之外加入线型、标记或文字。纵轴截断时明确标注,不能用视觉比例放大小差异。净值与回撤最好上下对应,让读者看到收益与痛苦发生在同一时间。参数热力图展示完整邻域,不能只标出最佳格子。

图表代码直接读取最终结果表。手工把数字复制进绘图脚本,会让正文、表格和图逐渐分叉。删除缓存后重新运行,所有图应自动更新并带上同一项目版本。

从空白环境复算一次

交付以前,新建空白环境,从锁定的数据版本和说明文件开始运行。安装依赖、执行数据检查、生成特征、运行测试、回测、验证和图表。另一位读者无需询问作者,就应得到相同日期的信号和相近结果。

若完整数据不能公开,可以提供虚构小样本、数据字典、生成脚本和预期输出。受许可限制的路径在说明中明确标注,不能把无法分享的私有文件写成默认必需项。复现的核心,是让每项选择和中间结果都能检查。

最后随机抽取信号变化附近的日期,再手算指标、订单和权益。把费用提高、成交推迟、样本边界平移,结果变化应符合逻辑。若一次微小改动产生无法解释的巨大变化,先回到实现和数据,不急着写结论。

用四级能力判断自己走到了哪里

第一层是能够解释。读者可以用普通中文说明收益、波动、回撤、未来数据、样本外、交易成本和信号到成交的时间线,也能阅读短小的 pandas 代码。

第二层是能够复现。研究者可以从策略卡实现透明规则,用人工小表检查时序,生成完整账本,加入成本和基线,并保留数据版本与研究日志。

第三层是能够质疑。研究者会主动寻找幸存者偏差、标签泄漏、重复试验、理想成交和隐藏风险暴露,能够安排滚动验证、压力测试、负对照和消融,并接受复杂模型没有增量。

第四层是能够负责。研究者会冻结研究协议,保存失败结果,管理数据与模型版本,设计模拟盘、对账、监控和停机流程,也能清楚说明当前证据不足以支持哪些行动。

flowchart LR
    accTitle: 从理解概念到对研究负责的四级能力阶梯
    accDescr: 学习者先能解释概念,再能独立复现,随后能够质疑证据,最后对版本、运行与停止条件负责;复盘会把新问题送回基础学习
    explain["能够解释<br/>概念与时间线"] --> reproduce["能够复现<br/>数据、规则与账本"]
    reproduce --> challenge["能够质疑<br/>偏差、基线与失败"]
    challenge --> own["能够负责<br/>版本、监控与停止"]
    own --> review["定期复盘<br/>带着问题继续学习"]
    review -.-> explain

“精通”没有一个永远完成的终点。市场会变化,数据会修订,工具会更新。成熟研究者的特征,是能在新问题面前重新建立证据链,而非记住最多策略名称。

量化为什么同时需要数学、计算机和金融

数学帮助我们表达不确定性。概率与统计用于理解样本波动、估计误差、相关性和多重试验;线性代数帮助理解回归、协方差、神经网络和组合;微积分与优化帮助理解损失怎样推动参数更新。初学阶段先掌握均值、方差、概率、相关、回归和矩阵直觉,遇到具体模型再补推导,会比脱离问题背公式更容易。

计算机让研究能够重复。Python 只是入口,后续还要学习数据结构、测试、版本管理、数据库、任务调度、日志和权限。一个公式正确的策略,如果数据处理无法复现、程序重启会重复订单,仍然不具备可靠性。工程能力的价值,是把一次偶然运行变成可检查的过程。

金融知识决定问题是否贴近市场。资产为何交易,订单如何排队,价格限制和停牌怎样影响成交,公司信息何时公开,风险来自方向、杠杆、流动性还是拥挤,都不能由模型名称替代。策略效果也会因参与者竞争、制度改变和容量扩大而衰减。

三条路线彼此制约。数学很强却不了解数据时间,容易精确估计一个无法交易的关系;代码很快却不了解统计,容易把随机波动写成系统;熟悉市场却缺少可复现工具,经验难以被检验。量化的“艺术”体现在如何把三者放进同一项有限、诚实、能失败的研究中。

毕业以后怎样继续十二周

前四周可以补数学基础。围绕自己的毕业项目重学收益分布、条件概率、置信区间、线性回归和矩阵运算,每个概念都回到真实表格手算一次。第五至第八周补计算机基础,把项目增加配置、测试、版本锁定、日志和从空环境复现。

第九至第十二周补金融与研究阅读。选择一项经典策略的原始论文,先写它预测什么、数据何时可见、最简单基线是什么,再阅读公式。随后只做概念复现,明确自己与论文在市场、样本、成本和执行上的差异。无法获得点时数据时,直接说明限制。

每周至少产生一件可检查材料,例如一页推导、一张数据卡、一个失败测试、一份论文时间线或一次项目复算。阅读速度不是目标,输出会暴露理解空白。每月回看一项旧研究,不增加新指标,只检查数据、时间、成本和新样本。

建立作品集时保留失败项目

三到五项完整研究比几十张收益截图更能说明能力。每项作品包含研究问题、数据卡、策略卡、时间线、人工测试、回测账本、样本外设计、成本压力、失败条件和复现说明。页面首先回答做了什么与如何检查,再展示结果。

失败项目也应保留。可以写“为什么这个假设没有通过”,说明实现错误已经排除,哪些市场时期与预期相反,剩余不确定性是什么。只展示幸存赢家会隐藏研究者实际尝试了多少次,也无法证明他会在证据不足时停下。

作品集不提供收益承诺,不暗示历史结果可以复制到未来,也不把模拟盘描述成真实资金经验。引用论文时说明借用了哪个定义,当前实验改了哪些条件,并把原始来源列入参考文献。市场、样本和成本不同,复现不一致也能帮助研究者发现条件怎样改变结论。

毕业项目最终交付表

文件或页面 必须回答的内容 合格的证据
研究问题 对象、机制、基线和放弃条件 一段可被数据否定的任务陈述
数据说明 来源、版本、字段、可得时间和缺失处理 数据卡、质量报告和时间样例
策略规则 指标、信号、订单、仓位、退出和费用 策略卡与时间流程图
人工测试 简单输入应得到什么答案 三张小表与通过记录
回测账本 每日现金、持仓、成交、成本和权益 可抽查的逐日明细
验证报告 时间切分、隔离、基线、消融和压力 每一折结果与最终测试记录
失败分析 哪些时期、资产和假设没有成立 反例、负对照与局限清单
AI 记录 AI 提了什么,人怎样核验与决定 提示目的、人工结论和证据
模拟盘计划 日程、门禁、监控、停机、恢复和复盘 故障演练与验收标准
复现说明 他人怎样从空环境重新运行 依赖、数据版本、命令和预期输出

最终自测

如果把策略名称和作者姓名删掉,只留下数据、规则、测试和报告,另一位读者能否重新得到相同日期的信号、订单和相近回测结果?他能否指出什么证据会让项目停止?

查看判断标准 数据版本、字段时间、参数、订单、费用和切分都明确,并附答案已知的测试,才接近可复现。仍依赖“按经验处理”“通常可得”或“到时人工看看”的位置需要继续补清。放弃条件也应在结果以前写入。

课后练习与毕业检查

  1. 复述。 不使用代码,用一页纸讲清毕业策略从数据到模拟盘的完整流程。

    评价要点应覆盖数据来源与时间、特征、信号、订单、持仓、费用、验证、失败分析和停机条件,且先后顺序清楚。

  2. 复现。 从空白环境重新运行项目,只使用说明文件与锁定的数据版本。

    评价要点另一位读者无需询问作者即可得到主要中间表和报告。失败时应有明确错误信息,不能依赖电脑上未说明的旧缓存。

  3. 质疑。 列出最可能推翻结论的三个原因,并为每个原因设计一项可以执行的检查。

    评价要点原因应触及数据、时间、成交、成本、选择偏差或市场机制。检查需要产生明确结果,不能只写“以后多观察”。

  4. 负责。 写出模拟盘的三项主要风险、暂停权限和恢复流程。

    评价要点每项包含数值阈值、立即动作、通知对象、对账步骤和版本回退。避免“异常时人工决定”等含糊表述。

  5. 公开表达。 写一段不包含收益承诺的项目摘要,并说明一项最重要的失败结果。

    评价要点摘要应说明研究问题、数据、方法、主要证据、失败环境和用途,明确历史与教学结果不代表未来。失败结果应进入正文,不能用含糊措辞淡化。

全书终点
当你能够从一句模糊观察出发,独立完成研究问题、数据说明、策略规则、人工测试、逐日账本、滚动样本外验证、成本压力、失败分析、AI 审查和模拟盘计划,并愿意在证据不足时停止,你已经跨过“会运行策略代码”与“会做量化研究”之间最重要的门槛。接下来可以前往练习索引逐项完成作品,也可以回到策略地图,为下一项研究重新走一遍同样的证据链。

打开练习与毕业项目索引