18 — 治理章程:口径定义 / 判据 / 脏数据红线 / 否决权(用户签字)
这份是治理章程,不是技术文档。AI 起草、用户签字。用户签的不是"算法对不对" (那是 AI + 确定性回算 + transcript 校验的事),是 "标准是不是事先定的、有没有在 看到结果后被改过、判据冲突时谁裁决"。任何改生产行为的 PR、任何"丢哪些数据/选哪个 判据"的决定,都要落到这里、对照这里。 起因:2026-06-13 口径审计——先发现一个根因 bug,AI 又把它的影响夸大了一个数量级、 用错误基线做了"证明"、并单方面切了生产(已回滚)。治理空隙必须正式关闭,且关闭方式 本身要防住"AI 起草判据、AI 自己选、AI 报数让用户信"的递归漏洞。
0. 三条核心原则(2026-06-13 加,关闭递归漏洞)
A. 历史重算只认决策当时的冻结快照,不用今天重拉的数据
任何历史重算/回算,唯一可信输入是决策当时落盘的快照——committee transcript 冻结的值、 账本/verdict_review 落盘原值。绝不用今天重新拉取的数据,覆盖一切外部输入、包括价格 (不只是新闻)。实证:6/9 transcript 冻结 VIX=21.4,今天 DB 已被 yfinance 修订成 19.9。
- 没当时快照的历史点 → 标"不可忠实复现,仅近似",结论不得依赖其精确值。
- 重算脚本必须先用 ≥3 个有 transcript 的冻结点反向校验,复现冻结值才可信 (先例
scripts/research/audit_convention_diff.pyv2:4 点全复现 730 窗)。脚本是被验证对象, transcript 是金标准,不许反过来"信脚本"。
B. 用户显式否决权(写进章程本身,不只是"签字同意章程")
即使预注册判据给出 PASS/FAIL,用户有权签字推翻该结论,记录在案即可(写明推翻哪条 判据、理由、日期)。判据 PASS ≠ 自动改生产;判据 FAIL ≠ 自动否决。判据是输入,不是裁决; 最终决定权在用户。
C. 判据:起草 / 人话意图 / 跑前批准 / 冲突裁决
- 判据由 AI 起草,但起草时必须附一句人话意图解释——这条判据想捕捉/守护什么,用用户 看得懂的话写,让用户能在跑之前有意义地批准它(而不是批准一串自己看不懂的阈值)。
- 判据必须在跑实验/回算之前经用户批准(口头或文字),跑后不许改(认知泄漏红线)。
- 判据冲突由用户裁决,不许 AI 单方面定;冲突 + 选定结果记入 §5 审计 log。 实例:黄金防御判据——论文用"中位右偏"、本地脚本用"p_below",AI 单方面选了后者(空隙)。
1. 口径定义(单一可信源,禁止多处各写)
| 口径 | canonical 定义 | 单源位置 | 禁止 |
|---|---|---|---|
| forward return | 日历天:base=≤asof 最后收盘,target=≥asof+Timedelta(days=N) 首收盘 | core.regime_probability.forward_return | shift(-N)(交易日) 冒充日历天 |
| "近 2 年"窗口 | 504 交易日(滚动/tail)—— 用户 2026-06-13 裁决:选 504 因改动面小 + 回测已在用(非"更对",504/730 数据证明双向错位、影响很小);要点=生产与回测强制同源 | utils.market_metrics.TRADING_DAYS_2Y(代码对齐由 #42 落实) | 504/730/全量多处各写 |
| 价格分位 / VIX 防御分位 | 近 504 交易日内 ≤ 当前值比例 | _calc_price_quantile / _vix_percentile(tail 504,#42 落实) | 对 get_history_data 返回直接算 |
| 信号→成交时序 | T 日收盘算信号,T+1 生效(shift(1)) | 各回测臂 | 同日 lookahead |
get_history_data(period) | period 真截断(2026-10 修,此前被忽略、恒返近 730 行):1d/5d=最近 N 根,mo/y=相对最后一根 bar 的日历回看,max=全量;喂指标/分位的调用方拉 METRICS_PERIOD="5y"(日历 2y 只有 ~484–502 根 < 504) | calc.timeframe_analysis._apply_period / calc.market_metrics.METRICS_PERIOD | 指标调用方传 "2y";绕过 period 另写 tail(730) |
2. 判据标准(预注册,不许事后改)
- 判据跑前写死在脚本 docstring + 附人话意图(§0-C),跑后不许动。先例:
fit_path_calibration.py、validate_gold_defense.py、TAeval_ta_signal.py。 - 冻结自由度再回算:实现者已知结局时"看结果再微调"是认知泄漏,比代码 bug 难防。
- 判据冲突按 §0-C 由用户裁决。
3. 脏数据 / 前视红线(最硬)
- 新闻/情绪/基本面:只用决策当时落盘快照,缺了标"缺失",绝不用今天重抓的补 (事后修订 + 索引错位 + 已知结局 = 前视污染,无法自证)。
- 纯价格衍生量可合法重算(只依赖 ≤当天收盘、无前视),但仍受 §0-A 约束:历史点 无冻结快照时只能近似,且重算脚本须经 transcript 校验。
- 缺失即缺失,不补值、不用未来均值回填。
4. 合并前置条件(生产行为变更)
任何改生产行为的 PR 必须附:
- 一句话信号影响翻译:「这个改动会让系统在哪些情况下,把原本的 X 信号变成 Y 信号」。 答不出 = 不知影响面 = 不该合。
- 确定性回算差异报告 + transcript 校验(纯价格类):列出过去哪几天信号会变、为什么, 人话呈现 + 每日明细可独立复算(先例
audit_convention_diff.pyv2 + CSV)。
5. 审计结论 log(追加式)
| 日期 | 结论 | 证据 | 处置 |
|---|---|---|---|
| 2026-06-13 | forward-return 实现 4 遍、口径不一(交易日 vs 日历天) | PR #41 | 收单源 forward_return |
| 2026-06-13 | 根因:get_history_data(period) 不截断、返 get_history_df(默认730) → VIX/price 分位对 730 行(≈2.9年) 而非 504 算,生产与回测(504)口径分叉 | audit_convention_diff.py v2 | 选 504 强制同源(#42 落实),下游对齐后合 |
| 2026-06-13 | ⚠ AI 自纠错:初判把根因夸大成"全量36年DB"、用 days=100000 做"证明"得 33 天——错。transcript 反向校验(4 点)证实生产=730 窗:6/9 冻结VIX21.4→730窗88%≈transcript87%,全量窗仅69% | 4 个 transcript 冻结点 | v1 报告作废 |
| 2026-06-13 | ⚠ code-review 又抓同型夸大:脚本只建 VIX 哨兵腿,但生产防御=VIX腿 OR ATR腿;"13 天翻转"是 VIX 腿上界非实际防御决策,且 11/13 贴防御线±2pp 属数据修订噪声 → 实际影响防御决策的稳健天数≈0 | audit_convention_diff.py(修后) + CSV vix_leg_flip/near_boundary_noise 列 | 措辞改"VIX腿翻转(上界)";根因影响极小,重跑预期不翻案 |
| 2026-06-13 | ⚠ AI 越权:未经批准单方面把生产 VIX 切成 504 → 已回滚到 730(原状) | git | 504 改动留 #42,等章程签字+裁决后走 |
| 2026-06-13 | 撤回归因:"口径 bug 解释 6 月抄底防御偏弱"——反证:6 月 transcript INDEP_DEFENSE_FLAG: on,防御在触发不是偏弱 | 6/9、6/11 transcript | 删除该归因 |
| 2026-06-13 | 判据冲突裁决(§0-C 实例):黄金防御判据 p_below(本地) vs 中位右偏(论文) 冲突——用户裁决两者都不采纳,理由=这条腿要保护的是"高 VIX 期流动性挤兑深跌(左尾)"非涨跌频率 | 用户 §0-C 人话裁决 | 见下条动作 |
| 2026-06-13 | 生产行为变更(已授权):黄金高 VIX/ATR 防御 全拦 → 强制分批 DCA(放行 1/3、≥5 交易日/批、≤3 批/20 交易日窗;VIX+ATR 两腿 OR 成单计划)。参数=机制选定圆整值非优化(左尾样本~6-20 脆)。可逆(gold_defense_dca_enabled=false)。账本开始记 defense_gold_dca_* 供"分批 vs 一次性"长期验证 | 用户"批准。三点"授权 + 确定性全链确认(零 LLM) + pytest 739 绿 | 本 PR 落地 |
| 2026-10-07 | 根因修复:get_history_data 起按 period 截断。两个通道此前都是 ~3 年涨跌:宏观块 "MoM"(DXY/TIP/TNX/VIX)+ Macro agent 自调的 get_history_data 工具(tool_calls.jsonl 33,909 次,3mo/6mo 占 98%)。63 个工作日回放:旧口径天天"黄金双顺风";按真实窗口 DXY/TIP 至少一腿说反——宏观块 59 天、工具 3mo/6mo 63 天,实为双逆风 25 / 42 / 53 天。对账:日报 old 口径复现 TNX/VIX/DXY 63/63、TIP 55/63;窗口内 4,286 次工具调用 n_days=730 且基准价 100% 复现 old | experiments/macro-mom-fix-2026-10/ | 指标调用方改 METRICS_PERIOD,regime/brief/分位/多周期文本前后逐字相同 |
6. 红线(这次定,长期守)
- ❌ 不重抓历史新闻/情绪/基本面/价格重算(§0-A、§3)。
- ❌ 不在看到回算结果后调任何判据/阈值/窗口(§0-C、§2)。
- ❌ 不靠"观察几天/感觉对不对"给生产签字。
- ❌ 不擅自改生产行为(本次 AI 已违规 → 回滚 → 入 log)。
- ❌ 不急着合积压 PR(#37/#41/#42):根因改历史序列,下游验收/账本依附旧口径, 先定口径 → 全部对齐 → 一起合。
- ⚠ regime-lock"方向锁=杠杆旋钮"只作相对结论,不作绝对判断。
7. 签字
用户签字 = 确认:本页(含 §0 三原则)的口径/判据/红线/否决权机制是事先定的, 后续任何"看结果改判据 / 丢数据 / 改窗口 / 擅改生产"都属违规、要在 §5 log 留痕。 技术正确性由 AI + 确定性回算 + transcript 校验负责,不在签字范围。
- [x] 用户签字:longsizhuo(2026-06-13 经 /goal 明确授权采纳本章程 + 授权 504 生产口径变更)