交易系统 XtradingTime

同一个信号的历史胜率为什么不能直接用:每桶 20 笔只够发现 35.8 个百分点的差距

同一个信号的历史胜率为什么不能直接用:每桶 20 笔只够发现 35.8 个百分点的差距
本文目录(14 节)

你在交易记录里翻出一个信号,比如「回踩 20 日均线企稳」,一共 120 笔,胜率 48%。然后你想问得更细:它在上升趋势里是不是更好用。于是把这 120 笔按环境切成三堆分别算,上升趋势那堆 57%,震荡那堆 41%,差了 16 个百分点,结论看起来很清楚:以后只在上升趋势里做它。这个动作叫分桶统计,方向是对的,问题在于切完之后每堆只剩三四十笔,而三四十笔算出来的胜率在统计上是一团糊的东西,那 16 个百分点很可能是切样本切出来的噪声。下面用三张可复算的表把它量化,并证伪一条流传很广的门槛。

一、分桶不创造样本,它只是把一份样本切小

分桶统计做的事是:同一个信号,按某个环境变量分成几类,每类单独算胜率,再比较各类的差别。常见分法是按趋势方向(上升、下降、震荡)、按波动率(高、低)、按信号出现的位置(贴近关键位、远离关键位)。

这件事有价值,因为一个信号在不同环境下表现不同确实是真实现象。但分桶有一个硬约束:总笔数是固定的,分桶只是把它切开,不会变多。

算一下。假设你有 200 笔这个信号的记录,这在散户手里已经算相当多了:

  • 只按趋势方向分 3 档,每桶平均 67 笔
  • 叠加波动率 2 档变成 6 桶,每桶 33 笔
  • 再叠加距关键位远近 2 档变成 12 桶,每桶 17 笔
  • 再加第四个维度就是 24 桶,每桶 8 笔

而且这还是理想的平均分布,真实记录里各档笔数极不均匀,最冷门的桶往往只有平均数的三分之一。

所以分桶的真正瓶颈不是「怎么分」,是「分完之后每桶剩多少」。

二、单个桶里那个胜率,精度差到什么程度

先看最基础的一步:一个桶里有 N 笔,你算出来一个胜率,这个数字离真实胜率能差多远。

用二项分布的正态近似,观测胜率取 50%(区间最宽,也最保守),95% 置信区间是这样:

每桶样本95% 置信区间半宽
1019.0% 到 81.0%±31.0 个百分点
2028.1% 到 71.9%±21.9
3032.1% 到 67.9%±17.9
5036.1% 到 63.9%±13.9
10040.2% 到 59.8%±9.8
20043.1% 到 56.9%±6.9
38445.0% 到 55.0%±5.0

这张表的实际含义比表本身更重要,用大白话翻一遍。

桶里有 20 笔算出胜率 50%,这句话的信息量约等于「真实胜率在 28% 到 72% 之间」。 28% 会让你快速爆仓,72% 可以靠它吃饭,而那 20 笔没有能力把这两种情况分开。你以为测出了一个 50%,实际上只是排除掉了低于 28% 和高于 72% 这两种极端。

换几个数字再说一遍:桶里 30 笔算出 60%,真实值可能低到 42%,也就是负期望;桶里 50 笔算出 65%,真实值可能低到 51%;桶里 100 笔算出 55%,真实值可能低到 45%。

表的最后一行那个 384 值得记一下。要让胜率估计的误差收到 ±5 个百分点以内,需要 384 笔。 这是单个桶的要求。三个桶都要达到这个精度,总共需要 1152 笔同类信号记录。

整套系统需要多少笔才能确认期望值为正,那是另一个问题,用的是均值的置信区间而不是比例的,结论在一个交易系统需要回测多少笔才算有效里。那篇回答的是「这套系统整体能不能用」,这篇回答的是「把这套系统的记录切开之后,切出来的差别算不算数」。前者是一个数跟零比,后者是两个数互相比,后者要难得多。

三、要分清两个胜率,需要多少笔

上一节是单个桶的精度。分桶真正要回答的是比较问题:A 桶的胜率是不是真的高于 B 桶。

这用双样本比例检验算。口径是单侧 α=0.05、power=0.80、正态近似,含义是:两个桶的真实胜率如果确实差这么多,这个检验有 80% 的把握能认出来,误报率控制在 5%。

基准待测每组所需
50%55%1233
50%60%305
50%65%134
50%70%74
50%75%46

第一行最扎心。要可靠区分 50% 和 55%,每组需要 1233 笔,两组合计 2466 笔。 而 5 个百分点已经足以改变盈亏方向,盈亏比 1:1 的系统里,50% 是亏的,55% 是赚的。

