求期权隐含波动率的几种方法

最近实习开始算期权隐含波动率。期权隐含波动率的算法写的人不多,分享几种计算方法。

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=0
    while 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')
 

你可能感兴趣的:(python,二分法,隐含波动率,B-S模型)