本节摘要:金融是蒙特卡洛最大的商业用户。本节以欧式看涨期权开场——解析公式与模拟当场对账;再进入路径依赖期权的腹地(亚式期权必须靠模拟);最后处理风险价值与预期亏空的估计。全程沿用 5.1 的五步流水线,重点展示方差缩减在真实产品里的选型逻辑。
1970 年前后,金融学完成了一次范式搬家:股价被建模成随机过程(第 4 章的几何布朗运动),衍生品定价变成"计算某个随机收益的期望"。这一搬家的直接后果是:凡是收益依赖路径形状的产品,解析公式要么难看要么不存在,蒙特卡洛成了主食。今天大行内部成千上万的定价作业与隔夜风险计算,跑的就是这几节原理的工业版。
欧式看涨期权:到期按 max(S(T) − K, 0) 支付。Black–Scholes 公式给出解析价格——几何布朗运动的分布已知(对数正态),期望加贴现即可闭式算出。它的价值不在公式本身,而在给蒙特卡洛当对照组:模拟实现先跟它对账,对上了才允许去碰没有公式的产品。
定价的经济学底座要交代一句:公式里的"利率"是无风险利率 r 而不是预期收益率 μ——定价在"风险中性测度"下进行,收益期望按 r 贴现。直观版解释:对冲消掉了方向性风险后,市场不因你承担可对冲的风险而付钱,所以所有可交易资产的期望涨幅都折算为 r。这层"测度变换"的严格讨论需要鞅工具(4.3 节的等价鞅测度),本节先取用结论。
亚式期权按"平均价格"支付,比如到期前三个月的日均价格与行权价的差额。平均值把波动抹平,所以亚式比欧式便宜——它是对冲成本更低的工具,企业采购原材料常用它锁均价。它的解析定价只有近似式(平均值的分布不是精确对数正态),于是蒙特卡洛成为日常。
模拟时注意三点。其一,时间网格要够密才能代表"日均价",但也要留意真实合约的采样规则(交易日均值与日历日均值差别不小)。其二,同一条路径算完整条再算下一条,网格数据能完整保留,路径依赖才有依托。其三,方差缩减选型有讲究:亚式收益是路径均值的单调函数,对偶变量立竿见影;若产品还带"触碰障碍才生效"条款,对偶失效(障碍穿越不单调),改用条件蒙特卡洛(障碍外的情形可解析)或重要性抽样。

背景:某航空公司在为航油采购套保,投行报价一份亚式看涨:未来一年 252 个交易日的均价减行权价 80 元、不足为零,报价单写着"权利金 4.62 元"。公司想知道这个价格是否离谱。
建模:油价按几何布朗运动 dS = r·S dt + σ·S dW,取 r = 3%、σ = 35%、现价 82 元。风险中性测度下,期权公允价值 = e 的 −rT 次方乘 E[mean(S) − K 的正部]。
操作:模拟十万条路径、每条 252 步;对每条路径算均价、算收益、贴现取平均;启用对偶变量后用同样预算把标准误压到千分位。
解读:模拟公允价 4.58 元,与报价 4.62 元的差距在两个标准误(约 0.03 元)之内——报价合理,买方不必还价,卖方也没宰人。真正的谈判空间不在权利金而在 σ 的取值:若公司自己的历史波动率估计是 28% 而非 35%,重跑模拟公允价降到约 3.5 元——报价差 1 元,八成是波动率假设的分歧。这提示谈判的正确战场:先谈波动率假设,再谈价格。
变式:把条款换成"障碍亚式"(均价超 100 元则合约作废,用于压低权利金),对偶变量失效,改用条件蒙特卡洛。跑完对比:障碍砍掉了右尾,权利金降约三成,但保护效果也在暴跌行情里打折——便宜与保护不足是一枚硬币的两面,模拟把这笔账算给了买方看。
import numpy as np rng = np.random.default_rng(555) S0, r, sigma, T, K = 82.0, 0.03, 0.35, 1.0, 80.0 n_steps, n_paths = 252, 100_000 dt = T / n_steps # 对偶变量:同一批正态数取正负两套路径 Z = rng.normal(0.0, 1.0, size=(n_paths, n_steps)) payoffs = [] for sign in (1.0, -1.0): incr = (r - 0.5*sigma**2)*dt + sign*sigma*np.sqrt(dt)*Z log_paths = np.log(S0) + np.cumsum(incr, axis=1) averages = np.exp(log_paths).mean(axis=1) # 算术均价 payoffs.append(np.maximum(averages - K, 0.0)) payoffs = np.concatenate(payoffs) price = np.exp(-r*T) * payoffs.mean() se = np.exp(-r*T) * payoffs.std(ddof=1) / len(payoffs) print(f"亚式公允价 {price:.3f} ± {1.96*se:.3f}(95% 置信)") # 敏感性:波动率假设是谈判主战场 for sv in (0.28, 0.35, 0.42): incr = (r - 0.5*sv**2)*dt + sv*np.sqrt(dt)*Z averages = np.exp(np.log(S0) + np.cumsum(incr, axis=1)).mean(axis=1) p = np.exp(-r*T)*np.maximum(averages - K, 0).mean() print(f"sigma = {sv:.2f}: 公允价 {p:.3f}") # 典型输出:4.58 ± 0.03;sigma 从 0.28 到 0.42,公允价约 3.5 至 5.8 元
定价问"值多少",风险管理问"最多亏多少"。**风险价值(VaR)**在置信水平 α 下回答"十天之内、九成九的情况下,损失不超过多少";**预期亏空(ES)**再进一步,回答"一旦跌破那条线,平均亏多少"。两者用蒙特卡洛估计都是全分布模拟后取分位数或尾均值。
方法论要点有二。其一,重尾不容正态假设:股价收益的实测分布比正态厚尾得多(3.5 节的教训在金融数据上最刺眼),正态假设下的 VaR 系统性低估尾部——2008 年危机后监管框架集体转向 ES 的部分原因即在此。其二,尾部的模拟精度贵:九成九分位落在样本最贵的百分之一里,标准误大,重要性抽样或多层模拟是压缩成本的常规武器。
⚠️ 模拟风险的经典事故:用历史数据校准 σ 却忽略了波动率聚集(第 2 章"违反独立增量"清单上的第一名)。平静期估出的低 σ 会给 VaR 注入虚假的安全感,而市场转舵恰恰发生在聚集加剧之后。风控模型的稳健做法是让 σ 随状态变化(随机波动率模型),这已经站在第 6 章前沿的门口。
金融现场收工。下一站换个行业:排队系统——闭合公式与仿真双轨并行,容量设计从公式走到决策。