research: 因果回放推翻一类反手(step59),线段顶点验证识别有效但不够(step60)

step59 逐根回放:init_stream 预热后逐根 append_bar,每根重算笔中枢与 bsp,
记录信号首现根并按它入场。信号身份用「类型+极值KLC时刻」而非 sure_time,
后者正是会被重画的字段。必须逐根,分段重建等于多给信息。

结果把 §3.395 推翻了:召回 100%、幻影 0,即存在性是因果的;但首现根比全量
sure_time 晚中位 15 根、P90 31 根,0% 能准时拿到。按真实首现根入场,
B1 反手 PF 2.35→0.92、S1 2.75→1.30,t 0.20/0.64 完全不显著。

教训:sure_time 是引擎事后标注的确认时刻,不等于可执行时刻。任何拿它当
entry 的回测都要先过逐根回放。

step60 用线段终点当标准答案验证识别本身。对照组取所有同向笔端点——B1 按构造
就长在笔低点上,不设这个基准任何绝对命中率都无法解读。5m 上 B1 命中 30.3%
对基准 15.0%,提升 2.02 倍,S1 1.81 倍;B3/S3 恰为 0%,符合三类长在趋势
中段的预期,两者互为标签有效性旁证。

所以识别是对的,但精度只有 30%,且那 70% 噪声 PF 只有 0.08。更关键的是即使
用未来函数把精度提到 100%,命中组也只有 PF 0.70~0.83,仍不赚钱——因为入场价
已在结构底上方 2.90 ATR。一类线三层逐层否定后到此为止。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-28 21:38:59 +08:00
co-authored by Cursor
parent 9efbae6ade
commit e137d92b50
3 changed files with 569 additions and 1 deletions
+91 -1
View File
@@ -1086,7 +1086,15 @@ B4 跑出 PF 1.83~2.06 / t +8.5~+10.7。所以 fast B1 的负数不是管线接
头早就写了「B4 不只是 B3 提前几根,两者统计性质符号相反」,一类的实验说明
反过来也成立:**把反转信号提前,它还是反转信号。**
### 3.395 一类反手:识别没错,但发出的时点让它变成了反向信号step55/57
### 3.395 一类反手:**已被 step59 推翻,不要用本节的 PF**step55/57
> **本节结论作废。** 下面的 PF 2.3~3.0 用 `sure_time+1` 当入场时点,而 §3.396
> 的逐根回放证明实盘要等中位 **+15 根**才知道信号存在(0% 能准时拿到),
> 按真实首现根入场后 PF 塌到 0.92 / 1.30、t 0.20 / 0.64。
> 保留本节是为了记录推理链和那个「胜率低于随机 = 信号指反了」的判据,
> 它本身是对的、也可复用;错的是把 `sure_time` 当成了可执行时刻。
用户问「是不是一类二类的识别错了」。查下来结论是:**代码没写错,但信号该反着用。**
@@ -1171,6 +1179,88 @@ B4 跑出 PF 1.83~2.06 / t +8.5~+10.7。所以 fast B1 的负数不是管线接
时点上,与背驰无关,那这个信号就该重新命名和重新设计。
3. **与 B4 的重叠度与相关性**。若只是换名字的 B4,就没有增量价值。
### 3.396 ⭐ 因果回放:信号存在性是真的,时点是假的(step59)
§3.395 的 PF 太好,先查因果性——增量模块文件头自己写着「最后一笔 is_sure
**允许收回**」,§5.41 也记了中枢右边缘会重画。
**做法**`init_stream` 预热 2 万根,随后逐根 `append_bar`,每根之后重算
`cal_bi_zs_list_pure` + `find_all_bsp`,记录每个信号**第一次出现**在哪一根;
入场用首现根,而不是事后的 `sure_time`。信号身份用「类型 + 极值 KLC 时刻」,
**不能用 `sure_time` 当键**——它正是会被重画的字段。
必须逐根。分段重建(每 S 根算一次)等于在第 t 根多给了 S 根的信息,
测出来的因果性是假的。
| 检查 | 结果 |
|---|---|
| 召回(全量信号在回放中出现过的比例) | **100%**B1 50/50S1 65/65 |
| 幻影(回放发过、全量没有的) | **0** |
| 首现根 全量 `sure_time` | 中位 **+15 根**P25 +11P75 +22P90 +31 |
| **准时拿到的比例** | **0%** |
| 反手 · 5m | 全量口径 | **回放首现口径** |
|---|---|---|
| B1 | PF 2.35 | **0.92**t 0.20,余量 1.37bp |
| S1 | PF 2.75 | **1.30**t 0.64,余量 +4.21bp |
**结论**:信号的**存在性**是因果的(不重画、不消失),但**时点**不是。
实盘要晚中位 15 根、5m 上 75 分钟才知道它存在,而那笔交易吃的正是
「反弹已走完」这个窗口,晚 75 分钟就没了。t 值 0.20/0.64 完全不显著。
⚠️ **可复用的教训**`sure_time` 是引擎事后标注的确认时刻,**不等于可执行时刻**。
任何用它当 entry 的回测都要先过逐根回放。样本 115 笔偏薄,但机制清楚、
点估计从 2.35 塌到 0.92,方向不存在疑义。
### 3.397 线段顶点当标准答案:识别是对的,但精度和时点都不够(step60)
用户提出用线段终点当趋势反转的标准答案——是未来函数,但用作**标签**验证
检测器而非用于交易,能把「检测器对不对」和「能不能交易」分开。
**对照组是关键**:B1 按构造就长在笔的低点上,而笔低点本来就有概率撞上线段底。
所以问的是「在所有同向笔端点里,B1 这个标签把命中率提高了多少倍」。
| 5m | 样本 | 命中线段顶点 | 相对笔端点的提升 |
|---|---|---|---|
| 笔端点(基准) | 48229 | 15.0% | 1.00 |
| **B1** | 623 | **30.3%** | **2.02×** |
| **S1** | 644 | 27.2% | 1.81× |
| B3 / S3 | 2806 | **0.0%** | 0.00 |
15m 同向:B1 28.1%1.81×)、S1 27.3%1.76×)。
各容差档(±0~±5 根)数字完全相同,不是 bug:线段终点**本身就是某根笔的终点**,
两者天然按笔端点对齐,放宽容差不会多命中。B3/S3 恰好 0% 也是对的——
三类长在回抽笔的端点上,按定义就在趋势中段,不该命中反转点。这两条互为
标签有效性的旁证。
**所以检测器是有信息量的:它把「这个笔低点是真反转」的概率翻了一倍。**
但还有两道坎:
| 5m · 按原方向抄底 | 笔数 | 胜率 | PF | t值 |
|---|---|---|---|---|
| **未命中**线段顶点 | 903 | 8.7% | **0.08** | 42.0 |
| **命中**线段顶点 | 364 | 36.3% | **0.70** | 3.2 |
15m:未命中 PF 0.08、命中 PF 0.83t 0.36)。
**精度只有 30%,而那 70% 的噪声是灾难性的(PF 0.08)。更要命的是:即使用
未来函数把精度提到 100%,也只到 PF 0.70~0.83,仍不赚钱。**
原因是 §3.398 的几何:入场价已在结构底上方 **2.90 ATR**step58)。
即使你真站在线段底上,从底部上方 2.9 ATR 处用 2 ATR 止损做多,结构本身就是
负期望的。§3.396 的回放还要在此之上再晚 15 根。
**一类的完整诊断(三层,逐层否定)**
1. 识别对不对 —— **对**2× 提升(step60
2. 精度够不够 —— **不够**,30%;且用未来函数选到 100% 也只到 PF 0.83
3. 时点来不来得及 —— **来不及**,全量口径已晚到入场价高出结构底 2.9 ATR,
实盘回放再晚 15 根
**判定:一类线到此为止。** 病不在识别,在于「等笔确认」这个机制天然把信号
推到了结构失效之后,而这是 `find_all_bsp` 的固有属性,不是可调的参数。
### 3.4 alpha 的来源(step32 消融)
逐条拆掉 `fast_bsp3` 的条件后发现:**alpha 完全来自缠论中枢的上下文定位,