跳到主要内容

期权与隐含波动率入门(Black-Scholes)

:::info 学习目标 你将能计算欧式看涨期权和 Greeks,检查无套利价格边界,反解 IV,并说明 Black–Scholes 假设与真实波动率曲面的差异。 :::

直觉

期权给你「以约定价 KK、在到期 TT 买卖标的」的权利。看涨期权(call)的价值取决于:现价 SS 越高、越值钱行权价 KK 越低、越值钱到期越远、波动越大、越值钱(波动 = 机会)。Black-Scholes 给出这四者(加无风险利率 rr)到价格的解析公式。反过来,从市场报价倒推回波动率,就得到隐含波动率(IV)。它是使模型价格等于市场价格的参数,不应直接等同于无偏的未来波动预测。同一到期日的不同行权价往往形成微笑或偏斜。

Black-Scholes 与 Greeks

看涨期权价格:

C=SN(d1)KerTN(d2),d1=ln(S/K)+(r+12σ2)TσT,d2=d1σTC = S\,N(d_1) - K e^{-rT} N(d_2),\qquad d_1 = \frac{\ln(S/K)+(r+\tfrac{1}{2}\sigma^2)T}{\sigma\sqrt{T}},\quad d_2 = d_1 - \sigma\sqrt{T}

主要希腊字母(风险敏感度):Δ=N(d1)\Delta=N(d_1)(标的价格变动 1 单位时,期权价格的一阶变化)、Γ=n(d1)SσT\Gamma=\dfrac{n(d_1)}{S\sigma\sqrt{T}}(Delta 的变化率)、Vega=Sn(d1)T\text{Vega}=S\,n(d_1)\sqrt{T}(波动率敏感度)。Delta 是敏感度,不是百分比意义上的价格弹性。

「人话」解释:什么是「隐含波动率微笑」?

Black-Scholes 假设波动率 σ\sigma 是常数——但真实市场里,不同行权价的期权隐含波动率并不一样。外汇和部分商品常见较对称的“微笑”;股票指数更常见左翼较高的波动率偏斜(smirk/skew),反映下跌保险需求与负跳跃风险。曲面形状还受供需、杠杆效应和期限影响,不能只用“肥尾”一个原因解释。本页代码人为构造对称微笑,目的是演示 IV 反解,不代表所有市场的真实形状。

可运行案例:BS 定价、Greeks、IV 反推与微笑

假设真实定价波动率随行权价变化(人为构造一个微笑),先用 BS 算出各档 call 价格,再用二分法反推 IV,复现微笑曲线。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

S, r, T = 100.0, 0.02, 0.25
def bs_call(sigma, K):
  d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
  d2 = d1 - sigma*np.sqrt(T)
  return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
def iv(price, K):                          # 二分法反推: bs_call 关于 sigma 单调递增
  lo, hi = 1e-4, 3.0
  for _ in range(100):
      m = 0.5*(lo + hi)
      if bs_call(m, K) < price: lo = m   # 价格偏低 -> sigma 偏低
      else: hi = m
  return 0.5*(lo + hi)

sigma0 = 0.20
true_vol = lambda K: sigma0*(1 + 1.5*(np.log(K/S))**2)   # 人为微笑: OTM 更贵
strikes = np.linspace(80, 120, 21)
prices = [bs_call(true_vol(K), K) for K in strikes]
ivs = [iv(p, K) for p, K in zip(prices, strikes)]

# 平值期权的 Greeks
K_atm = 100.0; sig = sigma0
d1 = (np.log(S/K_atm)+(r+0.5*sig**2)*T)/(sig*np.sqrt(T))
print(f"ATM call: Delta={norm.cdf(d1):.3f}  Gamma={norm.pdf(d1)/(S*sig*np.sqrt(T)):.4f}  "
    f"Vega={S*norm.pdf(d1)*np.sqrt(T):.3f}")
print(f"真实定价波动率(ATM)={true_vol(K_atm):.3f}  反推 IV(ATM)={iv(bs_call(true_vol(K_atm),K_atm),K_atm):.3f}")

plt.figure(figsize=(9, 3.5))
plt.plot(strikes, [v*100 for v in ivs], 'o-', color='purple', lw=1.4)
plt.axvline(S, color='gray', ls='--', lw=0.8, label='平值 S')
plt.title('隐含波动率微笑(反推自 BS 价格)'); plt.xlabel('行权价 K'); plt.ylabel('IV (%)')
plt.legend(fontsize=9); plt.tight_layout(); plt.show()
print("\n→ 微笑形态说明市场为尾部定价高于正态, 收益分布肥尾。")

无套利检查与模型边界

反解 IV 前先检查 call 是否满足 max(0,SKerT)CS\max(0,S-Ke^{-rT})\le C\le S;越界价格没有有效 IV。Black–Scholes 假设连续交易、常数波动和无跳跃,且本页未加入股息。Vega 很小时,极深实值/虚值期权的 IV 对一分钱报价误差都很敏感,因此真实曲面要做流动性过滤和无套利平滑。

实践与延伸

  1. 输入违反上下界的价格,让 IV 求解器返回明确错误。
  2. 加入连续股息率,并验证 put-call parity。

延伸阅读:Hull《Options, Futures, and Other Derivatives》;Gatheral《The Volatility Surface》。

小结

  • Black-ScholesC=SN(d1)KerTN(d2)C=SN(d_1)-Ke^{-rT}N(d_2),连接 S,K,T,r,σS,K,T,r,\sigma 与期权价;
  • GreeksΔ,Γ,Vega\Delta,\Gamma,\text{Vega})量化对价格、凸性、波动率的敏感度;
  • 隐含波动率从市场价反推;其微笑形态是「市场认为分布肥尾」的直接证据。

章末自测

检查核心概念

1. 关于本章主题,哪项说法更准确?