这解释了一个很多人遇到过的现象:记录切成两堆,一堆 52% 一堆 57%,你觉得找到规律了,按它筛掉一半机会,半年后发现筛掉的那半反而表现更好。不是市场变了,是当初那 5 个百分点本来就不是规律。

反过来看最后一行:区分 50% 和 75% 每组只要 46 笔。差距越大,样本量要求掉得越快。这个性质是后面全部结论的来源。

四、反过来问:手上只有这么多笔,能发现多大的差距

把上一节倒过来问,才是真正有用的问题:我手上每桶就这么多笔,它到底能发现多大的差距。

同一个公式反解,基准同样取 50%,口径同样是单侧 α=0.05、power=0.80:

每桶样本量与能可靠发现的最小胜率差距对照,20 笔只能发现 35.8 个百分点

每桶样本能发现的最小差距即对比胜率要低到
2035.8 个百分点14%
3030.120%
5023.926%
8019.231%
12015.834%
20012.338%
30510.040%

读法是:找到你每桶的实际笔数,右边那一列就是「这个桶的胜率必须低到多少,你才有八成把握认出它真的差」。 每桶 50 笔要低到 26%,每桶 120 笔要低到 34%,一直到每桶 305 笔,才刚刚够发现 10 个百分点的差别。

把上一节的维度算术接上。每桶 17 笔时能发现的最小差距是 38.2 个百分点,对比桶要低到 11.8%。每桶 8 笔时这个检验直接失效:哪怕对比桶的胜率是 0%,8 笔样本也达不到 80% 的把握。 这是把公式代进去算出来的,此时所需样本量已经超过 8。

五、所以「每桶 20 次」这条门槛不成立

现在可以处理那条流传很广的说法了:分桶统计里每桶不足 20 次就必须合并。

它的问题不是「太松」,是给了一个假的安全感:让人以为凑够 20 笔就跨过了某条线,之后看到的差异可以当真。上一张表已经给了答案:

每桶 20 笔,只能发现胜率掉到 14% 以下的桶。 而一个胜率 14% 的桶是什么概念?20 笔里赢不到 3 笔,连着输十几次。这种桶你不用做统计也知道它差,你在交易的当下就已经感觉到了。统计学在这里没有提供任何你本来不知道的信息。

反过来说,假设真实情况是 A 桶 50%、B 桶 35%,15 个百分点的差距足够大也足够有用,但每桶只有 20 笔时这个检验发现它的概率远低于 80%,大部分时候你只会看到两个桶的胜率乱跳,某些抽样里 B 桶还会显得比 A 桶高。

所以 20 不是合格线,只是一个随手写下的整数。30 笔、50 笔、100 笔这类门槛都有同样的毛病:把一个跟差距大小强相关的量,写成了跟差距无关的常数。要看清这类整数门槛是怎么来的、以及它们还以哪些形式出现,回测的 7 个致命陷阱里的「样本不足」和「数据窥探」两节是配套的。

六、真正的结论:样本量决定了你只能回答什么问题

把「20 次门槛」删掉之后换什么?不是换一个更大的整数,换成 50、换成 100 都是同一个错误的不同版本。正确的结论是:

你的样本量不决定你的结论对不对,它决定的是你能提出什么问题。

同一批 120 笔记录,切成 3 桶每桶 40 笔:

  • 问「哪个桶最差、差到应该完全不做」,能答,因为「完全不该做」意味着差距很大
  • 问「哪个桶最好、好到应该加大仓位」,答不了,因为「值得加仓」通常只意味着 5 到 10 个百分点的优势,而 40 笔要发现 10 个百分点,差着七倍的样本量

同一份数据同一个分桶,两个问题一个能答一个不能答,区别只在问题本身要求多大的分辨率。这一层可以直接翻译成一条操作规则。

七、正确用法:做否决,不做选择

分桶统计的两种用法:做否决样本量要求低所以稳,做选择需要每桶 305 笔以上所以做不到

用法一,做否决,即用分桶去找「这个信号在某类环境下明显很差」。

这类结论要求的差距大(20 到 30 个百分点起),样本量要求低(每桶 30 到 50 笔就够)。更要紧的是错误代价不对称:误删一个其实还行的环境,损失是少做几笔;漏掉一个真的很差的环境,损失是持续亏钱。样本不足时,往「少做」的方向犯错是安全的。

这条用法可以直接接到不做清单上。这 3 种行情我绝对不做讲的是靠经验建立的不做清单,分桶统计能做的是给它提供数据支持,或者把站不住的那几条剔掉。

