1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python计算隐含波动率_用Python快速计算隐含波动率

python计算隐含波动率_用Python快速计算隐含波动率

时间:2024-08-18 08:13:03

相关推荐

python计算隐含波动率_用Python快速计算隐含波动率

你必须意识到隐含波动率计算的计算成本很高,如果你想要实时数据,也许python不是最好的解决方案。

这里是一个你需要的函数的例子。

import numpy as np

from scipy.stats import norm

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

计算一个单一的值是足够快的

S = 100

K = 100

T = 11

r = 0.01

vol = 0.25

V_market = bs_call(S, K, T, r, vol)

implied_vol = find_vol(V_market, S, K, T, r)

print ('Implied vol: %.2f%%' % (implied_vol * 100))

print ('Market price = %.2f' % V_market)

print ('Model price = %.2f' % bs_call(S, K, T, r, implied_vol))

隐含波动率:25.00%

市场价格=35.94

模型价格=35.94

但如果你试着计算很多,你会发现需要一些时间......

%%time

size = 10000

S = np.random.randint(100, 200, size)

K = S * 1.25

T = np.ones(size)

R = np.random.randint(0, 3, size) / 100

vols = np.random.randint(15, 50, size) / 100

prices = bs_call(S, K, T, R, vols)

params = np.vstack((prices, S, K, T, R, vols))

vols = list(map(find_vol, *params))

墙时间:10.5秒

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。