观潮验尺记:409 条记录之后,先把自己的胜率推翻

观潮验尺记:409 条记录之后,先把自己的胜率推翻

87.0%。

这是 23 条被观潮 v4 强制降为“中性观望”的看空信号,如果保留原方向,5 天后会得到的命中率。

20 次正确,3 次错误。

看到这组数字时,我的第一反应很直接:v4 把好信号误杀了,置信度门槛应该撤掉。

但真正改变观潮的,不是这个 87%。而是随后冒出来的一个问题:这 23 条信号,系统当时明明对用户说的是“观望”,为什么成绩单里还能算出“看空胜率”?

顺着这个问题查下去,v5 没有先改策略。

它先把自己的胜率推翻了。

这是观潮系列的第十九篇。策略线上接上《观潮淘金记》:四个月前,135 条信号教会 v4“没把握就闭嘴”;四个月后,409 条信号逼着它回答一个更难的问题——闭嘴之后,应该怎样给自己打分?

四个月前留下的伏笔

v4 的核心规则很简单:置信度低于 40,不管技术评分多极端,一律降为中性观望。

当时的数据很漂亮:高置信度信号 72.1% 准,低置信度只有 47.8%,和抛硬币差不多。于是 v4 做了最狠的一刀——不够确定,就不再给方向。

但《淘金记》结尾还埋了一根针:所有被门槛压掉的信号都要留下标记。等未来结果回来,再检查这些信号究竟是被规则救下了,还是被规则误杀了。

四个月后,这笔账终于能算了。

初始复盘快照拉出了 406 条原始记录,按“日期 × 股票”只保留当天最后一次判断后,剩下 388 个独立判断。截至本文定稿,生产库已经增长到 409 条原始记录、391 个独立判断。两组数字来自同一次审计前后的不同时间截面,后文统一使用最新口径。

那 23 条被 P0 置信度门槛压掉的信号,全都来自原本的看空方向。其中 20 条在 5 天后确实下跌,反事实命中率 87.0%。即使只看 7—8 月、排除 bull 市场,仍然是 7/9,命中率 77.8%。

看上去,撤掉门槛的证据已经够了。

可 87% 回答的只是:“如果当时继续看空,会怎样?”它没有回答:“用户实际收到了什么建议?”

这两个问题过去被写在了同一张成绩单上。

成绩单替观潮说了它没说过的话

旧版回填逻辑判断一条信号是否正确时,看的不是最终展示给用户的方向,而是隐藏在后台的技术评分。

假设某只股票评分是 -32,本来应该看空;但它的置信度只有 32,于是 v4 把最终方向降成“中性观望”。用户看到的是观望,没有收到看空建议。

5 天后股票跌了。旧成绩单看到负分和下跌,就给这条信号记一个 correct。

于是出现了一个荒谬的结果:系统没有做出方向判断,却因为那个没有说出口的方向拿到了分。

反过来也一样。如果股票上涨,它会被记为错误,仿佛观潮真的叫人做空过。

这不是普通的统计偏差,而是评价对象错了。成绩单评的是“技术分数隐含了什么”,用户承担的却是“最终建议说了什么”。两者一旦被置信度、市场体制或护栏分开,旧胜率就不再代表真实决策质量。

重新按最终方向计算后,全历史 391 个独立判断中:

5 天结果数量如何计分
有方向的判断258161 次正确,方向命中率 62.4%
中性观望118记为 abstain,不算正确也不算错误
尚未到期15等待后续回填

62.4% 不是一个难看的数字。真正重要的是,它终于只回答一个清楚的问题:当观潮确实给出看多或看空时,方向对了多少次?

至于观望,也不再躲进胜率里。它有自己的账:观望了多少次,之后市场波动多大,系统究竟躲开了噪声,还是错过了机会。

这才是“没把握就闭嘴”应该接受的考试。

第二把尺子也有问题

修正最终方向后,事情仍然没有结束。

v4 上线后的样本主要来自三只长期持仓,而这段时间的市场又长期偏弱。结果很容易出现一种假象:系统只要经常看空,胜率就会很好看。

把 v4 上线后已有 5 天结果的 159 次正式方向调用拿出来,与一个什么都不分析、永远回答“看空”的基线比较:

策略5 天方向命中率平均方向收益
观潮 v462.3%+1.37%
永远看空63.5%+2.00%

这里的“方向收益”会把看空后的跌幅转成正值;例如股票下跌 2%,一次正确看空记为 +2%。它衡量方向判断带来的收益,而不是股票本身的平均涨幅。

观潮没有跑赢那句最偷懒的话:“反正会跌。”

这不等于所有技术分析都无效。它只说明现有成绩里混进了太多行情本身的方向。如果不引入基准,熊市里一个看空模型很容易把 beta 当成 alpha;换到牛市,同一套自信可能立刻翻车。

数据也确实留下了警告:在市场体制被标为 bull 的 21 次正式方向调用中,5 天只对了 7 次,平均方向收益 -1.56%。

