research: 订正——「额外信号 74%」是按条数统计的放大,按中枢是 52%

用户指出「原来的计算是没有问题的,是你算错了」。改用逐笔对账(不做统计,
把两边中间量全摆出来),结论一半一半。

引擎与我的口径都没问题:36 个额外信号 100% 归为 A 类(全量扫描区间不覆盖
入场根,即 available_ts 棘轮),0% 属于我的 bug;索引逐行对齐(5001=5001,
时间戳全同);额外信号的中枢在全量里全都存在且 (zg,zd) 完全一致,中枢不重画。
棘轮幅度实测 32~234 根。

但同一张表暴露了真正算错的地方:全量每个中枢恰好产出 1.00 个信号,回放里
同一中枢平均触发 2.12 次、最多 5 次。max_per_zone=1 只保证每次扫描返回一个,
但扫描起点随棘轮后移、越过旧入场点,同一中枢会重新产出「第一个」。

所以先前的「额外信号占 74%」不成立——那是按信号条数统计的,按中枢算是
17/33≈52%。这也把数量级对上了:§5.41 的 6.5% 分母是全部中枢,而会产出信号的
中枢里被改过的占比自然更高,两个数不矛盾,先前直接对比也是错的。

仍成立:棘轮机制、额外信号确实亏钱。已推翻:「实盘会多开 74% 的仓」。
真实倍数取决于执行层是否按中枢去重/冷却,该层从未审计,现已提为最高优先级
的前置项——查清前不要据 PF 0.73 动实盘参数。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jackyu66git
2026-08-29 00:38:52 +08:00
co-authored by Cursor
parent 7585491481
commit f14ef540c1
2 changed files with 258 additions and 8 deletions
+47 -8
View File
@@ -1635,12 +1635,46 @@ step70 实测:789 个信号**全部** `z_sure=True`。所以用户说的「浅
顺带澄清一个我一度担心的伪问题:**中枢跨度 > 200 根不会导致突破落不进窗口**,
因为扫描起点是中枢**结束**(末笔确认)而非起点,此时价格已在离开中枢。
**⚠️ 唯一还没对上的是数量级:中枢层面 6.5%,信号层面 75%。**
假设是 `max_per_zone=1` 的放大——每个中枢只返回**第一个**入场点,而
`start = searchsorted(ts, available_ts)` 每棘轮一次就越过旧入场点,
同一中枢于是反复产出新的「第一个」;全量只用最终 `available_ts`,每中枢至多一个
**这条未测**`step69_mechanism.py` 已写好,判据是「额外信号落在几个不同中枢上」,
三次后台运行都被中断,需重跑)。
#### 3.3994b ⚠️ 订正:「额外 74%」是按条数统计的放大,按中枢是 52%(step71)
用户指出「原来的计算是没有问题的,是你算错了」。逐笔对账(不做统计,把两边的
中间量全摆出来),结论一半一半
**引擎没问题,我的口径也没错位**(BTC 5m,逐笔追 36 个额外信号):
| 归类 | 个数 | 占比 |
|---|---|---|
| A 棘轮(全量扫描区间不覆盖入场根) | 36 | **100%** |
| B 中枢在全量里不存在 | 0 | 0% |
| **C 我的 bug(区间覆盖了却没出信号)** | **0** | **0%** |
索引也是干净的:原始 df 5001 行 = `TF_DF.dataframe` 5001 行,逐行时间戳全部对齐。
额外信号的中枢在全量里**全都存在且 `(zg,zd)` 完全一致**——中枢确实不重画。
棘轮幅度实测 32~234 根,例如入场根 2141:回放 avail 在 2104 根,
全量 avail 已棘轮到 2299 根,全量扫描区间 [2299,2499) 根本不覆盖 2141。
**但同一张表暴露了我确实算错的地方:**
| 分组 | 信号条数 | 不同中枢数 | 每中枢触发 | 最多 |
|---|---|---|---|---|
| 额外 | 36 | **17** | **2.12** | 5 |
| 全量也有 | 16 | 16 | **1.00** | 1 |
全量每个中枢恰好产出一个信号,回放里同一中枢平均触发 2.12 次(最多 5 次)——
`max_per_zone=1` 只保证「每次扫描返回一个」,但扫描起点随棘轮后移,越过旧入场点
后同一中枢重新产出「第一个」。
**所以 §3.3994 的「额外信号占 74%」不成立**,那是按**信号条数**统计的,
被重复触发放大约一倍。**按中枢算是 17/33 ≈ 52%。**
这也把数量级对上了:§5.41 的 6.5% 是**全部中枢**里确认时刻被改的比例,而会产出
信号的中枢里被改过的占比自然高得多——两个数不矛盾,**是分母不同,先前拿它们
直接对比也是错的**。
**仍然成立**:棘轮机制、额外信号确实存在且确实亏钱(PF 0.26~0.36)。
**已被推翻**:「实盘会多开 74% 的仓」。真实倍数取决于执行层对同一中枢是否
去重/冷却——**这一层从未审计,它决定 2.12 这个倍数会不会落到实盘上**。
### 3.4 alpha 的来源(step32 消融)
@@ -2850,9 +2884,14 @@ API 限流风险隔离三个好处。
## 10. 待办清单
- [ ] 🚨 **B4 实盘口径 PF 是 0.73,回测报 4.21 —— 最高优先级**(§3.3994)。
时点干净(100% 准时,一类那个坑没有),但实时会多产出 74% 的信号,
时点干净(100% 准时,一类那个坑没有),但实时会多产出信号,
它们 PF 0.26 / t −6.21,**三道滤网按同比例刷除、完全挡不住**。
回测那 51 笔要事后全量重算才能识别,实盘当下分不出来。**要做三件事**:
⚠️ **多出的量按中枢算是 52%,不是先前写的 74%**(§3.3994b 已订正,
74% 是按信号条数、被同一中枢重复触发放大了 2.12 倍)。**要做三件事**:
- [ ] **⓪ 先审计执行层的去重/冷却 —— 这条现在排在最前**(§3.3994b)。
同一中枢在实时会触发 2.12 次(最多 5 次),若执行层已按中枢或按持仓去重,
实盘的实际多开量远小于回放,**整件事的严重程度会大幅下降**。
在这条查清前,不要据 PF 0.73 去动实盘参数
- [x] **① 1m 复验完成**122 笔 / 72% 额外 / PF 0.72,与 5m 一致。
ATR 门控在 1m 上刷掉 45%(5m 只 8.6%)但对额外信号无区分力。
**但回测口径只剩 34 笔(t 3.26),据此改实盘前应先扩币或延长样本**