无套利定价理论
预计学习时间:3-4 小时
难度:⭐⭐⭐⭐(核心思想不难,但数学表述比较抽象)
核心问题:如何给金融衍生品定价?答案是——找到一个”不花钱就能赚钱的机会不存在”的价格。
概述
无套利定价是传统量化区别于 ML 量化的核心思想分野。
- ML 量化问:“数据里有什么模式?”
- 传统量化问:“什么价格下不存在套利机会?”
本节将回答:
- 什么是套利?为什么”无套利”是定价的基础?
- 什么是”风险中性世界”?为什么要换一个概率视角?
- 如何用”复制组合”给期权定价?
- FTAP 定理说了什么?为什么它被称为”金融数学基本定理”?
一、从”无免费午餐”讲起
1.1 什么是套利?
白话定义:套利就是”不花钱就能赚钱”——或者更准确地说,“零风险、零成本、正收益”。
例子:
假设在北京,一杯咖啡卖 25 元。在上海,同一杯咖啡卖 20 元。运费 3 元。
买入:在上海花 20 元买入咖啡
卖出:在北京以 25 元卖出
运费:3 元
净利润:25 - 20 - 3 = 2 元
这就是套利:你不需要承担任何风险,也不需要本金(可以先借 20 元买咖啡,卖掉后还钱),就能赚 2 元。
1.2 金融中的套利
在金融市场中,套利的核心思想是一样的:
如果同一个资产(或等价的资产组合)在两个地方的价格不同,就存在套利机会。
| 套利类型 | 描述 | 例子 |
|---|---|---|
| 空间套利 | 同一资产在不同市场价差不同 | A 股和 H 股的价差 |
| 时间套利 | 远期价格偏离现货价格的理论值 | 期货基差 |
| 统计套利 | 历史上稳定的价差关系暂时偏离 | 配对交易 |
1.3 无套利条件
弱无套利:不存在”零成本、零风险、正收益”的投资组合。
白话解读:如果你不花钱就能构建一个投资组合,且最终亏损的概率为零,那么盈利的概率也必须为零。换句话说,没有白捡的钱。
强无套利:不存在”零成本、几乎零风险、正期望收益”的投资组合。这是更严格的条件,实际应用中弱无套利已经足够。
1.4 无套利的直觉:为什么价格会被”逼”到一个确定值
想象你面前有一个期权,当前市场价格是 10 元。
如果这个期权的”合理价格”实际上是 12 元,会发生什么?
- 所有知道这个信息的交易员都会买入这个期权
- 大量买入推高价格
- 价格从 10 元涨到 12 元
- 套利机会消失
关键洞察:只要市场中存在足够多的套利者,任何套利机会都会在极短时间内被消除。因此,在有效市场中,资产的价格必须等于”不存在套利的那个唯一价格”。
二、风险中性定价(核心思想)
2.1 一个思想实验
假设有一个看涨期权:
- 股票当前价格 元
- 一年后,股票要么涨到 120 元,要么跌到 80 元(各 50%)
- 期权的行权价 元
- 无风险利率
在”真实世界”中定价(P 测度):
折现到今天: 元。
问题来了:这个定价对吗?
答案是:不对。因为你忽略了一个关键事实——你可以通过买卖股票和债券来”复制”这个期权的收益。
2.2 复制组合(定价的核心技巧)
白话解释:如果我能用股票和债券构建一个组合,使得一年后这个组合的收益和期权完全一样,那么这个组合今天的价格就是期权的”合理价格”。
否则就会存在套利机会。
具体计算:
设买入 份股票,借入 元现金(以无风险利率计息)。
一年后:
- 如果股价涨到 120:(期权收益)
- 如果股价跌到 80:(期权收益)
解这个方程组:
两式相减:,所以
代入:,所以
组合今天的成本:
所以期权的合理价格是 8.93 元,不是 7.14 元!
2.3 风险中性概率
注意到在上面的推导中,我们完全没有用到”股票涨跌的真实概率是 50%“这个信息。
这说明了一个惊人的事实:期权的价格与投资者对股价涨跌的概率判断无关!
我们可以反推出一个”隐含概率” :
用风险中性概率重新定价:
和复制法得到的结果完全一致!
2.4 风险中性世界的白话解释
“真实世界”(P 测度):
- 股票的期望收益率 = 无风险利率 + 风险补偿
- 投资者是风险厌恶的
- 不同投资者对期望收益率的看法不同
“风险中性世界”(Q 测度):
- 所有资产的期望收益率 = 无风险利率
- 投资者是风险中性的(不在乎风险,只在乎期望收益)
- 定价结果和真实世界一样!
白话解读:我们不需要知道投资者有多厌恶风险,不需要知道股票的真实期望收益率,不需要知道股价上涨的真实概率。我们只需要假设一个”假想世界”,在这个世界里所有资产的期望收益都等于无风险利率,然后用这个世界的概率来给衍生品定价。结果是对的。
2.5 风险中性定价公式
白话解读:
- 在 Q 测度下,计算期权到期时的期望收益
- 用无风险利率折现到今天
- 结果就是期权的价格
为什么这个公式成立? 因为如果价格偏离了这个值,就存在套利机会。而无套利条件下,价格必须等于复制组合的成本。
2.6 Q 测度 vs P 测度
| 维度 | P 测度(真实概率) | Q 测度(风险中性概率) |
|---|---|---|
| 全称 | Physical measure | Risk-neutral measure |
| 含义 | 真实世界中事件发生的概率 | 假想世界中事件发生的概率 |
| 资产期望收益 | 等于无风险利率 + 风险补偿 | 等于无风险利率 |
| 用于 | 风险管理、情景分析 | 衍生品定价 |
| 需要估计 | 需要(主观的) | 不需要!由无套利条件确定 |
| 能观测吗? | 不能直接观测 | 不能直接观测 |
核心区别:Q 测度是”由无套利条件唯一确定的”,你不需要估计任何参数就能用。
三、等价鞅测度存在性定理(FTAP)
3.1 FTAP 的直觉
Fundamental Theorem of Asset Pricing(资产定价基本定理) 被称为金融数学中最重要的定理。
直觉版表述:
“无套利” ⟺ “存在一个风险中性测度 Q”
白话解读:
- 正向:如果市场不存在套利机会,那么一定存在一个”假想概率” Q,使得所有资产折现后在 Q 下的期望等于当前价格
- 反向:如果存在这样的 Q,那么市场就不存在套利机会
3.2 鞅(Martingale)是什么?
白话定义:一个随机过程 是鞅,如果给你截至时刻 的所有信息,你对 在未来任何时刻的最佳预测就是它当前的值。
赌博的类比:
- 鞅:公平赌博。不管你已经赌了多少轮,下一轮的期望收益都是 0。你无法通过任何策略战胜它。
- 上鞅(Supermartingale):对你不利的赌博。期望收益 < 0。
- 下鞅(Submartingale):对你有利的赌博。期望收益 > 0。
FTAP 说的是:在风险中性测度 Q 下,所有资产的价格折现后都是鞅。
也就是说:
白话解读:在风险中性世界里,不管你用什么交易策略,你都无法战胜市场。这和有效市场假说有异曲同工之处。
3.3 FTAP 的三个层次
| 层次 | 条件 | 定价含义 |
|---|---|---|
| FTAP 1 | 无免费午餐(NFLVR) | 存在等价鞅测度 Q |
| FTAP 2 | 无套利(NA) | 存在与 P 等价的鞅测度 Q |
| FTAP 3 | 完备市场 | 鞅测度 Q 唯一 |
完备市场的白话解释:市场中”足够多”的可交易资产,使得任何衍生品的收益都可以被精确复制。此时 Q 测度唯一,定价唯一。
不完备市场的白话解释:市场中没有足够的工具来复制所有衍生品。此时 Q 测度不唯一,价格不唯一,存在一个”合理价格区间”。
四、复制组合
4.1 Delta 对冲
白话解释:如果你卖出了一份看涨期权,你面临”股价上涨时亏损”的风险。怎么办?
答案是:买入适当数量的股票来对冲这个风险。这个”适当数量”就是 Delta。
Delta 的含义:股价每变动 1 元,期权价格大约变动 Delta 元。
连续对冲:在 Black-Scholes 框架下,如果你持有 份股票和 份现金,这个组合的价值在任何时刻都等于期权的价值。通过不断调整 Delta(动态对冲),你可以完美复制期权的收益。
4.2 复制法的推导框架(通往 Black-Scholes)
考虑一个组合:
其中 份股票被用来对冲期权 的风险。
用伊藤引理展开 :
选择 (Delta 中性),则:
关键观察: 项被消掉了!组合的收益变成纯确定性的(没有 项)。
在无套利条件下,确定性收益必须等于无风险利率:
代入整理后得到 Black-Scholes PDE:
白话解读:这个 PDE 就是”无套利条件”的数学表达。它不依赖于任何关于投资者风险偏好的假设,不依赖于股价上涨的真实概率——只依赖于无套利。
4.3 完备市场 vs 不完备市场
完备市场的条件:
- 市场中存在一个无风险资产(债券)
- 每种风险源(布朗运动)都有对应的可交易资产
在完备市场中:
- 任何衍生品都可以被精确复制
- 风险中性测度 Q 唯一
- 定价唯一
不完备市场的例子:
- 跳跃扩散模型(除了布朗运动还有跳跃风险,但跳跃风险不可交易)
- 随机波动率模型(波动率风险本身不可直接交易)
- 信用衍生品(违约风险不可直接对冲)
在不完备市场中:
- 衍生品不能被精确复制
- Q 测度不唯一
- 定价存在区间
- 需要额外的”效用函数”或”市场价格风险参数”来确定价格
五、具体定价示例
5.1 远期合约的定价(最简单的例子)
远期合约:约定在时刻 以价格 买入一份股票。
直觉:你应该在时刻 0 借钱买入股票,持有到时刻 。你的成本是 加利息。
定价公式:
白话解读:远期价格 = 现货价格 × (1 + 无风险利率的时间价值)。如果你不持有现货而是用远期,你就省下了这笔钱可以存银行赚利息,所以远期价格要高一些来补偿。
验证无套利:
如果 :
- 套利者以 买入现货,以 卖出远期
- 到期时交割现货,收到
- 还掉借款
- 净赚
如果 :
- 套利者卖空现货得到 ,存入银行,买入远期
- 到期时银行存款变为
- 付 取回现货,还给借出者
- 净赚
因此,远期合约的公平价格必须是 。
5.2 连续红利股票的远期定价
如果股票支付连续红利(收益率 ):
白话解读:持有远期而不是现货,你错过了红利收入。所以远期价格要减去这部分”错过的红利”。
5.3 换元测度技巧
从物理测度到风险中性测度的变换:
在 P 测度下,股票服从:
通过 Girsanov 定理,定义 ,在 Q 测度下:
白话解读:在 Q 测度下,漂移项从 变成了 。风险溢价 被”吸收”到概率测度的变换中了。
这就是为什么定价时不需要知道 的原因——测度变换已经把真实收益率的信息”编码”到概率分布中了。
六、Python 示例
6.1 模拟风险中性世界下的资产路径
import numpy as np
import matplotlib.pyplot as plt
# ============================================================
# 风险中性测度下的资产路径模拟
# P 测度:dS = mu*S*dt + sigma*S*dW_P
# Q 测度:dS = r*S*dt + sigma*S*dW_Q
# ============================================================
np.random.seed(42)
# 参数
S0 = 100.0 # 初始股价
r = 0.05 # 无风险利率 5%
mu = 0.10 # 真实世界预期收益率 10%
sigma = 0.30 # 波动率 30%
T = 1.0 # 1 年
n_steps = 252
dt = T / n_steps
n_paths = 1000
# 生成共享的布朗运动增量(保证 P 和 Q 用的是同一个随机路径)
Z = np.random.normal(0, 1, size=(n_paths, n_steps))
# ---- P 测度路径 ----
dW_P = np.sqrt(dt) * Z
dlog_S_P = (mu - sigma**2/2) * dt + sigma * dW_P
log_S_P = np.cumsum(dlog_S_P, axis=1)
log_S_P = np.hstack([np.zeros((n_paths, 1)), log_S_P])
S_P = S0 * np.exp(log_S_P)
# ---- Q 测度路径 ----
# dW_Q = dW_P + (mu - r)/sigma * dt
# 所以 log_S_Q 的漂移项 = (mu - sigma^2/2)*dt + sigma*((mu-r)/sigma*dt) - (mu-r)*dt + r*dt = (r - sigma^2/2)*dt
# 简化:直接用 r 替换 mu
dW_Q = dW_P + (mu - r) / sigma * dt
dlog_S_Q = (mu - sigma**2/2) * dt + sigma * dW_Q
# 验证:展开 dlog_S_Q = (mu-s2/2)*dt + sigma*dW_P + (mu-r)*dt = (2mu-r-s2/2)*dt + sigma*dW_P
# 不对,让我直接用公式:
# 在 Q 测度下:dlogS = (r - sigma^2/2)*dt + sigma*dW_Q
dlog_S_Q_correct = (r - sigma**2/2) * dt + sigma * dW_Q
log_S_Q = np.cumsum(dlog_S_Q_correct, axis=1)
log_S_Q = np.hstack([np.zeros((n_paths, 1)), log_S_Q])
S_Q = S0 * np.exp(log_S_Q)
time_points = np.linspace(0, T, n_steps + 1)
# ---- 绘图 ----
fig, axes = plt.subplots(2, 2, figsize=(16, 10))
# 1. P 测度 vs Q 测度的路径对比(各 3 条)
for i in range(3):
axes[0, 0].plot(time_points, S_P[i], color='#e41a1c', alpha=0.6, lw=1, linestyle='-')
axes[0, 0].plot(time_points, S_Q[i], color='#377eb8', alpha=0.6, lw=1, linestyle='--')
axes[0, 0].plot([], [], color='#e41a1c', lw=2, label=f'P 测度 (μ={mu})')
axes[0, 0].plot([], [], color='#377eb8', lw=2, linestyle='--', label=f'Q 测度 (r={r})')
axes[0, 0].set_title('同一随机路径在 P 和 Q 测度下的表现')
axes[0, 0].legend()
axes[0, 0].set_xlabel('时间(年)')
axes[0, 0].set_ylabel('股价')
# 2. 期望路径对比
axes[0, 1].plot(time_points, S_P.mean(axis=0), color='#e41a1c', lw=2, label=f'E_P[S_t] = S0*exp(μt)')
axes[0, 1].plot(time_points, S_Q.mean(axis=0), color='#377eb8', lw=2, linestyle='--',
label=f'E_Q[S_t] = S0*exp(rt)')
axes[0, 1].plot(time_points, S0*np.exp(mu*time_points), 'k:', lw=1, alpha=0.5)
axes[0, 1].plot(time_points, S0*np.exp(r*time_points), 'k:', lw=1, alpha=0.5)
axes[0, 1].set_title('期望路径:P vs Q')
axes[0, 1].legend()
axes[0, 1].set_xlabel('时间(年)')
# 3. 折现价格在 Q 测度下是鞅
discounted_S_Q = S_Q * np.exp(-r * time_points[None, :])
mean_discounted = discounted_S_Q.mean(axis=0)
axes[1, 0].plot(time_points, mean_discounted, color='#377eb8', lw=2,
label=f'E_Q[S_t * e^(-rt)]')
axes[1, 0].axhline(y=S0, color='black', linestyle='--', lw=1.5, label=f'S_0 = {S0}')
axes[1, 0].set_title('折现价格在 Q 测度下是鞅(期望值 = S_0)')
axes[1, 0].set_xlabel('时间(年)')
axes[1, 0].set_ylabel('E_Q[S_t * e^{-rt}]')
axes[1, 0].legend()
# 4. 用风险中性定价给远期合约定价
K_forward = S0 * np.exp(r * T) # 远期理论价格
# 到期收益 = S_T - K
payoff_Q = S_Q[:, -1] - K_forward
price_Q = np.exp(-r*T) * payoff_Q.mean()
axes[1, 1].hist(payoff_Q, bins=50, density=True, alpha=0.6, color='steelblue')
axes[1, 1].axvline(x=0, color='red', linestyle='--', lw=2)
axes[1, 1].set_title(f'远期合约到期收益分布(Q 测度)\n远期价格 K={K_forward:.2f},期权价值≈{price_Q:.4f}')
axes[1, 1].set_xlabel('S_T - K')
plt.tight_layout()
plt.show()
print("=== 风险中性定价验证 ===")
print(f"远期理论价格 F = S0*exp(rT) = {S0}*exp({r}*{T}) = {K_forward:.4f}")
print(f"Q 测度下远期合约价值 = e^(-rT) * E_Q[S_T - K] = {price_Q:.6f}")
print(f"(应该接近 0,因为远期合约初始价值为 0)")
print()
print(f"P 测度下 E[S_T] = {S_P[:, -1].mean():.2f}(理论 {S0*np.exp(mu*T):.2f})")
print(f"Q 测度下 E[S_T] = {S_Q[:, -1].mean():.2f}(理论 {S0*np.exp(r*T):.2f})")
print(f"关键:Q 测度下的期望收益 = 无风险利率 r = {r}")6.2 验证远期定价公式
import numpy as np
# ============================================================
# 验证远期定价公式:F = S0 * exp(r*T)
# ============================================================
np.random.seed(42)
# 参数
S0 = 100.0
r = 0.05
T = 1.0
n_paths = 100000 # 大量路径
n_steps = 252
dt = T / n_steps
sigma = 0.30 # 波动率(理论上不影响远期价格!)
# 在 Q 测度下模拟
Z = np.random.normal(0, 1, size=(n_paths, n_steps))
log_S = (r - sigma**2/2) * dt + sigma * np.sqrt(dt) * Z
S_T = S0 * np.exp(np.sum(log_S, axis=1))
# 对于不同的远期价格 K,计算远期合约的价值
print("=== 远期合约价值验证 ===")
print(f"S0 = {S0}, r = {r}, T = {T}")
print()
for K in [95, 100, 105, 110]:
# 远期多头(约定以 K 买入):到期收益 = S_T - K
payoff = S_T - K
forward_value = np.exp(-r * T) * payoff.mean()
print(f"远期价格 K = {K:>3.0f}:远期合约价值 = {forward_value:>8.4f}")
print()
print(f"理论远期价格 F = S0*exp(rT) = {S0 * np.exp(r * T):.4f}")
print("当 K = F 时,远期合约价值 ≈ 0(验证成功)")
# 验证:不同波动率下,远期价格应该一样
print()
print("=== 不同波动率下远期价格不变 ===")
for sig in [0.10, 0.20, 0.30, 0.50, 0.80]:
Z_sig = np.random.normal(0, 1, size=(n_paths, n_steps))
log_S_sig = (r - sig**2/2) * dt + sig * np.sqrt(dt) * Z_sig
S_T_sig = S0 * np.exp(np.sum(log_S_sig, axis=1))
K_theory = S0 * np.exp(r * T)
fv = np.exp(-r * T) * (S_T_sig - K_theory).mean()
print(f"σ = {sig:.2f}:远期合约价值 = {fv:>8.6f}")
print()
print("波动率不影响远期价格——这就是无套利定价的力量。")七、本节要点回顾
| 概念 | 核心要点 | 白话解读 |
|---|---|---|
| 套利 | 零成本、零风险、正收益 | 白捡的钱 |
| 无套利 | 套利机会不存在 | 市场是”公平”的 |
| 风险中性定价 | 用”假想概率”定价,不需要知道真实概率 | |
| Q 测度 | 所有资产期望收益 = 无风险利率 | 一个”调整过”的概率视角 |
| 鞅 | 未来期望 = 当前值 | 公平赌博,无法战胜 |
| FTAP | 无套利 ⟺ 存在等价鞅测度 Q | 定价理论的基石 |
| 复制组合 | 用基础资产复制衍生品收益 | 定价的”构造性方法” |
| Delta 对冲 | 持有 份股票对冲期权风险 | 动态复制的关键 |
| 完备市场 | Q 测度唯一,定价唯一 | 任何衍生品都可以完美复制 |
| 远期定价 | 最简单的无套利定价例子 |
下一步:理解了无套利定价的思想后,我们进入 03-资产价格模型.md,看看现实中的资产价格模型是如何在 GBM 基础上一步步完善的。