所以 v5 需要修的不只是“按什么方向判对错”,还包括“凭什么说这是策略赚到的”。

v5 先换尺,不换脑

通常说到策略升级,人们期待的是新指标、新权重、新阈值。v5 偏偏没有先做这些。

MA、MACD、RSI、OBV 的权重暂时不动,用户看到的正式方向仍然来自 v4。v5 先把评价拆成三条互不冒充的轨道:

  1. 方向结果:只按最终的看多或看空判断命中率和方向收益。
  2. 观望结果:单独记录 abstain,以及观望后错过或避开的波动。
  3. 相对结果:同时记录基准指数,计算相对市场的超额收益。

每条新记录还带上策略版本、原始评分、调整后评分、触发规则、信号来源和当时的基准状态。以后再看到一个百分比,可以一路追溯它究竟来自哪个版本、哪条规则、哪种市场环境。

这部分看起来不像“策略”。但如果评价器错了,任何后续调参都只是在优化一个错误目标。

v5 的第一项策略改进,是拒绝继续相信一张口径含混的成绩单。

两条候选策略,先在影子里跑

标尺修好以后,87% 并没有被扔掉。它从“立刻上线的结论”降级成了一条需要前瞻验证的假设。

v5.1 Shadow Policy 同时运行两条候选规则:

候选规则v4 正式输出v5.1 Shadow 输出要验证的问题
非 bull、-40 < score <= -25、低置信度中性观望看空P0 是否误杀了弱看空
bull 体制下已有方向调用看多或看空中性观望bull 识别下的方向建议是否系统性失真

Shadow 的意思是:它们每天和 v4 一起跑,记录自己会怎么判断,但不改变 Dashboard 上的正式建议,也不影响真实决策。

第一天,完整股票池记录了 32 只股票:13 条看空保持看空,18 条观望保持观望,只有 1 条被 v5.1 从观望恢复为看空。当天没有遇到需要静默的 bull 方向调用。

这些记录现在没有胜率,因为 5 个交易日还没过去。没有结果,就是没有结果。 历史反事实负责提出假设,未来数据才有资格裁决它。

为什么不是现在就撤掉 P0

23 条里对 20 条,确实很诱人。但它至少背着三层偏差。

第一,样本来自规则上线后的历史回看,不是预先写下、等待兑现的判断。第二,信号主要集中于三只持仓,不代表跨股票泛化能力。第三,样本处在长期偏弱行情,看空方向天然占便宜。

如果因为 87% 立刻撤掉 P0,观潮只是在重复旧习惯:看到一个漂亮分组,就把它写进正式策略,然后继续用同一批数据证明自己正确。

v5 为此设了两道闸门:

  • 至少积累 30 个前瞻的 5 日样本;方向命中率、平均方向收益、相对基准收益三项中,至少两项优于 v4,候选规则才有资格讨论转正。
  • 在跨股票 Shadow 样本达到 500 之前,不调整 MA、MACD、OBV 等因子权重。

每天的 Shadow 记录还必须覆盖至少 90% 股票池,并保证股票与基准指数使用同一个预期交易日。日期错位、覆盖不足或数据不完整时,宁可不写,也不制造一批看似完整的脏样本。

这一次,观潮不再边考试边改答案。

不只是股票:评价器也是产品的一部分

这次最值得留下的教训,不是“低置信度看空可能很准”,而是另一个更普遍的问题:一个 AI 系统究竟在优化什么?

客服 Agent 没有回答用户,却因为检索到了正确文档被算作成功;代码 Agent 提交了补丁,却只因为测试命令启动过就被记为通过;医疗模型选择转人工,却仍按内部最高概率类别拿分类分数。

它们和旧版观潮犯的是同一种错:内部推断与最终动作已经分开,评价器却还在给内部推断打分。

一旦指标成为系统进化的方向,这种错会被放大。模型不会主动告诉你目标写错了,它只会越来越擅长拿到那个分数。

所以评价器不是开发完成后的附属报表。它本身就是产品的一部分,甚至是决定系统会进化成什么样的那一部分。

v3 学会了警惕过度自信;v4 学会了没把握时闭嘴。到了 v5,观潮终于开始追问:闭嘴算不算答对?赶上大盘算不算本事?回看历史找到的规律,能不能活到未来?

这些问题暂时没有漂亮答案。

但至少,答案纸终于换对了。

写在最后

四个月前,我写下:“你不需要每次都对,你只需要每次都知道自己对没对。”

现在看来,这句话还少了一层。

你不仅要知道自己对没对,还要确认:被判对的,真的是你当时做出的那个决定。

v5 还没有让观潮预测得更准。第一批 32 条 Shadow 甚至还没有走满 5 个交易日。它没有新胜率可以展示,也没有资格宣布哪条候选策略胜出。

它只是先做了一件更基础、也更困难的事:不再用错误的尺子,证明自己很准。

等潮水退去,答案会自己留下来。


策略版本线:v2:淬火记 → v3:进化论 → v4:淘金记 → v5:验尺记

Comments