用法二,做选择,即用分桶去找「哪类环境该加仓、该重点做」。

这类结论要求的差距小(通常 5 到 10 个百分点),需要每桶 305 笔以上,几个桶加起来就是上千笔同类信号记录。除非你做高频或者有多年完整记录,这个数字在散户手里拿不到。

强行做选择的后果很具体:把仓位压到一个其实并不更优的环境上,而且因为仓位变大,这个误判带来的亏损同时被放大。样本不足时,往「重仓」的方向犯错是危险的。

所以分桶统计在散户手里是一把筛子,不是指南针。下面四条判据都围绕「把这把筛子用对」展开。

八、判据一:分桶维度最多三个

推荐的三个维度是趋势方向、波动率档、距关键位远近,它们覆盖了大部分信号表现差异的来源,互相之间也相对独立。

为什么是三个而不是更多,把第一节的算术配上第四节的表再看一遍。以 200 笔记录为例:

维度数桶数每桶笔数能发现的差距
1 个(趋势 3 档)36720.8 个百分点
2 个(加波动率 2 档)63328.8
3 个(加距关键位 2 档)121738.2
4 个248这个检验已经失效

第三行已经在临界上了,38.2 个百分点意味着对比桶要低到 11.8%。第四行直接出界。

所以「三个维度」不是审美偏好,是被样本量逼出来的。 记录只有 80 笔,两个维度就是上限;只有 40 笔,就只能分两个桶,而且结论要非常保守。

档数同理。三个维度各分 3 档就是 27 个桶,所以每个维度只分 2 到 3 档,比如波动率分「高于近期中位数」和「低于近期中位数」两档就够。

九、判据二:分桶规则必须在看结果之前写死

流程必须是:先定分桶规则写下来,再去算每个桶的胜率。 不能先把数据铺开看哪里有差异,再回头把边界调到差异最大的位置。

后者是在数据里挖自己想要的答案。以波动率为例,手上 120 笔记录,只要允许自己反复调分界线,你一定能找到某个位置让两边差出 15 个百分点。这不需要市场真有规律,纯随机数据也挖得出来,因为你试了几十个位置只挑最好看的那个。挖出来的差异是这批数据的形状,不是市场的性质,未来不会重现。

具体怎么做:

  1. 算任何胜率之前,新建一个文件,写下今天的日期
  2. 写清每个维度的定义和分界值,比如「波动率档 = 信号当日 ATR(14) 高于过去 60 日 ATR 中位数记为高,否则记为低」
  3. 写清每笔交易归到哪个桶,判断依据只能用信号出现当时拿得到的数据
  4. 保存,然后才开始算
  5. 算完想改分界值可以改,但必须在文件里记下这是第几版和改的理由

第 5 条是关键:改不是问题,反复改而不留痕才是。当你看到文件里已经改到第六版,就知道后面那个结论不能信了。这跟回测里的数据窥探是同一个机制,只是换到了自己的记录上。

十、判据三:桶间差要大过桶内自己的波动

这条是判断「分桶是不是真的有意义」最实用的一步,而且完全可以手算。

思路是:同一个桶内部按时间前后拆两半,如果两半就差出 20 个百分点,那么桶与桶之间差 15 个百分点说明不了任何事,因为这个桶自己都稳不住。

手算步骤:

  1. 取一个桶,把里面的交易按时间先后排好
  2. 从中间劈开,前一半和后一半各算一个胜率
  3. 两个数相减取绝对值,这是这个桶的「自波动」
  4. 每个桶都算一遍,把最大的那个记下来
  5. 除以 1.4,得到「噪声底」
  6. 再看桶间差:胜率最高的桶减胜率最低的桶
  7. 桶间差如果没有明显超过噪声底(比如没到两倍),这套分桶说明不了任何事

第 5 步那个 1.4 不能省。拆半之后每半的笔数只有原来一半,抽样噪声按根号 2 放大,约 1.41 倍。不除掉它,等于拿放大过的噪声去跟没放大的桶间差比,会误杀很多真实差异。

举个例子。某信号 150 笔,分成 3 桶各 50 笔,胜率分别是 58%、47%、39%。

  • 桶间差 = 58% 减 39% = 19 个百分点
  • 三个桶前后两半分别是 60/56、40/54、44/34,自波动 4、14、10 个百分点
  • 最大自波动 14,除以 1.4 得噪声底 10
  • 桶间差 19 对噪声底 10,不到两倍

结论是这套分桶还不能用来做否决。第四节那张表说的是同一件事:每桶 50 笔只能可靠发现 23.9 个百分点的差距,19 个百分点够不着。两个方法指向同一个结论不是巧合,它们量的是同一个噪声。

