期权定价
看涨期权到期时,股价高于行权价就拿到差额,否则一文不值。这一章用三种算法给它定价:一步二叉树、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,因为定价时用的是风险中性假设,不是「股票历史平均涨了多少」。
课堂练习
- 把二叉树的
u改成1.2、d改成0.8,重算q和价格。 - 把 Black-Scholes 的
sigma改成0.30,看价格升高还是降低。 - 用同一个种子把蒙特卡洛路径从
20000改成5000和50000,写下和公式相差多少。