自助法与蒙特卡洛
为什么需要重抽样
Section titled “为什么需要重抽样”夏普比率、最大回撤、t 值的解析置信区间都建立在"收益独立同分布"之上,而真实收益自相关、异方差、厚尾俱全。重抽样绕开解析推导:直接用数据自身的经验分布回答"这个统计量有多不稳定"。
普通自助法为何不可用
Section titled “普通自助法为何不可用”普通(i.i.d.)自助法逐条随机抽取收益,破坏时间序列的自相关结构——而自相关恰恰决定波动率聚集与回撤形态。金融数据应使用:
- 块自助法(block bootstrap):连续抽取长度为 的块,块内保留自相关。 的经验法则取 量级;
- 平稳自助法(stationary bootstrap):块长随机(几何分布),平均块长仍为 ,对非平稳更稳健。
import numpy as np
def block_bootstrap_ci(returns: np.ndarray, stat, n_boot: int = 2000, block: int = 21, alpha: float = 0.05, seed: int = 42) -> tuple: """returns: 日收益序列;stat: 统计量函数(如年化夏普)""" rng = np.random.default_rng(seed) T = len(returns) stats_ = [] for _ in range(n_boot): idx = [] while len(idx) < T: start = rng.integers(0, T) idx.extend((start + np.arange(block)) % T) sample = returns[idx[:T]] stats_.append(stat(sample)) lo, hi = np.quantile(stats_, [alpha / 2, 1 - alpha / 2]) return float(lo), float(hi)
# 用法:年化夏普的 95% 置信区间# ann_sr = lambda r: r.mean() / r.std() * np.sqrt(252)# block_bootstrap_ci(daily_excess, ann_sr, block=21)一条 3 年日频、 的策略,块自助法给出的 95% 区间通常接近 ——与解析结果一致,但不需要任何分布假设。
蒙特卡洛与重排检验
Section titled “蒙特卡洛与重排检验”- 蒙特卡洛:先假设一个收益生成过程(如 GARCH + 学生 t),反复模拟策略在该过程下的表现分布。结论只在其假设的生成过程内有效——若策略吃的是过程里没建模的效应,蒙特卡洛看不出问题。
- 重排检验(permutation test):把信号序列随机平移或反转,看"对齐后"的收益是否显著优于"错位后"的原分布。它不依赖任何收益分布假设,是检验择时类策略是否只是运气的利器。
量化中的用法
Section titled “量化中的用法”- 回测报告的每个关键指标(SR、年化、最大回撤)都给 bootstrap 置信区间;
- 评估择时信号用重排检验,评估分布假设下的稳健性用蒙特卡洛;
- 记住重抽样的根本局限:它回答"这个统计量在此样本下多不稳定",不能回答"未来分布是否改变"。
- 普通自助法破坏序列相关,金融数据应用块自助法或平稳自助法
- 蒙特卡洛的结论只在其假设的生成过程内有效
- 用重排检验(permutation test)评估择时策略