这个手算方法是偏保守的检验。它通不过,不代表桶间一定没有差异,只代表这批数据还撑不住这个差异。 它通过了,你才有资格往下走第四条。

十一、判据四:留一段数据不参与分桶

前面三条都是在同一批数据上做文章,第四条是唯一能真正抓住「历史巧合」的一步。

做法:

  1. 开始之前,把最近 20% 到 30% 的记录整个划走封存
  2. 只用剩下的 70% 到 80% 定分桶规则、算胜率、做判断
  3. 规则和结论全部写完之后,才打开封存那段
  4. 看:前面判定为「明显很差」的那个桶,在这段里是不是还是最差

第 4 步的验收标准最容易搞错。留出段的样本量一定很小,不可能在里面得到统计显著的结论,所以不要按显著性去验,要验的是方向。

  • 原来最差的桶在留出段里还是垫底,方向对上了,这条否决可以用
  • 它跑到了中间甚至最好,方向反转,前面那套分桶大概率只是历史巧合,作废重来
  • 各桶排序在留出段里完全打乱,同样作废

方向验证比显著性验证弱得多,但它便宜,能拦掉最典型的那类错误。样本外测试为什么必须做,回测的 7 个致命陷阱里讲过背景,这里是把它搬到手工记录上。

还有个常见的偷懒做法要点名:随机抽 20% 当留出段。不要这么做,留出段必须是时间上最靠后的那一段。 随机抽的样本跟前面那段在时间上交错,市场状态共享,这个检验会宽松到几乎测不出东西。

十二、把四条串成一次操作

假设要检验「回踩 20 日均线企稳」在不同环境下的表现,手上有 160 笔记录,流程是这样:

  1. 把最近的 40 笔(25%)划走封存,剩下 120 笔进入分析
  2. 新建文件写日期,定义两个维度:趋势方向 3 档、波动率 2 档,共 6 桶。不上第三个维度是因为 120 笔切 12 桶每桶只剩 10 笔,已经在第四节的表上出界
  3. 保存文件,然后才开始算。6 桶平均每桶 20 笔,实际不均匀,最少的那个可能只有 8 笔
  4. 笔数少于 15 的桶直接并进相邻档,宁可少一个桶也不要留一个说明不了问题的桶
  5. 算出各桶胜率,做第十节的手算检验:最大自波动除以 1.4,跟桶间差比
  6. 桶间差不到噪声底的两倍就到此为止,结论是「这批数据看不出环境差异」,不是「没有环境差异」
  7. 过了就只取最差的那个桶,写成一条否决规则,比如「震荡且高波动时不做这个信号」
  8. 打开封存的 40 笔,看那个桶是不是还是最差
  9. 方向对上就上线,记下上线日期,后面继续累积样本再复核
  10. 全程不产生任何「哪个桶该加仓」的结论

十步里有九步在防止自己得出过强的结论,这个比例是对的。

小样本为什么骗人、怎么在日常记录上搭一套够用的验证流程,交易系统过不过关不是靠感觉是更基础的一层。

十三、推导口径

全部数字可以自己复算,口径如下:

表一(单个桶的置信区间):二项比例的正态近似(Wald 区间),观测胜率取 p=0.5,半宽 = 1.96 × 根号(0.25/n)。取 p=0.5 是保守做法,实际胜率偏离 50% 时区间会略窄。

表二和表三(两个桶的比较):双样本比例检验,正态近似,单侧 α=0.05(z=1.6449),power=0.80(z=0.8416),两组样本量相等。每组所需样本量:

n = [ z_α × √(2 × p̄ × (1-p̄)) + z_β × √(p₁(1-p₁) + p₂(1-p₂)) ]² / (p₂ - p₁)²

p̄ = (p₁ + p₂) / 2

表三是把这个式子对给定的 n 反解出最小可检出差距,基准 p₁ 固定取 50%,二分法求解,四舍五入到 0.1 个百分点。

两处近似要说明:正态近似在 n 小于 10 或胜率极端时精度下降,精确做法是 Fisher 精确检验,但方向不变,小样本只会更差;另外这里假设各笔交易独立,而真实记录里同一段行情的多笔信号往往相关,相关性会让有效样本量进一步低于笔数,所以上面所有数字都是乐观估计。

写在最后

把结论压成三句话:

第一句,分桶不创造样本。 200 笔切成 12 桶就是每桶 17 笔,而 17 笔的胜率在统计上几乎不含信息。

