篮子期权与矩匹配:用相关结构给一篮子资产定价
算术篮子 B=ΣwᵢSᵢ 的 payoff 依赖一篮子相关资产,单个资产是对数正态、但它们的和不是——没有闭式。本文用矩匹配(Levy 1992)解析算出 E[B]、E[B²],把篮子分布用前两矩配成对数正态再定价;并以几何篮子(组合方差法)作为教科书下界做对照。真实 4 资产算例下,矩匹配价 5.16 紧贴 MC 真值 4.99(偏差仅 +3.3%),而朴素几何篮子下界 4.37 系统性低估 12.6%;并诚实拆穿「相关结构漏算 / 权和为1假设 / 离散化 / 矩匹配高估右尾 / PCA 降维 / 美式提前行权」六类真实陷阱。
如果你能定价单个股票期权,不代表你能定价”一篮子股票”的期权。差别在一个字:和。
单个资产 S(T) 在风险中性下是几何布朗运动,对数正态、有闭式。但一个篮子(比如”沪深300 成分加权”或”一篮子科技股”)的终值是
B(T) = Σ_i w_i · S_i(T)plaintext几个对数正态变量的加权和,本身不再是任何简单分布——没有 Black-Scholes 闭式,连对数正态都不是。但市场天天在交易篮子期权(指数期权本质就是篮子期权)。怎么办?
结论先放这:矩匹配(Moment Matching, Levy 1992)是最实用的解析近似——它只用两个数字(E[B] 和 E[B²])把篮子分布配成对数正态,再套 BS 型公式。在我 4 资产的相关算例下,矩匹配价 5.16 紧贴蒙特卡洛(MC)真值 4.99(偏差仅 +3.3%);而用”几何篮子 + 组合方差”的朴素下界法给出 4.37,系统性低估 12.6%。相关结构在这里是主角:ρ 从 −0.2 升到 0.95,篮子价从 1.45 一路涨到 7.21。附完整 Python 与六类真实陷阱(高阶)。

一、为什么篮子没有闭式#
单资产 GBM 的好处是:对数收益 ln(S_T/S_0) 是正态,所以 S_T 是单变量对数正态,任意 max(S_T−K,0) 都能用 BS 闭式积分出来。
篮子不行。即使每个 S_i 都是对数正态,它们的加权和 B = Σ w_i S_i 的分布在数学上不是对数正态、不是正态、不是任何标准命名分布。原因有两层:
- 凸性:
max(B−K,0)对B是凸函数,而B又是S_i的线性组合——算术平均天然高于几何平均(AM ≥ GM),所以”算术篮子期权”比”几何篮子期权”贵,贵的就是这部分凸性。 - 相关结构:
B的方差 =w'Σw,Σ_ij = ρ_ij σ_i σ_j。相关系数一变,B的分布就整体平移、变胖变瘦。相关越高 → 篮子波动越大 → 期权越贵。
下面这条 MC 路径直观展示了”篮子是四个成分按权重揉出来的”——它不是任何单个成分的对数正态轨迹。

二、矩匹配:用两个矩把篮子”装进”对数正态#
Levy (1992) / Milevsky-Posner (1998) 的思路极简:不知道完整分布,但我知道它的前两矩,那就用前两矩去匹配一个对数正态——因为对数正态只由两个参数决定,刚好够。
风险中性下,单个资产 S_i(T) = S0_i·exp((r−½σ_i²)T + σ_i√T·Z_i)。关键解析结果:
E[S_i(T)] = S0_i · e^{rT}
E[S_i S_j] = S0_i S0_j · e^{2rT + ρ_ij σ_i σ_j T} # 含相关项!
E[B] = Σ w_i · E[S_i] = w'·(S0·e^{rT})
E[B²] = Σ_i Σ_j w_i w_j · E[S_i S_j]plaintext注意 E[B²] 里那项 ρ_ij σ_i σ_j T——相关结构被完整写进了二阶矩。算完 m2=E[B²]、m1=E[B],配
ln B ~ N(m, v), m = 2·ln(m1) − ½·ln(m2), v = ln(m2) − 2·ln(m1)plaintext再用对数正态看涨期望
E[max(B−K,0)] = e^{m+½v}·Φ(d1) − K·Φ(d2),
d1 = (m+v−ln K)/√v, d2 = d1−√vplaintext折现即得篮子看涨价。整个过程闭式、零模拟、毫秒级。
三、对照基准:几何篮子(教科书下界)#
矩匹配好不好,得有杆秤。最自然的秤是几何篮子——把权重 w 改成作用在对数上:
几何篮子 G(T) = Π S_i(T)^{w_i} => ln G = Σ w_i ln S_i 是正态 => G 是对数正态,有闭式plaintext因为 B = Σ w_i S_i ≥ Π S_i^{w_i} = G(加权 AM ≥ 加权 GM,逐点成立),所以
几何篮子看涨价 ≤ 算术篮子看涨价(=真值) ≤ 矩匹配近似plaintext几何篮子用组合方差 σ_b² = w'Σw 定价,是标准的下界。它低估多少,正度量了”算术凸性溢价”有多大。
四、真实数值:三法同台#
固定 4 资产:S0=[100,80,120,60]、σ=[0.25,0.30,0.20,0.35]、w=[0.30,0.25,0.25,0.20]、r=3%、T=1y、基准 ρ=0.4。跨行权价对比:

