求期權隱含波動率的幾種方法

2021-10-08 02:39:34 字數 2085 閱讀 7484

最近實習開始算期權隱含波動率。期權隱含波動率的演算法寫的人不多,分享幾種計算方法。

1. 根據bs公式用二分法計算

從wind裡面取數之後算會出現的實際問題是有些**的期權並沒有**(沒人買),所以顯示p=0。

def bsm(f0,k,t,r,sigma):

d1=(np.log(f0/k)+(r+0.5*sigma**2)*t)/sigma/np.sqrt(t)

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

c=f0*norm.cdf(d1)-k*np.exp(-r*t)*norm.cdf(d2)

p=k*np.exp(-r*t)*norm.cdf(-d2)-f0*norm.cdf(-d1)

return c,p

#二分法求隱含波動率

def bisection(p,f0,k,r,t,c): #c=0,call;c=1,put.

value0=0#迭代初始值

top=100

floor=0

sigma=(floor+top)/2

i=0while abs(p-value0)>1e-2:

value0=bsm(f0,k,t,r,sigma)[c]

if (p-value0)>0:

floor=sigma

sigma=(sigma+top)/2

else:

top=sigma

sigma=(sigma+floor)/2

#print(sigma)

i+=1

if i>100:

sigma=''

print('too many iterations')

break

return sigma

def bisection_sigma(p,f0,k,r,t,c):

if p==0:

return 0

else:

return bisection(p,f0,k,r,t,c)

2. 用vega算

在stackflow上看到有人是用vega算,缺點用vega算需要符合一些條件,優點是不需要迭代,可以直接計算。附上一段**。

n = norm.cdf

def bs_call(s, k, t, r, vol):

d1 = (np.log(s/k) + (r + 0.5*vol**2)*t) / (vol*np.sqrt(t))

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

return s * norm.cdf(d1) - np.exp(-r * t) * k * norm.cdf(d2)

def bs_vega(s, k, t, r, sigma):

d1 = (np.log(s / k) + (r + 0.5 * sigma ** 2) * t) / (sigma * np.sqrt(t))

return s * norm.pdf(d1) * np.sqrt(t)

def find_vol(target_value, s, k, t, r, *args):

max_iterations = 200

precision = 1.0e-5

sigma = 0.5

for i in range(0, max_iterations):

price = bs_call(s, k, t, r, sigma)

vega = bs_vega(s, k, t, r, sigma)

diff = target_value - price # our root

if (abs(diff) < precision):

return sigma

sigma = sigma + diff/vega # f(x) / f'(x)

return sigma # value wasn't found, return best guess so far

3. 很多金融界人士其實是用excel(vba)算的,這裡推薦用hull大神的derivagem,人大經濟論壇上有各種版本的這個軟體。優點是簡單容易用,缺點的話,主要就是不適合需要算很多資料,拿來練練教材的課後習題還是好的。

求期權的隱含波動率

1 coding utf 8 2 3created on wed nov 24 20 12 47 2021 4求隱波 5 author administrator 6 78 from scipy import stats 9import numpy as np 10from scipy.optimi...

求素數的幾種方法

素數,也稱為質數,其只能被1或者自身整除的自然數 不包括1 換而言之,只有兩個正因數的自然數稱為素數。與之相對的比1大但不是素數的自然數稱為合數。1和0既不是素數也不是合數,合數由若干個質數相乘得到。顯然根據定義就能判斷乙個數n是否為素數,具體的,對其從2到sqrt n 進行除法,判斷是否存在餘數為...

求逆序數的幾種方法

求乙個數列的逆序數 逆序對 數列a 1 a 2 a 3 中的任意兩個數a i a j i,如果a i a j 那麼我們就說這兩個數構成了乙個逆序對 逆序數 乙個數列中逆序對的總數 如數列3 5 4 8 2 6 9 5,4 是乙個逆序對,同樣還有 3,2 5,2 4,2 等等 那麼如何求得乙個數列的逆...