SABR Model Pricing Engine w Python QuantLib

Sep 04 2020

Szukam silnika wyceny modelu SABR w ustawieniu Python QuantLib. Wiem, że istnieje w wersji C ++, ale nie jestem pewien, czy jest dostępny w Pythonie. Wszelkie sugestie / uwagi dotyczące kodu źródłowego Pythona będą bardzo mile widziane! Dzięki!

Odpowiedzi

5 DavidDuarte Sep 04 2020 at 21:47

Oto prosty przykład, który może być przydatny. Zasadniczo znajdowanie parametrów dla danej sekcji. Niektóre parametry można założyć na początku zamiast kalibracji.

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();