基准档 K=100 的精确数字:
| 方法 | 价格 | 对 MC 偏差 |
|---|---|---|
| MC 真值(算术篮子,20万路径) | 4.9927 | — |
| 矩匹配对数正态 | 5.1584 | +3.32% |
| 几何篮子(组合方差下界) | 4.3650 | −12.57% |
几个要点:
- 矩匹配只高估 3.3%——它抓住了算术凸性的”大部分”,是又快又准的近似。
- 几何篮子低估 12.6%——这就是凸性溢价的量级;若直接用几何篮子报价,等于白白少收一成多权利金。
- 终端分布上,矩匹配对数正态的重心(E[B]=94.80)与 MC 真实算术和精确对齐,只是右尾略厚(对数正态尾部比真实算术和更肥,这是矩匹配固有的高估来源)。

五、相关结构才是主角#
把 ρ(共同相关系数)从 −0.2 扫到 0.95,固定 K=100:

| ρ | MC 真值 | 矩匹配 | 几何下界 |
|---|---|---|---|
| −0.20 | 1.4538 | 1.4898 (+2.5%) | 0.8009 |
| +0.40 | 4.9927 | 5.1584 (+3.3%) | 4.3650 |
| +0.95 | 7.2131 | 7.4265 (+3.0%) | 6.6504 |
相关性是篮子定价的灵魂:ρ 从 −0.2 到 0.95,篮子价翻了快 5 倍(1.45 → 7.21)。负相关时成分互相抵消、篮子很稳、期权便宜;高相关时成分齐涨齐跌、篮子波动爆炸、期权贵。矩匹配在整段都紧跟 MC(偏差 2.5%~3.3%),几何下界始终扮演干净的下界。
六、完整 Python 实现(核心段)#
import numpy as np
from scipy.stats import norm
S0 = np.array([100., 80., 120., 60.])
SIG = np.array([0.25, 0.30, 0.20, 0.35])
W = np.array([0.30, 0.25, 0.25, 0.20])
r, T = 0.03, 1.0
def corr_matrix(rho):
d = len(S0); R = np.full((d, d), rho); np.fill_diagonal(R, 1.0); return R
def basket_moments(rho):
R = corr_matrix(rho)
ES = S0 * np.exp(r * T)
ES2 = np.outer(S0, S0) * np.exp(2*r*T + R*np.outer(SIG, SIG)*T) # 含相关项
return W @ ES, W @ ES2 @ W # E[B], E[B²]
def basket_call(rho, K):
m1, m2 = basket_moments(rho)
m = 2*np.log(m1) - 0.5*np.log(m2) # 矩匹配 => 对数正态参数
v = np.log(m2) - 2*np.log(m1); v = max(v, 1e-12)
sq = np.sqrt(v); F = np.exp(m + 0.5*v)
d1 = (m + v - np.log(K)) / sq; d2 = d1 - sq
return F*norm.cdf(d1) - K*norm.cdf(d2)
def naive_geometric_call(rho, K): # 几何篮子下界
R = corr_matrix(rho); cov = np.outer(SIG, SIG)*R
sig_b = np.sqrt(W @ cov @ W)
Fb = np.exp(np.sum(W*np.log(S0))) * np.exp(r*T) # 几何均值 forward
se = sig_b*np.sqrt(T)
d1 = (np.log(Fb/K) + 0.5*se**2)/se; d2 = d1 - se
return Fb*norm.cdf(d1) - K*norm.cdf(d2)
def mc_basket_call(rho, K, M=200_000, seed=20240719):
rng = np.random.default_rng(seed)
L = np.linalg.cholesky(corr_matrix(rho))
eps = rng.standard_normal((M, len(S0))) @ L.T
ST = S0 * np.exp((r-0.5*SIG**2)*T + SIG*np.sqrt(T)*eps)
B = ST @ W
return np.exp(-r*T) * np.maximum(B-K, 0.0).mean()python定价时矩匹配与几何篮子都是闭式:输入 ρ 与 K,毫秒出价。MC 仅用于”造真值”和画图——实战里你不会在定价环节跑 20 万路径,那正是矩匹配存在的意义。
七、诚实的六类真实陷阱#
矩匹配好用,但每一处都藏着坑:
- 相关结构漏算 = 定价全错。
E[B²]里的ρ_ij σ_i σ_j T是篮子方差的全部来源。用ρ=0(假设独立)或错用历史相关而非风险中性相关,价格能差出一倍以上。真实做市要用隐含相关(从指数期权与成分期权反推),不是历史样本相关。 - 权重必须和为 1 且非负(对标准篮子)。 本算例
Σw=1。若权重含负(卖空成分做价差篮子),矩匹配仍可用,但几何篮子下界失效(GM 对负权重无意义)——此时下界要另找。 - 矩匹配高估右尾。 对数正态尾部比真实算术和更肥,所以价系统性偏高(本文 +3.3%)。深度虚值/长到期尤其明显;要更准得上 Edgeworth/Gram-Charlier 扩到四阶矩,或干脆 MC。
- 离散化与 MC 种子噪声。 MC 真值本身有标准误(20 万路径下约 ±0.02)。本文所有”偏差%“都要扣掉这个数——所谓 +3.3% 里有一部分可能只是 MC 噪声,真实误差更小。
- PCA 降维的诱惑与代价。 50 个成分直接算
w'Σw和 Cholesky 没问题,但有人想用 PCA 压到 3 个主成分再定价——主成分是正交的、改变了权重语义,除非重新映射w,否则定的是”另一个篮子”的价。 - 美式/路径依赖篮子。 本文只处理欧式到期 payoff。美式篮子期权(可提前行权)没有简单矩匹配,必须树或 MC + 最小二乘(LSM);亚式篮子(取路径均值)则要先算 B 的平均分布的矩,矩匹配公式要重写——别直接套本文闭式。
八、它解决什么问题#
篮子期权的本质是”相关结构被加权和之后的非线性 payoff”。矩匹配给了一个工程上无可替代的甜点:
- 比 MC 快 6 个数量级(闭式 vs 十万路径),适合实时报价、 Greeks 敏感性扫描、波动率曲面校准;
- 比几何篮子下界准一个凸性量级的溢价(本文 12.6%);
- 把”相关结构怎么进价格”这件事,写成了一行
E[B²] = ΣΣ w_i w_j S0_i S0_j e^{2rT+ρ_ijσ_iσ_jT}。
九、三法怎么选:一张实战决策表#
把上文浓缩成一个可直接照做的选择题:
| 场景 | 用什么 | 理由 |
|---|---|---|
| 实时报价、波动率曲面校准、Greeks 扫参 | 矩匹配 | 闭式毫秒级,偏差仅个位数 %,够用 |
| 需要严格下界(风控/保证金下限) | 几何篮子 | 有保证的不等式,保守但安全 |
| 深度虚值、长到期、奇异 payoff | MC(配 Cholesky) | 矩匹配右尾偏肥、误差放大;此时宁可慢 |
| 成分含卖空(权重为负) | MC 或 Edgeworth 扩阶 | 几何篮子 GM 对负权重失效 |
| 美式/路径依赖篮子 | LSM-MC 或树 | 矩匹配只处理欧式到期 payoff |
一句话收尾:单资产靠分布,篮子靠矩;矩匹配用两个数字,把一篮子的相关与凸性一起装进了对数正态。
完整可运行代码与全部配图生成脚本:
src/content/blog/basket-option-moment/generate_images.py(同仓库)。运行即复现本文所有数字与五张图。