#beta(volatility of Volatility)
    beta = 1
    #rho
    rho = -0.3
    #Initial stock price
    s0 = 100.0
    #Initial volatility
    v0 = 0.09
    #0.634
    K = np.arange(60, 180, 40)
    for i in range(0, 3):
        print(
            call_price_exact(kappa, theta, beta, rho, v0, r, T, s0,
                             K[i].item()))
        #convert int32 to int

    #Strikes
    K = np.arange(60, 180, 40)
    #simulation
    imp_vol = np.array([])
    for k in K:
        #calc option price
        price = call_price_exact(kappa, theta, beta, rho, v0, r, T, s0,
                                 k.item())
        #calc implied volatility
        imp_vol = np.append(
            imp_vol, black_sholes.implied_volatility(price, s0, k, T, r, 'C'))
        #print (k, price, imp_vol[-1])

    #plot result
Ejemplo n.º 2
0
T = 5.0
#Initial stock price
s0 = 1.0
#Initial volatility
v0 = 0.1
#risk free rate
r = 0.05
#long term volatility(equiribrium level)
theta = 0.1
#Mean reversion speed of volatility
kappa = 1.1
#lambda(volatility of Volatility)
lamda = 0.4
#rho
rho = -0.6

#simulation
imp_vol = np.array([])
for k in K:
    call_option = CallOption(k, T)
    heston = HestonModel(num_steps, num_paths, s0, v0, r, theta, kappa, lamda, rho)
    price = heston.price(call_option)
    #calc implied volatility
    imp_vol = np.append(imp_vol, implied_volatility(price, s0, k, T, r, 'C'))

#plot result
plt.plot(K, imp_vol)
plt.xlabel('Strike (K)')
plt.ylabel('Implied volatility')
plt.title('Volatility skew by Heston model')
plt.show()
Ejemplo n.º 3
0
    sigma = 0.4
    #rho
    rho = -0.6
    #Initial stock price
    s0 = 1.0
    #Initial volatility
    v0 = 0.1
    #0.634
    print call_price(kappa, theta, sigma, rho, v0, r, T, s0, 0.5)
    #0.384
    print call_price(kappa, theta, sigma, rho, v0, r, T, s0, 1.0)
    #0.176
    print call_price(kappa, theta, sigma, rho, v0, r, T, s0, 1.5)    
    #Strikes
    K = np.arange(0.1, 5.0, 0.25)
    #simulation
    imp_vol = np.array([])
    for k in K:
        #calc option price
        price = call_price(kappa, theta, sigma, rho, v0 ,r ,T ,s0 ,k)
        #calc implied volatility
        imp_vol = np.append(imp_vol, black_sholes.implied_volatility(price, s0, k, T, r, 'C'))
        print k, price, imp_vol[-1]

    #plot result
    plt.plot(K, imp_vol)
    plt.xlabel('Strike (K)')
    plt.ylabel('Implied volatility')
    plt.title('Volatility skew by Heston model')
    plt.show()