交易七步 卷七 · 复盘与系统 第三十九集
第 三 十 九 集

手工回测:不用编程也能验

规则成文了,但它有没有正期望,你知道吗?

不知道。你只有猜测。猜测的办法是回测——而回测给不了你结论,只能给你倾向。

这一集讲最小可行的手工回测,以及它那必须先说清楚的边界。

第 38 集的 17 条规则里,有一条最核心:R4——你的买入触发条件。它决定你的方法有没有正期望。

验证它不需要编程。需要的是:行情软件、一张表、几个小时的耐心。以及最重要的——对结果边界的诚实。

0 1回测回答的唯一问题

先把回测能干什么、不能干什么钉死。

回测只回答一个问题:如果历史上每次都按这条规则做,期望是正是负 能回答 · 这条规则在历史样本上,平均每笔约赚约亏多少(期望值的符号与量级) · 胜率与盈亏比的大致组合,以及它需要多高的胜率才保本(第 34 集公式) · 最长连续亏损大约多少次——对心态预案(第 31 集)的直接输入 不能回答 · 这条规则未来会不会继续有效(历史不保证未来,第 38 集的"规律会变") · 精确的胜率——样本量决定了它只能给一个很宽的范围 · 参数的最优值——回测里最优的止损,往往是过拟合出来的幻觉 一句话:回测能排除明显错的规则,不能证明一条规则是对的。
图 39-1 回测的能力边界。它是过滤器,不是验证器——这一集的结论都建立在这句话上。

为什么"未来会不会有效"回答不了?因为回测的全部证据来自历史,而历史与未来的关系没有任何数学保证。这一集能做的,是把"历史证据"尽量收得干净,然后诚实地告诉你它值几分。

还有一件事要说在前面:手工回测很枯燥。两个小时翻 K 线,可能只记下十几个信号,中间没有任何刺激。它的回报是延迟的——省下的不是这几个小时,是几个月用真实资金给坏规则陪跑的时间。按这个口径算,它是全书性价比最高的几个小时的之一。

0 2手工回测的完整流程

五个步骤,需要:行情软件(前复权)、一张表、几小时 第 1 步 · 把规则改写成纯机械条件 抄第 38 集 R4 的触发与动作,删掉所有需要判断的词。写不出机械条件,先回第 38 集补。 第 2 步 · 定样本框:标的 × 时间窗 先定时间窗(如 2024-01 至 2025-12),再定标的范围。顺序不能反——先看结果再挑时间就是作弊。 第 3 步 · 逐页翻历史 K 线,记录每个信号 用纸挡住当前页之后的部分。每见一个满足触发条件的时刻,记:日期、模拟买入价、止损位。 第 4 步 · 逐笔模拟到完结 从买入日起往后看:先触发止损还是先到目标?记结果与盈亏幅度。未完结的剔除。 第 5 步 · 统计四项并对照保本线 已完结样本的:笔数、胜率、平均盈亏、期望值(扣成本)。对照第 34 集的保本胜率公式。 全程只允许使用"当时能看到的信息"。这是第 06 节要讲的纪律。
图 39-2 手工回测五步。第 3 步的"挡纸"动作是防前视偏差的关键。

挡纸法的具体操作

"挡纸"听起来笨,它是唯一能骗过你自己大脑的办法。具体做:

关键在最后一条:止损位必须在看到结果之前写下。你翻到下一屏看到"它跌了 6% 又拉回来了",这时再定止损,你定的就不是规则,是让这笔模拟"活下来"的数字。先写后看,顺序不能反。

还有一个小技巧:在表格里加一列"记录时间"。每记一行顺手填一下。如果某一行的记录时间比上一行晚了很多,说明你中途看过了后面的行情——这一行作废。

第 2 步的顺序要强调一次:先定时间窗,再找信号。

反过来做——"我记得 2019 年那波它涨疯了,从那时开始测"——就是从结果倒推样本。这种抽样方式测出来的任何结果都没有意义,因为你已经知道答案了。

0 3样本抽取:最大的坑

手工回测绝大多数的错误,都发生在"挑样本"这一步。

样本框必须覆盖三种市场状态(第 15 集) 趋势上行段 突破类规则的主场。只测这一段,任何突破规则都好看。 建议占比:不超过样本框的 40% 震荡段 突破规则的坟场:假突破集中出现。这一段的成绩决定规则的下半场。 建议占比:不低于 30% 趋势下行段 信号稀少但每一个都是考验。做多规则在这段的表现要看"少亏了多少"。 建议占比:不低于 20% 只测牛市段的回测,是在给规则拍广告。占比写进回测记录,防止事后狡辩。
图 39-3 样本框的市场状态占比。三段都覆盖,结果才有讨论价值。