第二句,「每桶 20 次」这条门槛是假的。 20 笔只够发现胜率掉到 14% 以下的桶,那种桶不用统计也知道它差。任何固定的整数门槛都有同样的毛病,所需样本量跟你要发现的差距强相关,它不是常数。

第三句,样本量决定了你只能回答什么问题。 同一批数据,问「哪个环境该完全避开」能答,问「哪个环境该加仓」答不了,区别只在两者要求的分辨率差了七倍。

所以分桶统计在散户手里只有一个稳的用法:做否决。找出那个明显很差的环境,从交易清单里划掉,然后停在那里,不要多走一步去问「那该重仓哪个」。前半句你的数据支持得住,后半句支持不住。

克制住不走那一步,比学会算这些数字更难,也更值钱。

微信搜一搜 Tom讲交易

在微信里搜「Tom讲交易」即可关注,每周更新交易教学

推荐课程

合约陪跑实战训练营

不只教方法,更带你实盘执行。从仓位管理到止损止盈,手把手纠正你的交易习惯,建立可复制的盈利系统。

相关图解

一张图看完这件事,适合存下来随时翻

相关文章

量化交易

一个交易系统需要回测多少笔才算有效:公式 n ≥ (1.96σ/E)²,附四档期望值对照表

回测五十笔就下结论是自欺,一百笔也远远不够。所需样本量有一个可以直接算的公式,它只依赖两个数:单笔期望值和单笔标准差。这篇给出公式的来源、标准差怎么算、以及期望值 0.1R 到 0.5R 四档下所需笔数的完整对照表。核心结论是平方关系:期望值降一半,样本量需求变四倍。文末给出样本量之外必须同时满足的四个条件。

交易系统

三年换了五套方法:先算样本账,每换一次就把 208 笔清零重来

三年还在换指标换方法,问题通常不在方法上,在于没有任何一套方法跑够过样本。换系统真正的代价不是学习时间,是统计样本归零:期望值 0.2R 的系统需要约 208 笔才能确认有效,三年里换五次方法,平均每套只跑 40 笔左右,t 值不到 0.9,五套系统全部处于「无法判断」的状态。这篇给出样本成本核算表和四条判据,区分问题出在方法还是出在诊断能力。

量化交易

回测胜率多少才算及格:孤立的胜率没有及格线,及格的是期望值 0.2R 加样本 208 笔

回测跑出 55% 胜率就当系统能用,是这批参数里最贵的误判。胜率的及格线完全由盈亏比决定:盈亏比 1:1 时及格线是 60%,1:3 时只要 30%。更要命的是第二个条件,及格线越低的系统越难被证明,盈亏比 1:3 需要 323 笔样本而 1:2 只要 208 笔。这篇给出按盈亏比查的及格胜率表、对应的样本量表,以及回测及格之外必须同时满足的三条。

交易系统

期望值怎么算:三步公式加一次成本修正,算出你每笔平均赚多少

期望值不是一个玄学指标,它是一个三步就能算完的算术题:把每笔盈亏换成 R 倍数、代进公式、再扣掉成本。多数人只做了前两步,于是算出来的数字偏高,止损越紧偏得越多。这篇给出完整算法、六档止损幅度下的成本侵蚀表、从 R 换算成人民币的对照表,以及四个会让期望值算虚的统计错误。A股往返成本按 0.102% 计入。

交易系统

策略开始失效的四个提前信号:都在盈亏变化之前出现,最早的能提前 30 笔

等资金曲线掉下来再判断策略失效,已经晚了一到两个月,因为盈亏是滞后指标。真正的提前信号藏在四个领先量里:入场后 5 根 K 线的平均最大浮盈、信号触发频率、平均持仓时间、滑点与成交质量。这四个量的方差比最终盈亏小得多,三十笔左右就能看出趋势。这篇给出四个信号的算法、异常阈值、各自提前多久,以及和事后判定那套五条判据的分工。

交易系统

交易系统压力测试怎么做:六个场景各代一次,两个场景叠加就把 0.2R 打成负数

压力测试不是把回测再跑一遍,是把六个具体的坏条件分别代进去看期望值剩多少。基准系统胜率 40%、盈亏比 1:2、每笔期望 0.2R,胜率下调 5 个百分点后只剩 0.05R,盈亏比掉 25% 就归零,滑点每笔多吃 0.1R 只剩 0.1R,而胜率下调加滑点两个场景同时发生就变成 −0.05R。这篇给六个场景的代入算法、及格线和不通过时的改法。

觉得有用?关注公众号

扫码或在微信里搜「Tom讲交易」,每周更新交易教学文章

扫码关注 Tom讲交易,或微信搜一搜 Tom讲交易

配套免费工具

交易规则卡片

打开