您的位置首页百科知识

如何用python计算隐含波动率

如何用python计算隐含波动率

的有关信息介绍如下:

如何用python计算隐含波动率

隐含波动率是 期权价格已知后反推出来的,现实中的期权价格(F)和理论是有偏差的,所以交易中,期权价格F是竞价的结果,而F对应的波动率则是隐含的,可求出对应的波动率(比如迭代法),即隐含波动率。B-S公式由,S,Sigma,T,K,R可算出的是理论的期权价格,其反推波动率当然还是Sigma。

经典的Black - Scholes 公式:

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

其中S为标的价格,K为执行价格,r为无风险利率,τ=T−t为剩余到期时间。N(x)为标准正态分布的累积概率密度函数。Call(S,K,r,τ,σ)为看涨期权的价格。

# 基于Black - Scholes 公式的期权定价公式

def bsm_call_value(s,,k,T,r,sigma):

from math import log,sqrt,exp

from scipy import stats

s=float(s)

d1=(log(s/k)+(r+0.5*sigma**2)*T)/(sqrt(T))

d2=(log(s/k)+(r-0.5*sigma**2)*T)/(sqrt(T))

value=(s*stats/norm.cdf(d1,0.0,1.0))-K*exp(-r*T)*stats.norm.cdf(d2,0.0,1.0)

return value

当前价s

行权价k

上面的函数只是计算隐含波动率所需的基本函数。当然,还需要单独的期权报价,也就是基于VSTOXX指数的欧式看涨期权,以及生成隐含波动率的代码,下面就用IPython来完成。

比如把参考日期t=0,

指数的收盘价为v=7,6639

对于无风险短期利率,假定年率r=0,01

这样就可以利用

print '期权价格 : %.4f' % bsm_call_value(s,,k,T,r,sigma):

另一种写法

def bsm_call_value(spot, strike, maturity, r, vol):

from math import log,sqrt,exp

from scipy import stats

d1 = (log(spot/strike) + (r + 0.5 * vol *vol) * maturity) / vol / sqrt(maturity)

d2 = d1 - vol * sqrt(maturity)

price = spot * norm.cdf(d1) - strike * exp(-r*maturity) * norm.cdf(d2)

return price

当前价spot

行权价strike

到期期限maturity

无风险利率r

波动率vol

后面会说到迭代所有的到期日并绘制图形