还有一个口径问题:用前复权还是不复权?

用前复权——否则除权除息造成的价格跳空会被误判成"跌破止损"或"突破"。但要注意前复权的历史价格会随每次分红变动,所以回测记录里要写下复权基准日。

0 420 个样本能做什么、不能做什么

这是本集的数学核心,也是全书少有的几处需要算术证明的地方。

先算一个反直觉的事实:真实胜率恰好 50% 的规则,在 20 个样本里出现 14 次以上盈利的概率是多少?

用二项分布算:约 5.8%。

不看公式,用抛硬币来理解这个数字。

真实胜率 50% 的规则,等价于一枚两面均匀的硬币:每笔交易抛一次,正面算赢,反面算输。"20 个样本里赢 14 次以上",等价于"抛 20 次硬币,正面出现 14 次以上"。

你可以自己试。抛 20 次,连续 7 次同一面其实并不罕见——直觉觉得"应该总是一半一半",但短序列里的偏离很常见。数学答案是 5.8%:每 17 组"20 次抛掷"里,就有 1 组会出现 14 次以上同一面。

换回交易的语言:一个其实不赚钱的规则(真实胜率 50%),每做 17 次手工回测,就有 1 次会被误判为"赚钱的规则"。

这就是为什么不能只做一次回测就下结论,也是为什么第 37 集要求"样本不足 20 笔的规则不改"——小样本里,好坏都是浮动的。

也就是说:哪怕规则的真实胜率只有 50%(长期不赚不赔),每 17 次"20 个样本的回测"里,就有 1 次会看到 14 盈 6 负以上的漂亮成绩。小样本的好成绩,有相当一部分只是运气。

再看置信区间——样本量决定了你能"看清"多少:

同样观测到 60% 胜率,样本量不同,可信度天差地别 真实胜率 50% 30% 50% 70% 观测胜率 → 20 笔 100 笔 500 笔 95% CI [38%, 82%] 95% CI [40%, 60%] 95% CI [46%, 54%] 三条横线都是"观测到 60% 胜率"时的 95% 置信区间。样本 20 笔时,区间宽到几乎什么都没说。 按正态近似计算;手工回测的样本量下,这个近似够用。
图 39-4 同样 60% 的观测胜率:20 笔时真实值可能在 38%—82% 之间,500 笔时才收窄到 ±4%。

这张图的意思,用一句话说:20 个样本测出的 60% 胜率,与真实胜率 40% 的情况完全不矛盾。

所以 20 个样本能做的,只有两件事:

它不能做的:确认正期望。哪怕测出漂亮的数字。

0 5一个完整的示例

用第 38 集那条突破规则做一次完整回测。以下数据为示例。

项目内容
规则R4:收盘突破 60 日高点且量 ≥1.5 倍 20 日均量;次日开盘买入;止损 −8%,目标 +16%(2:1);大盘当日跌超 2% 放弃信号
样本框3 只同类主板股 × 2024-01 至 2025-12(24 个月,覆盖上/震荡/下行三段)
信号数27 次(其中 25 次已完结,2 次未完结剔除)
市场状态占比上行约 35%,震荡约 40%,下行约 25%
回测记录头。样本框与占比先写死,防止事后调整口径。

25 笔已完结样本的统计:

指标数值怎么读
到目标10 笔每笔 +16%
触发止损15 笔每笔 −8%
胜率40%10 / 25
期望(税前)+1.60%0.40×16% − 0.60×8%
期望(扣成本)+1.51%减往返成本 0.088%(第 4 集)
胜率 95% 置信区间[20.8%, 59.2%]保本胜率 33.3% 在区间内
示例数据,仅演示统计读法,不构成任何收益预期。

怎么读这张表?三句话。

第一句:期望是正的(+1.51%)。这是个好倾向。40% 胜率高于 33.3% 的保本线,说明"盈亏比 2:1"的假设下,这套规则历史上每笔平均能赚一点。

第二句:但这个"正"不可信。胜率的 95% 置信区间是 20.8%—59.2%,保本线 33.3% 落在区间内。这意味着:真实胜率可能是 21%(此时期望明显为负),也可能是 59%(此时相当赚钱)——25 个样本分不出来。

第三句:所以正确的结论不是"这条规则能赚钱",是"这条规则没有在第一轮筛选中被淘汰,值得继续积累样本"。

