Công cụ định giá mô hình SABR trong Python QuantLib
Sep 04 2020
Tôi đang tìm kiếm công cụ định giá mô hình SABR trong cài đặt Python QuantLib. Tôi biết rằng nó tồn tại trong phiên bản C ++, nhưng không chắc liệu có sẵn trong Python hay không. Mọi đề xuất / phản hồi liên quan đến mã nguồn Python sẽ được đánh giá cao !. Cảm ơn!
Trả lời
5 DavidDuarte Sep 04 2020 at 21:47
Đây là một ví dụ đơn giản có thể hữu ích. Về cơ bản là tìm các thông số cho một phần đã cho. Một số tham số có thể được giả định khi bắt đầu thay vì được hiệu chỉnh.
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();