阶段6回测基础●●●●●

Deflated Sharpe Ratio:给"试出来的最高夏普"打假

我的掌握程度:
q-510精讲

先掌握这个答案

DSR的校正逻辑:报告的夏普需打折,折扣取决于①尝试次数N:试得越多,最高夏普的「运气成分」越大;②策略收益的偏度与峰度:肥尾负偏策略的表观夏普更不可信(夏普对尾部不敏感)。直觉版:DSR回答「这个最高夏普在扣除『抽奖』效应后还显著大于0吗」。经验速算:N次尝试的最高夏普,其显著性阈值约按√(2ln N)量级抬升——试100次,需要表观夏普比单次检验高出一大截才算数。

先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。

从理解到使用

先确认分母口径

静态PE、TTM PE、动态PE不可混用。“动态市盈率”字段不能直接重命名TTM。利润为负或接近零时PE解释力很弱;PE倍数也不是投资者收回本金的承诺年数。

核对来源:AKShare字段说明 ↗

从同期超额收益序列计算

常见估计为mean(r−rf)/std(r−rf, ddof=1)×√K;频率、无风险利率和费用口径要匹配。不要直接把CAGR代入算术均值公式。自相关、偏度、肥尾和大量选参会影响可靠性,不存在通用“合格夏普”。

本阶段实战方法 · 回测先过时序、成交与成本三道关

把信号变成策略收益时,每笔收益必须能追溯到当时能下出的订单。

  1. 画出时间线:数据可得→算信号→下单→成交→持仓收益;收盘信号不能倒用当天完整收益。
  2. 明确交易价格、T+1可卖数量、停牌涨跌停、仓位上限和实际成交量约束。
  3. 同时报告毛/净收益、换手、最大回撤、基准和样本外结果;对滑点与费率做压力测试。

使用边界

  • 简单shift(1)只解决部分时序问题;次日开盘成交还要区分隔夜和日内收益。
  • 成本应按成交金额与买卖方向计提;0.15%是教学情景,不是统一市场费率。
背景 · 从一个困惑说起
你随机生成1000个「策略」(纯噪声),全部回测。最好的那个夏普高达1.8——它将进入你的报告、你的简历、你的实盘。但它只是1000次抽奖的头奖。Bailey和López de Prado(2014)问了一个扎心的问题:当我们报告「尝试N次后的最佳夏普」时,该打多大的折扣?
由此产生的问题
Deflated Sharpe Ratio的直觉是什么?它校正了哪两个因素?实务上怎么用?
核心概念
DSR的校正逻辑:报告的夏普需打折,折扣取决于①尝试次数N:试得越多,最高夏普的「运气成分」越大;②策略收益的偏度与峰度:肥尾负偏策略的表观夏普更不可信(夏普对尾部不敏感)。直觉版:DSR回答「这个最高夏普在扣除『抽奖』效应后还显著大于0吗」。经验速算:N次尝试的最高夏普,其显著性阈值约按√(2ln N)量级抬升——试100次,需要表观夏普比单次检验高出一大截才算数。
为什么需要它
①多重检验的绩效版:q-255校正「因子显著性」,DSR校正「策略夏普」——同一数学,不同对象;②研究流程的照妖镜:调参寻优、遗传算法挖因子,本质上都是大N抽奖——寻优器的输出必须过DSR;③自我保护:面试时被问「你这策略调了几轮参数」,正确答案不是「不多」而是「N轮,且我对夏普做了DSF折减」——后者瞬间区分业余与专业。
实际应用场景
实操三步:①记录所有尝试(含失败)的夏普集合;②对「入选者」计算DSR(python的mlfinlab或手写公式);③DSR的p值>0.05→诚实标注「可能是运气」→必须索要新样本外证据。
与之前知识的联系
q-509列出防过拟合手段,本题是其中「多重检验校正」的具体化;q-592的走查验证从另一端解决同一问题(真样本外);q-255是其统计祖先。三个防御工事合围,回测的可信度才立得住。
⚠ 常见误解
  • DSR是精确公式所以结果权威:它依赖的假设(独立性、收益分布估计)同样有误差——它是打折器不是审判官
  • 我只试了几个策略不用校正:『几个』常被低估(参数组合×因子变体×样本区间的组合数轻易过百);如实计数N
  • DSR高就放心上线:它只校正「抽奖」,不防前视/成本/容量——各关口独立把关

🤖 AI导师

导师会先检查你的前置知识(夏普比率、多重检验、样本外概念),再用案例、公式和代码帮助理解。此功能需要先启用服务。