按市场状态分组看,信息量立刻不同

只看总胜率 40%,看不出规律。把 25 笔按第 03 节的三段状态拆开:

市场状态笔数到目标止损胜率
上行段95455.6%
震荡段102820%
下行段63350%
与总表同源的示例数据。分组后,总胜率的来源一目了然。
分组胜率:总胜率 40% 的来源结构(示例数据) 60% 40% 33.3% 0 55.6% 20% 50% 上行段(9笔) 震荡段(10笔) 下行段(6笔) 保本线 总40% 红线为盈亏比 2:1 的保本胜率 33.3%。震荡段显著低于保本线,是结构性信号。
图 39-5 分组胜率柱状图。总胜率 40% 高于保本线的表象下,藏着震荡段 20% 的结构性缺陷。

分组之后,一个在总表里完全看不见的结构浮出来了:震荡段是这条规则的坟场。

上行段 55.6%、下行段 50%,都不算差;唯独震荡段 10 笔里只赢了 2 笔。震掉它的不是"规则不行",是"规则的适用边界没写"——突破类规则在震荡段天然容易被假突破消耗,这在第 15 集讲市场状态时就埋了伏笔。

正确的处理不是扔掉整条规则,是给它加适用条件:

注意这个流程的完整闭环:回测 → 分组 → 发现结构 → 修改规则 → 下轮回测再验证。回测的价值不在第一次的数字,在分组对比里暴露的结构。

手工回测的角色是过滤器:
它的"通过",含义是"没有明显错误,值得继续观察";
它的"通过",从来不是"验证有效"。

0 6三个偏差

手工回测的结果,会被三种偏差污染。每一种都要有对应的防御动作。

偏差一 · 选择偏差(挑样本)

表现:只测记得的案例、从结果倒推时间窗、只测牛市段。

防御:样本框先写死(时间窗、标的、市场状态占比),写完才允许开始翻 K 线。中途改样本框=回测作废。

偏差二 · 前视偏差(用未来信息)

表现:你已经知道这段行情后来怎么走,这个"知道"会渗进每一次模拟决策——你会在模拟止损时手松(因为你知道后面会涨回来),模拟买入时手紧(因为你知道后面会跌)。

防御:挡纸法——翻到哪页,纸挡住之后的行情;严格只用"当时能看到"的数据(当时没发的财报,回测里就当不存在)。最有效的办法是找一个不知道结果的人帮你翻页,你只做记录。

手工回测比程序化回测更容易犯这个错,原因很直接:程序没有好奇心。程序模拟到止损位就记一笔 −8%,不会多看一眼后面的走势;而你在记完 −8% 之后,手指会不听话地往后翻——"看看它后来到底怎么样了"。

这一眼,就会污染接下来的判断。你会发现"其实它后来涨回来了",于是在给下一个信号定参数时,手会不自觉松一点。

对抗的办法除了挡纸,还有一个"冷处理"约定:每个信号记录完,合上表格,做点别的,再回来翻下一个。把"记结果"和"记下一个信号"在时间上隔开,污染的概率会小很多。

偏差三 · 幸存者偏差(只测活着的)

表现:样本全是今天还在交易的股票。2024—2025 年退市的那几十只,永远进不了你的样本——而它们恰恰是规则最严酷的考场。

防御:诚实标注"本回测存在幸存者偏差,实际期望应低于测得值"。彻底解决需要把已退市的标的也纳入样本,手工做不到——这也是手工回测的边界之一。

回 测 表 的 固 定 栏 目

一张回测表至少这些列:序号、日期、标的、市场状态(上/震荡/下)、模拟买入价、止损位、结果(目标/止损/未完结)、盈亏幅度、备注。

"市场状态"这一列最容易被省略,但它是样本框占比检查的依据。第 41 集的整合也要用它。

0 7手工回测的角色定位

把样本量的诚实阶梯摆出来,手工回测的位置就清楚了。

样本量能说明什么谁来提供
5 笔什么都说明不了无来源
20—30 笔排除明显负期望;发现结构性问题手工回测(本集)
50—100 笔方向性参考;胜率范围开始收窄真实交易累积(第 40 集)
300 笔以上统计检验的下限多年交易 + 系统化记录
阶梯的每一级都不可跳过。手工回测只能送你到第二级。

所以正确的流程是:手工回测过滤 → 小仓位实盘运行 → 用第 40 集的资金曲线持续积累样本 → 每月复盘更新判断。

