如何用python计算隐含波动率

Python023

如何用python计算隐含波动率,第1张

设定参数

r=0.032 # risk-free interest rate

t=float(30)/365 # time to expire (30 days)

q=0 # dividend yield

S0=2.3 # underlying price

X=2.2 # strike price

mktprice=0.18 # market price

# 用二分法求implied volatility,暂只针对call option

sigma=0.3 # initial volatility

C=P=0

upper=1

lower=0

while abs(C-mktprice)>1e-6:

d1=(np.log(S0/X)+(r-q+sigma**2/2)*t)/(sigma*np.sqrt(t))

d2=d1-sigma*np.sqrt(t)

C=S0*np.exp(-q*t)*norm.cdf(d1)-X*np.exp(-r*t)*norm.cdf(d2)

P=X*np.exp(-r*t)*norm.cdf(-d2)-S0*np.exp(-q*t)*norm.cdf(-d1)

if C-mktprice>0:

upper=sigma

sigma=(sigma+lower)/2

else:

lower=sigma

sigma=(sigma+upper)/2

print sigma # implied volatility

有一天我在看证券基金从业资格证考试的时候,我就发现如果想很快地考过这门课,所有关于数学的部分都可以略过。

但是还是有一个东西吸引了我,它叫期权定价模型(B-S)。

作为一个生活在现实世界的人,我们都知道,生活当中的东西,想要被量化,难度要往往高于数字化的东西,因为首先不同维度上的东西进行转换的转换矩阵并不是确定的,风险这种东西往往也是更难被量化的,不然人人靠着凯利法则就能一招吃遍天下了。

受到过教训基金破产的诺贝尔奖获得者说到:“数学是美丽的,但它计算不了人心。”

我觉得,那你计算不了人心你计算一下数字总是可以的吧。

我们先来看看这个B-S模型到底计算了什么数字:

C——看涨 期权的当前价值;

X——期权的执行价格

S——标的物的当前价格;

t——期权到期日前的时间(年);

r——连续复利的年度无风险利率;

N(d)——标准正态分布中离差小于d的概率;

e——自然对数的底数,约等于2.7183

这个公式的目的是想计算一下某一个期权现在的价格应该是多少,但是往往来说,价格是由市场决定的,所以这个公式的用法有可能是先有价格,然后通过价格反过来计算隐含波动率,隐含波动率在这里是Nd1和Nd2。

隐含波动率越高,则代表这个权证标的未来的振幅越大。

虽然这个概念应该比较普及,以防万一我来提一下 正态分布 ,正态分布在这里指的是以现在价格作为对称中心,两侧对称的一个 数学期望 为μ、 方差 为σ^2的分布模型,在工程、物理、统计领域有非常广泛的应用。

在期权的收益率计算当中,我认为使用的应该是对数的正态分布(这点我没有求证过,但是我大概初步计算了一下)。往往使用当前价格作为0%的点,x轴是上升和下跌的幅度。假设当前价格为100,则两侧概率数值相等的会是(0.9lg)-(1/0.9)lg。就是下跌到90块和上涨到111.1块的概率是相等的。

下面的这个是欧式期权,也是是到期行权交割的期权的定价计算方法。

C-当前价格,这个就不用说了,虽然在等式的左边,但是其实它是一个已知量。

X-期权执行价格,到期交割的价格,期权执行价格越高,看涨期权价格越低。

S-标定物的当前价格,每个月份交割的期货价格是不一样的,期权对应的标的是对应月份的期货的价格,06期权就对应06月,当前价格越高,则对应期权价格越高。

t——期权到期日前的时间(年),这个可以通过到期时间跟现在的时间计算。

r——连续复利的年度无风险利率,无风险利率一般参考银行间拆借利率,可以从上海shibor利率界面查询 http://www.shibor.org/shibor/web/AllShibor.jsp

真是不查不知道,一查吓一跳,中国的降息降得也挺快的。

N(d1)\N(d2)——标准正态分布中离差小于d的概率,标准正态分布是指 期望值 μ=0, 标准差 σ=1的正态分布,跟我上面说的那个不太一样。

在通过上面这个公式算出d之后再带入计算函数,有一个标准误差函数可以用来计算正态分布的累计值。

put跟call的方向性不同,所以计算的方式也不太一样,主要考虑的就是随着隐含波动率增加导致可能产生实值的正股份额变大,从而影响价格。

计算这些公式,其实都可以用一些很简单的方式来实现,不管是python还是excel,输入公式的时候注意一下别输错了就行,除了无风险利率r可能跟模型当中不太一样,其他都可以在行情里查到,可以通过价格验证来判断自己的式子写没写对。

这是我用excel写的一个2006黄金期权价格的计算表,可以对着行情看一看。

参考资料: https://wenku.baidu.com/view/0d895a50ad02de80d4d840c6.html