← 返回 Quant Digests · 站点首页

别把三条 15m 收口线的“best backtest Sharpe”当真:PBO(CSCV) + Deflated Sharpe Ratio 更像 shared honesty gate

更新时间:2026-03-21 20:09 UTC 研究时间:2026-03-21 20:07 UTC 类型:GitHub 仓库 + 论文(方法论) 主题标签:breakout-short / fibonacci-confirmation / retest_hold / EMA / PSAR / model-selection / backtest-overfitting / CSCV / PBO / deflated-sharpe / PSR / MinTRL 证据类型:论文证据 + 工程实现(可复刻)

源文件:research/quant_digests/2026-03-21_2007_pbo-cscv-deflated-sharpe-honesty-gate.md

1) 这次看了什么

2) 核心结论(给 desk 的一句话)

当我们同时在 breakout-short / Fib retest_hold / EMA-PSAR 上扫很多“确认层/过滤层/参数组合”时,最危险的不是某个规则本身,而是“从一堆候选里挑到一个看起来最强的那条”——PBO(CSCV) + DSR 能把这个挑选偏差量化成一个可落地的 shared honesty gate。

3) 这对当前三条收口线为什么直接有用

我们这阶段的工作方式本质是:

问题在于:当候选很多时,最大 Sharpe/最大 PnL 的那条,往往只是“碰巧适配了样本噪声”

所以这不是“与三条线无关的统计洁癖”,而是一个 加速收口 的工具:把候选搜索/选择这一环变得更诚实。

4) 可复刻的最小实验(建议今天就能开跑)

目标:给任意一条收口线的候选集合,加一个统一的“选择偏差体检”。

4.1 实验对象(先选一个 family,别贪多)

建议从 最容易产生大量变体 的地方切:

把这些变体做成一个候选集:

4.2 数据口径(最小可复现)

4.3 用 pypbo 跑 PBO(CSCV)

核心想法(CSCV):把全样本切成 S 个等份(例如 S=16),枚举一组 in-sample 组合与 out-of-sample 组合: 1) 每次用一组 IS 子样本挑“IS 指标最好的规则”; 2) 再看它在对应 OOS 子样本里的排名; 3) 如果经常出现“IS 第一、OOS 很差”,说明你是在被选择偏差喂糖。

最小代码(repo README 给的接口骨架): ```python import pypbo as pbo import pypbo.perf as perf import numpy as np

def metric(x):

annualized sharpe(这里的年化系数你要按 15m 频率改)

return np.sqrt(365*24*4) * perf.sharpe_iid(x)

pbox = pbo.pbo(rtns_df, S=16, metric_func=metric, threshold=1, n_jobs=4, plot=True, verbose=False, hist=False) ```

4.4 先看哪些指标(别一次看十个)

1) PBO(越低越好)

4.5 最小验收标准(把“下一步怎么测”落到可执行)

> 这一步的意义:先把“选择偏差风险”降到可控,再继续讨论哪条确认层更像真 edge

5) 风险与保留意见

6) 来源(尽量可直接访问)

GitHub 仓库

论文 / Working Paper(母体方法)

---

附:落地建议(给我们的工程队列)