本篇中,作为Quant中的Q宗(P Quant 和 Q Quant 到底哪个是未来?),我们将尝试把之前的介绍的工具串联起来,小试牛刀。
您将可以体验到:
- 如何使用python内置的数学函数计算期权的价格;
- 利用
numpy加速数值计算; - 利用
scipy进行仿真模拟; - 使用
scipy求解器计算隐含波动率;
穿插着,我们也会使用matplotlib绘制精美的图标。
1. 关心的问题
我们想知道下面的一只期权的价格:
- 当前价
spot: 2.45 - 行权价
strike: 2.50 - 到期期限
maturity: 0.25 - 无风险利率
r: 0.05 - 波动率
vol: 0.25
关于这样的简单欧式期权的定价,有经典的Black - Scholes [1] 公式:
其中 S 为标的价格, K 为执行价格, r 为无风险利率, τ=T−t 为剩余到期时间。 N(x) 为标准正态分布的累积概率密度函数。 Call(S,K,r,τ,σ) 为看涨期权的价格。
观察上面的公式,需要使用一些数学函数,我们把它分为两部分:
log,sqrt,exp,这三个函数我们可以从标准库math中找到- 标准正态分布的累计概率密度函数,我们使用
scipy库中的stats.norm.cdf函数
2. 使用numpy加速批量计算
大部分的时候,我们不止关心一个期权的价格,而是关心一个组合(成千上万)的期权。我们想知道, 随着期权组合数量的增长,我们计算时间的增长会有多块?
2.1 使用循环的方式
2.2 使用numpy向量计算
numpy的内置数学函数可以天然的运用于向量:
利用 numpy 的数学函数,我们可以重写原先的计算公式 call_option_pricer,使得它接受向量参数。
再观察一下计算耗时,虽然时间仍然是随着规模的增长线性上升,但是增长的速度要慢许多:
让我们把两次计算时间进行比对,更清楚的了解 numpy 计算效率的提升!
3. 使用scipy做仿真计算
期权价格的计算方法中有一类称为 蒙特卡洛 方法。这是利用随机抽样的方法,模拟标的股票价格随机游走,计算期权价格(未来的期望)。假设股票价格满足以下的随机游走:
仿真的方法可以模拟到期日的股票价格
这里的 z 是一个符合标准正态分布的随机数。这样我们可以计算最后的期权价格:
标准正态分布的随机数获取,可以方便的求助于 scipy 库:
因为篇幅有限,更多的请看
本文通过Python实现Black-Scholes模型计算欧式期权价格,并使用numpy和scipy提高计算效率及进行蒙特卡洛仿真。

1万+

被折叠的 条评论
为什么被折叠?



