量化分析师的Python日记【Q Quant 之初出江湖】

本篇中,作为Quant中的Q宗(P Quant 和 Q Quant 到底哪个是未来?),我们将尝试把之前的介绍的工具串联起来,小试牛刀。

您将可以体验到:

  1. 如何使用python内置的数学函数计算期权的价格;
  2. 利用 numpy 加速数值计算;
  3. 利用 scipy 进行仿真模拟;
  4. 使用 scipy 求解器计算隐含波动率;

穿插着,我们也会使用matplotlib绘制精美的图标。

1. 关心的问题

我们想知道下面的一只期权的价格:

  • 当前价 spot : 2.45
  • 行权价 strike : 2.50
  • 到期期限 maturity : 0.25
  • 无风险利率 r : 0.05
  • 波动率 vol : 0.25

关于这样的简单欧式期权的定价,有经典的Black - Scholes [1] 公式:

Call(S,K,r,τ,σ)d1d2= SN(d1)KerτN(d2),=ln(S/K)+(r+12σ2)τστ,=d1στ.

其中 S 为标的价格, K 为执行价格, r 为无风险利率, τ=Tt 为剩余到期时间。  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做仿真计算

期权价格的计算方法中有一类称为 蒙特卡洛 方法。这是利用随机抽样的方法,模拟标的股票价格随机游走,计算期权价格(未来的期望)。假设股票价格满足以下的随机游走:

dS=rSdt+σSdW(t).

仿真的方法可以模拟到期日的股票价格

ST=S0exp((r12σ2)T+zσT)

这里的 z 是一个符合标准正态分布的随机数。这样我们可以计算最后的期权价格:

price=exp(rT)i=1Nmax(ST,iK,0)

标准正态分布的随机数获取,可以方便的求助于 scipy 库:


因为篇幅有限,更多的请看



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值