为每个结论配上误差范围
回测说一个策略每天赚 0.05%。是能力还是运气?假设检验用 p 值回答:如果真实均值为零,样本看起来这么好的频率有多高?stats.ttest_1samp(r, 0.0) 检验一个均值,stats.ttest_ind(a, b, equal_var=False) 在不假设波动率相同的情况下比较两个资产(韦尔奇检验,安全的默认选择)。stats.jarque_bera(r) 通过偏度和峰度检查收益率是否正态。小的 p 值是反对被检验想法的证据,而不是你喜欢的想法的证明。检验的好坏取决于前提:t 检验假设薄尾,而日收益率并非如此。
当公式可疑时,就重抽样。自助法从数据中有放回地抽取许多样本,每次重新计算一个统计量(均值、夏普比率、分位数),并从结果的离散程度读出区间:stats.bootstrap((r,), stat, method='percentile', random_state=np.random.default_rng(seed))。统计量必须接受 axis 参数,因为 SciPy 一次传入整批重抽样,种子使结果可重复。置换检验打乱两组的标签,看仅凭偶然得到与观测一样大的差距的频率。最后,对 62 个资产在 5% 水平检验,约有三个仅靠运气就显得显著。stats.false_discovery_control(p) 应用 Benjamini–Hochberg 校正,告诉你哪些发现能留下。
真实数据的信息在最近 2,500 个交易日里,SPY 的日均收益为 0.046%,t=2.80,p=0.005。年化夏普比率为 0.89,95% 自助区间从 0.26 到 1.53:数据无法把它确定得更精确。62 个资产中有 22 个通过均值非零的 5% 检验,但只有 12 个能通过 Benjamini–Hochberg 校正。雅尔克–贝拉检验以 0 的 p 值拒绝 SPY 的正态性。
- 默认用韦尔奇检验:不要假设两个资产波动率相同。
- 存疑就重抽样:自助法需要带
axis参数的统计量和种子。 - 数清检验次数:5% 水平做 62 次检验约有三个假发现,要做校正。
实验:评分内容
- 均值为零吗?8 分
- 两个资产,两种波动率8 分
- 正态性检验6 分
- 自助区间18 分
- 年化夏普比率8 分
- 带误差范围的夏普比率10 分
- 置换检验14 分
- 统计错误发现12 分
- 完整研究16 分