如何用python计算隐含波动率
1、# 基于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):
2、另一种写法
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
后面会说到迭代所有的到期日并绘制图形