Skip to content

期权定价

看涨期权到期时,股价高于行权价就拿到差额,否则一文不值。这一章用三种算法给它定价:一步二叉树、Black-Scholes 公式、蒙特卡洛。三种假设不同,价格不必相等。

学完后,应能对同一道题写出三个价格,并说明涨跌幅度、波动率和随机种子各是多少。例子见 examples/fintech/options.py。标准正态分布用 math.erf 计算,不另装库。

一步二叉树

现在股价 S = 100。这一期结束后只有两种可能:乘 u = 1.1 变成 110,或乘 d = 0.9 变成 90。这一期的无风险利率 r = 0.02。行权价 K = 100。

到期收益:

110 时:max(110 - 100, 0) = 10
90 时:max(90 - 100, 0) = 0

风险中性概率不是「真实涨跌概率」。它由无风险利率和涨跌幅度决定,用来折现:

q = ((1 + r) - d) / (u - d)

这里 q = (1.02 - 0.9) / (1.1 - 0.9) = 0.6。

期权现在的价格:

C = (q * 10 + (1 - q) * 0) / (1 + r)

结果是 5.8824。

q 必须落在 0 和 1 之间,否则这个涨跌幅度和无风险利率配不到一起。多步二叉树是把这一步重复好几期,入门先把一步算平。

Black-Scholes

股价被看成连续变动。输入是现价 S、行权价 K、到期时间 T(按年)、连续复利的无风险利率 r、波动率 sigma。

d1 = (ln(S / K) + (r + sigma² / 2) * T) / (sigma * sqrt(T))
d2 = d1 - sigma * sqrt(T)
C = S * N(d1) - K * exp(-r * T) * N(d2)

N 是标准正态分布的累积函数。S = 100,K = 100,T = 1,r = 0.02,sigma = 0.20 时,看涨期权价格是 8.9160。

它和二叉树的 5.8824 不是同一道题:二叉树只有一期、涨跌是写死的 10%,Black-Scholes 是一年里连续波动、波动率 20%。作业里把两组假设写在价格旁边。

蒙特卡洛

在 Black-Scholes 的同一套假设下,直接模拟到期股价,再把看涨收益折现。

ST = S * exp((r - sigma² / 2) * T + sigma * sqrt(T) * Z)

Z 是标准正态随机数。到期收益是 max(ST - K, 0),现在的价格是这些收益的平均数再乘 exp(-r * T)。

20000 条路径、随机种子 7,得到 8.7589。它靠近公式的 8.9160,路径再加,会更靠近。种子固定,报告才能复现。

收益分布与风险价值 里的路径用的是历史样本的均值和标准差。这里的漂移项是无风险利率 r,因为定价时用的是风险中性假设,不是「股票历史平均涨了多少」。

课堂练习

  1. 把二叉树的 u 改成 1.2、d 改成 0.8,重算 q 和价格。
  2. 把 Black-Scholes 的 sigma 改成 0.30,看价格升高还是降低。
  3. 用同一个种子把蒙特卡洛路径从 20000 改成 5000 和 50000,写下和公式相差多少。