手工回测通过 ≠ 加大仓位。它通过的含义只是"允许你用正常仓位开始积累真实样本"。第 40 集会讲:真实样本累积到 50 笔之前,仓位都应该是保守值。

花几个小时是值得的边界

手工回测的时间投入,合理的上限在哪里?

总预算建议:5—8 小时,覆盖一条核心规则。超过这个投入,边际收益急剧下降——第 41 集会让你把省下的时间用在系统整合上。

0 8本集操作清单

  1. 从 R1—R17 里挑一条你最想验证的规则。建议 R4(买入触发)——它决定期望值的符号。
  2. 把它的触发条件改写成纯机械条件。过一遍第 38 集的语言三关。
  3. 写死样本框。时间窗、标的、三段市场状态的占比,先写进回测记录头。
  4. 逐页翻 K 线,挡纸记录。目标 20—30 个已完结样本。预计 3—5 小时,可以分几次做。
  5. 统计四项,对照保本线。算 95% 置信区间(用正态近似即可),看保本胜率是否在区间内。
  6. 把结果写成一句话结论。格式固定:"该规则在 25 个样本上期望 +X%,区间 [A%, B%],未通过/暂时通过筛选,样本继续累积中。"不许写"很有效"。
错误一 · 从结果倒推样本框

记得哪段行情好就从哪段开始测。这样的回测是自我表扬,不是验证。

错误二 · 测出好结果就上大仓位

20—30 个样本的正期望,置信区间宽到能装下"真实负期望"。它的正确产出是"继续用保守仓位积累样本",不是加码。

错误三 · 边回测边微调规则

测到一半觉得"这个止损太宽了",顺手改了再测——每次改动都让之前的样本作废。要么测原版,要么重新开始测新版。

错误四 · 用回测结果证明"我看好的股票的方法对"

回测的对象是规则,不是股票。为某一只你喜欢的股票设计回测,然后挑它表现好的参数——这叫拟合,不叫验证。

本 集 练 习

完成你的第一次手工回测

卷七最花时间的一次练习,建议分两次做完。

  1. 从你的规则文档里选 R4(或你成型的任意一条买入规则)。
  2. 写死样本框:2 只标的 × 24 个月,记录三段市场状态的预估占比。
  3. 翻 K 线记录信号。每个信号记:日期、买入价、止损位、市场状态。
  4. 逐笔模拟到完结,记结果与盈亏。
  5. 统计:笔数、胜率、平均盈亏、期望(扣成本)、95% 置信区间。
  6. 写一句固定格式的结论,存进规则文档的"验证记录"一节。

怎么看结果:

期望明显为负(扣成本后 −2% 以下):这条规则可以扔了,或者需要大改——这是回测最有价值的产出。
期望接近零或略正:正常结果。继续用保守仓位运行,让真实样本慢慢积累。
发现"某段市场状态全亏":结构性发现,给规则加适用条件(如"仅震荡段禁用"),下轮回测验证。
想测第二遍"确认一下":不要测同一批样本。要么扩样本框,要么等真实交易积累。

本 集 小 结
  1. 回测只回答"历史样本上期望是正是负",不回答"未来是否有效"、不回答"精确胜率"、不回答"最优参数"。
  2. 五步流程:机械条件 → 先定样本框 → 挡纸翻 K 线记录信号 → 模拟到完结 → 统计对照保本线。
  3. 样本框必须先写死,且覆盖三种市场状态:上行不超过 40%、震荡不低于 30%、下行不低于 20%。
  4. 真实胜率 50% 的规则,20 个样本出现 14 盈以上的概率约 5.8%——小样本的好成绩有相当部分是运气。
  5. 20 笔测出 60% 胜率,95% 置信区间是 38%—82%,宽到几乎什么都没说。
  6. 示例:27 次信号、25 次完结、胜率 40%、期望 +1.51%——但置信区间 [20.8%, 59.2%] 包含保本线,不能确信。
  7. 手工回测是过滤器不是验证器:通过="没有明显错误,值得继续积累样本",仅此而已。
  8. 三个偏差:选择偏差(样本框先写死)、前视偏差(挡纸法)、幸存者偏差(诚实标注)。
  9. 样本量阶梯:手工回测送你到 20—30 笔这一级,后面的样本靠真实交易积累。
  10. 回测通过 ≠ 加大仓位。它的正确产出是"允许用保守仓位开始积累真实样本"。
  11. 分组对比是回测最有价值的一步:总胜率 40% 掩盖的结构,按市场状态拆开就浮出来了。