SABR Model Pricing Engine em Python QuantLib

Sep 04 2020

Estou procurando um mecanismo de precificação de modelo SABR na configuração Python QuantLib. Eu sei que existe na versão C ++, mas não tenho certeza se disponível em Python. Qualquer sugestão / feedback com relação ao código-fonte Python será muito apreciada !. Obrigado!

Respostas

5 DavidDuarte Sep 04 2020 at 21:47

Aqui está um exemplo simples que pode ser útil. Basicamente, encontrar parâmetros para uma determinada seção. Alguns dos parâmetros podem ser assumidos no início em vez de calibrados.

import QuantLib as ql
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import minimize

strikes = [105, 106, 107, 108, 109, 110, 111, 112]
fwd = 120.44
expiryTime = 17/365
marketVols = [0.4164, 0.408, 0.3996, 0.3913, 0.3832, 0.3754, 0.3678, 0.3604]

params = [0.1] * 4
def f(params):
    vols = np.array([
        ql.sabrVolatility(strike, fwd, expiryTime, *params)
        for strike in strikes
    ])
    return ((vols - np.array(marketVols))**2 ).mean() **.5

cons=(
    {'type': 'ineq', 'fun': lambda x:  0.99 - x[1]},
    {'type': 'ineq', 'fun': lambda x: x[1]},    
    {'type': 'ineq', 'fun': lambda x: x[3]}
)

result = minimize(f, params, constraints=cons)
new_params = result['x']

newVols = [ql.sabrVolatility(strike, fwd, expiryTime, *new_params) for strike in strikes]
plt.plot(strikes, marketVols, marker='o', label="market")
plt.plot(strikes, newVols, marker='o', label="SABR")
plt.legend();