本文将从文献中查阅欧式香草(欧式看涨、欧式看跌)期权的定价公式,用代码实现该公式。
公式来自于文献[1]。在某些假设下,期权、标的资产的价格满足一个扩散方程(某一类偏微分方程)。
该方程的解析解,就是期权的价格。因此,没有什么难度,无非就是照着书抄公式。
网上例子有很多,随便一搜一大把,我就不在这里废话了。
为了后期的对称性、统一性,可以用一种取巧的方法,不用硬打公式。
定义如下一些函数。
import numpy as npfrom scipy.stats import normdef blsd(x, u, v, t):return (np.log(x) + u * t) / (v * (t ** 0.5))def blsd_1(s, k, t, v, r, d):return blsd(s / k, r - d + 0.5 * v ** 2, v, t)def blsd_2(s, k, t, v, r, d):return blsd(s / k, r - d - 0.5 * v ** 2, v, t)def nd_1(s, k, t, v, r, d):return norm.cdf(blsd_1(s, k, t, v, r, d))
于是,就有欧式看涨期权的解析解
import numpy as npfrom scipy.stats import normdef calc_price(s, k, v, r, d):"""欧式看涨期权的价格:param s: 标的资产价格:param k: 行权价:param v: 波动率:param t: 距离到期时间(以“年”为单位):param r: 无风险利率:param d: 分红率(连续复利):return: """price = s * np.exp(-d * t) * norm.cdf(blsd(s / k, r - d + 0.5 * v * v, v, t)) - k * np.exp(-r * t) * norm.cdf(blsd(s / k, r - d - 0.5 * v * v, v, t))return price
欧式看跌期权,就不写了。
下面是文献[1]的截图。
Ref.
[1] 约翰·赫尔. 期权、期货及其他衍生产品[M]. 机械工业出版社, .