🎰 蒙特卡洛模拟:用随机数回答解析解给不出的问题

从欧式期权定价到回测置信区间:蒙特卡洛的四类用法(含可运行的定价与 Bootstrap 代码)、方差缩减、1/√N 精度定律对算力预算的含义。

蒙特卡洛的哲学极端简单:不知道答案,就把它演一万遍,用频率当概率。它不追求解析优雅,而是用算力换洞察——在期权定价、风险估计、回测稳健性检验三个领域,它都是「解析解不存在或不信任」时的标准答案。

用法一:期权定价与路径依赖产品

欧式期权有 Black-Scholes 解析解,但为什么还要模拟?因为现实中大量产品没有解析解:美式期权(最优行权时机)、亚式期权(均价)、障碍期权(敲入敲出)、以及含复杂条款的结构化产品。蒙特卡洛的流程(20 行 Python 的完整定价器):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import numpy as np

def mc_european_call(S0=100, r=0.03, sigma=0.25, T=1.0, K=105, n=200_000, seed=42):
    rng = np.random.default_rng(seed)
    z = rng.standard_normal(n)
    ST = S0 * np.exp((r - sigma**2/2) * T + sigma * np.sqrt(T) * z)  # GBM 精确离散
    payoff = np.maximum(ST - K, 0.0)
    price = np.exp(-r * T) * payoff.mean()
    se = np.exp(-r * T) * payoff.std() / np.sqrt(n)   # 标准误
    return price, se

# 输出 ≈ (8.93, 0.035),与 BS 公式解析值差 < 0.01 —— 种子固定可复现

相关资产的组合期权(如一篮子期权):用 Cholesky 分解 L·z 一步生成具有目标相关结构的随机向量(见线性代数 )——这是「相关性与波动率同时驱动」的奇异期权唯一现实可行的定价路径。

用法二:回测绩效的置信区间

一个回测给出的年化 18% 只是一条历史路径的实现值。如果 2018 年不是那样走呢?两种反事实模拟:

  • Bootstrap(重抽样):把回测期 2520 个日收益「洗牌重抽」生成 10000 条合成净值曲线,观察年化收益与最大回撤的分布:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def bootstrap_equity(daily_ret, n_paths=10_000, block=20, seed=7):
    """分块 bootstrap:按 20 日整块抽取,保留自相关与波动聚集"""
    rng = np.random.default_rng(seed)
    n = len(daily_ret)
    n_blocks = int(np.ceil(n / block))
    out = np.empty((n_paths, n))
    for i in range(n_paths):
        idx = rng.integers(0, n - block + 1, n_blocks)          # 块起点
        path = np.concatenate([daily_ret[j:j+block] for j in idx])[:n]
        out[i] = np.cumprod(1 + path)
    return out   # 每行一条合成净值,取 MDD 分布/年化分布做分位数

判读口径:若年化的 5% 分位仍是 +6%、MDD 的 95% 分位 -22% 也能承受,策略才算「稳健地通过」——分位数字比点估计诚实一个量级;

  • 参数不确定性:μ 与 Σ 的估计误差传导到组合收益有多大?在估计量的抽样分布上重抽参数、重跑组合,得到「参数误差带」。

这直接回应多重检验 的老问题:在 10000 次重抽里,你的策略有多少比例仍为正期望? 比例低于 90% 的策略,请谨慎对待它的点估计。

用法三:风险与破产概率

给定 μ、Σ 模拟组合路径(或用 GARCH 模拟波动路径),回答长尾问题:

  • 破产概率:凯利仓位下 10 年内净值回撤超过 50% 的概率(见仓位 sizing );
  • 压力情景生成:不满足于历史情景,可以「放大相关系数至 0.9 + 波动率 ×2」构造假想危机,检验限额体系(见压力测试 );
  • VaR/ES 的模拟法:历史模拟样本不足时(如需要 99.9% 分位),参数化蒙特卡洛给出平滑尾部估计(见风险度量 )。

用法四:因子与策略的统计检验

置换检验(permutation test):把因子标签随机打乱 1000 次重新回测,得到「随机因子」的绩效分布——你的真因子夏普 1.2,若随机因子也能到 1.1,那 0.1 的差距就是噪声。这是对抗 p-hacking 的重型武器(与实验设计 的改动评估同源)。

工程要点:精度、种子与方差缩减

  • 1/√N 定律:模拟精度(标准误)只随路径数的平方根改善——精度翻 10 倍,算力 ×100。所以先问「这个决策需要多精确」:上面的定价器 n=20 万时标准误 0.035 元;要 0.0035 元的精度需要 2000 万条路径。判订单点价格到 2 位小数可能要百万路径,判断「夏普是否 >1」几千次就够;
  • 随机数种子必须写进代码:种子固定的模拟才可复现——回测复现纪律的一部分(见研究复现 );
  • 方差缩减:对偶变量(每条路径配一条取反路径,z 与 −z 成对平均)在本例可把标准误差降低 20%–40%;控制变量(用已知解析解的量做锚)同样有效——期权台的日常工具;
  • 离散化偏差:GBM 有精确离散解(上例用的正是精确式),但含随机波动率/跳的模型只能近似离散化——步长要测试收敛性,否则期权价格自带系统性偏差。

关联阅读:概率论基础 是蒙特卡洛的概率根基;衍生品 讲解析定价与模拟定价的分工;样本内外验证 把 bootstrap 变成策略选择纪律。