7.10 生成你的第一个研究报告
课前导读
本章目标
学完能解决什么困惑:为什么量化研究不能只留下代码和图表,以及如何写出第一份可复现的 A 股研究报告。
适合谁学习:已经知道收益、回撤、向量化和项目文件夹,准备把一次研究完整记录下来的读者。
难度:beginner
预计用时:约 40 分钟
研究报告不是给别人看的面子工程。
它首先是写给未来自己的说明书。
当你一个月后回头看某次研究时,最需要的不是漂亮口号。
你需要知道当时问了什么问题。
用了哪份数据。
规则怎么写。
结果如何。
风险在哪里。
下一步准备改什么。
如果这些都没有记录,代码跑出来的数字就很难被信任。
知识正文
1. 类比:研究报告像病例小结
医生看完体检报告后,不会只说“指标还行”。
他会写病例小结。
小结里会说明检查目的、检查项目、异常指标、可能风险和后续建议。
量化研究报告也类似。
收益曲线、回撤曲线和分布图只是检查结果。
报告要把这些结果放回问题背景里。
比如:这次研究是为了观察均线趋势条件,还是为了比较成交量过滤效果。
比如:数据来自哪段 A 股历史行情,是否包含交易成本假设。
比如:结果看起来不错,但最大回撤是否超出新手可承受范围。
报告的作用,是让研究从“我感觉还不错”变成“我能解释为什么”。
2. 第一份报告的六个模块
入门阶段的研究报告不需要复杂。
建议固定使用六个模块。
第一,问题。
你到底想检查什么投资观察。
第二,数据。
你用了什么数据,来自哪里,覆盖什么时间。
第三,规则。
你如何把观察想法写成可计算条件。
第四,结果。
你得到哪些核心数字和图表。
第五,风险。
哪些地方可能导致结论不可靠。
第六,下一步。
你准备继续检查什么,而不是立刻实盘。
这六个模块像研究的骨架。
只要骨架稳定,每次研究都能对齐比较。
flowchart TD
A[问题] --> B[数据]
B --> C[规则]
C --> D[结果]
D --> E[风险]
E --> F[下一步]3. 问题:不要写得太大
新手常见问题是,一上来就写“我要找到赚钱策略”。
这个问题太大,也无法复现。
更好的写法是具体而克制。
例如:“观察 MA20 高于 MA60 的交易日,收益曲线是否更平稳。”
例如:“观察成交额过滤后,样本中的异常波动是否减少。”
例如:“比较扣除成本前后,某个简单规则的结果差异。”
问题越具体,数据和规则越容易对齐。
你也更容易判断报告是否回答了问题。
专业研究者不会从大口号开始。
他们会从可检查的小问题开始。
4. 数据:写清楚来源和口径
数据模块至少写四件事。
第一,数据来源。
例如来自行情软件导出的日线数据,或来自交易所公开资料整理。
第二,数据范围。
例如 2020-01-01 到 2025-12-31。
第三,字段。
例如日期、开盘价、最高价、最低价、收盘价、成交量、成交额。
第四,口径。
例如是否前复权,是否剔除停牌日,是否包含 ST 股票。
A 股研究特别需要写口径。
因为同一只股票,复权与不复权会影响均线和收益计算。
如果口径不写清楚,别人无法复现。
未来的你也无法判断结果是否可比。
5. 规则:用“如果……就……”表达
规则模块不要写成情绪判断。
不要写“走势不错时买入”。
要写“如果 MA20 高于 MA60,则记为趋势条件满足”。
不要写“成交量比较大”。
要写“如果当日成交量高于过去 5 日平均成交量,则记为放量”。
规则越像说明书,越容易用 Python 复现。
如果规则需要主观判断,也要写出主观判断的边界。
例如“异常公告日单独标记,不直接纳入普通样本结论”。
这不是让报告变僵硬。
这是让你的投资观察可以被复查。
6. 结果:指标少而清楚
第一份研究报告只需要少量指标。
累计收益:观察期结束时资金相对开始变化多少。
最大回撤:从历史高点到低点的最大下跌幅度。
交易次数:规则触发了多少次买卖或观察切换。
你也可以附上收益曲线、回撤曲线和分布图。
但不要把报告变成指标堆砌。
指标是为了回答问题,不是为了显得复杂。
如果问题是“过程是否平稳”,最大回撤就很重要。
如果问题是“是否过度频繁”,交易次数就很重要。
如果问题是“最终是否改善”,累计收益才有参考意义。
本章不展开完整评估体系。
更完整的回测评估会在第 9 章学习。
7. 风险:主动写出不确定性
好报告不是只展示好结果。
好报告会主动写风险。
数据可能有缺失。
复权口径可能影响均线。
成本和滑点可能被低估。
样本时间可能太短。
某段行情可能刚好适合规则。
T+1、涨跌停和流动性可能让信号无法按理想价格执行。
这些风险不是让你放弃研究。
它们让你知道结论的边界在哪里。
投资者需要边界感。
量化开发者也需要边界感。
没有边界的数字,很容易变成误导。
8. 下一步:从结论走向改进
报告最后不要只写“继续观察”。
这句话太空。
可以写更具体。
例如:“下一步检查不同年份结果是否一致。”
例如:“下一步加入基础交易成本后重算收益曲线。”
例如:“下一步比较有无成交额过滤的差异。”
例如:“下一步检查最大回撤发生期间的市场环境。”
下一步应该是可执行动作。
它连接本次研究和下一次研究。
这就是研究闭环。
9. 一个最小报告模板
你可以把下面模板保存到 reports 文件夹。
# 研究报告:MA20 与 MA60 趋势观察
## 1. 问题
本次研究想检查:MA20 高于 MA60 时,样本走势是否更平稳。
## 2. 数据
数据范围:2020-01-01 至 2025-12-31。
数据字段:日期、收盘价、成交量、成交额。
数据口径:前复权日线数据,成本假设另行记录。
## 3. 规则
如果 MA20 高于 MA60,则趋势条件满足。
信号在收盘后确认,最早用于下一个交易日观察。
## 4. 结果
累计收益:示例 8.4%,请替换为你的计算结果。
最大回撤:示例 -6.2%,请替换为你的计算结果。
交易次数:示例 12 次,请替换为你的统计结果。
核心图表:收益曲线、回撤曲线、收益分布图。
## 5. 风险
样本时间有限,结果可能依赖特定行情。
交易成本、滑点、涨跌停影响需要继续检查。
## 6. 下一步
加入成本假设,并按年度拆分结果。模板里的示例数字只是格式演示,你研究时应替换成自己的计算结果。
最终提交报告前,应填写成具体数字或说明无法计算的原因。
10. 用 Python 输出核心指标
下面示例展示如何把指标整理成报告素材。
它不依赖真实联网数据。
metrics = {
"累计收益": "8.4%",
"最大回撤": "-6.2%",
"交易次数": 12,
}
for name, value in metrics.items():
print(f"- {name}: {value}")这段代码的重点不是计算指标。
重点是把指标用统一格式输出。
如果每次报告都用同样字段,你就能比较不同研究。
当你以后学习第 9 章回测系统时,这种统一格式会非常有用。
但现在不需要提前展开完整系统。
先把一次研究讲清楚,比堆复杂代码更重要。
11. A 股案例:一份报告如何避免误导
假设你研究某个股票池的均线条件。
报告里显示累计收益为 12%。
如果只写这个数字,读者可能以为策略很好。
但你继续写:最大回撤为 -18%,交易次数为 46 次。
你还写:结果未加入完整滑点估计,且某一年贡献了大部分收益。
这时结论就更稳健。
它不再是“策略能赚钱”。
它变成:“在当前样本和假设下,规则有一定观察价值,但回撤较深,且结果可能依赖特定年份。”
这种表达更接近专业研究。
它不会给新手制造过度自信。
它也方便下一步继续检查。
关键心得
研究报告的价值,不是证明自己正确,而是让结论、证据和风险放在同一张桌面上。
交互实验室
练习 1:写出你的研究问题
请用一句话写出一个小问题。
格式可以是:“我想检查……是否……”
例如:“我想检查成交额过滤后,均线信号是否减少异常波动。”
注意,不要写“我要找到稳赚方法”。
量化研究从可检查问题开始。
练习 2:填写六模块报告
请在 reports 文件夹里创建一份研究报告。
按顺序写六个标题。
问题。
数据。
规则。
结果。
风险。
下一步。
每个标题下面先写两到三句话。
如果没有真实数据,就写模拟数据,并明确说明是练习样本。
不要把模拟结论当成投资结论。
练习 3:给指标写中文解释
请写下三个指标的中文解释。
累计收益:观察期结束时资金整体变化。
最大回撤:从历史高点往下掉得最深的幅度。
交易次数:规则触发交易或观察切换的次数。
然后写一句风险说明。
例如:“这些指标只描述历史样本,不能保证未来表现。”
练习 4:生成下一步动作
请从下面四个动作里选择一个。
按年度拆分结果。
加入基础交易成本。
检查最大回撤发生阶段。
对比是否加入成交额过滤。
把选择写进报告的“下一步”。
下一步必须具体到能执行。
核心复盘
知识清单:
- [ ] 我知道第一份研究报告应包含问题、数据、规则、结果、风险和下一步。
- [ ] 我能把模糊投资想法改写成可检查研究问题。
- [ ] 我知道数据模块要写清来源、范围、字段和口径。
- [ ] 我理解累计收益、最大回撤、交易次数只是入门指标,不代表完整评估。
- [ ] 我会主动写出样本、成本、滑点、涨跌停和流动性等风险边界。
金句总结
没有报告的研究,只是一次临时计算;有结构的报告,才是可复现的证据。