QuantLib 参数化随机波动率

QuantLib parametrization stochastic volaltility

我正在尝试使用 QuantLib 工具 (python 3.5) 复制 this paper(即将用于 Heston 模型)。

根据 Python Quantlib Cookbook,我能够设置论文第 12 页的参数。 Quantlib 的结果是 0.0497495,与论文的结果 (0.049521147) 略有不同。

那么,我的问题是造成这种差异的原因是什么?难不成那天账号在这里有事?

Cookbook 之后的代码以及论文的参数:

from QuantLib import *
import numpy as np
import math 

#parameters
strike_price = 2
payoff = PlainVanillaPayoff(Option.Call, strike_price)

#option data
maturity_date = Date(16, 4, 2028)
spot_price = 1
strike_price = 2
volatility = 0.16 # the historical vols for a year
dividend_rate = 0.000
option_type = Option.Call

risk_free_rate = 0.000
day_count = Actual365Fixed()
calendar = UnitedStates()
calculation_date = Date(16, 4, 2018)
Settings.instance().evaluationDate = calculation_date

# construct the European Option
payoff = PlainVanillaPayoff(option_type, strike_price)
exercise = EuropeanExercise(maturity_date)
european_option = VanillaOption(payoff, exercise)

# construct the Heston process
v0 = 0.16 #volatility*volatility # spot variance
kappa = 1
theta = 0.16
sigma = 2
rho = -0.8
spot_handle = QuoteHandle(SimpleQuote(spot_price))
flat_ts = YieldTermStructureHandle(FlatForward(calculation_date, 
                                               risk_free_rate, day_count))
dividend_yield = YieldTermStructureHandle(FlatForward(calculation_date, 
                                                      dividend_rate, day_count))
heston_process = HestonProcess(flat_ts, dividend_yield,spot_handle, 
                               v0, kappa,theta, sigma, rho)
engine = AnalyticHestonEngine(HestonModel(heston_process),0.01, 1000)
european_option.setPricingEngine(engine)
h_price = european_option.NPV()
print("The Heston model price is",h_price)

PD:我使用 QuantLib 引擎仔细检查我的代码(我必须说我没有使用 QuantLib 的经验)。我使用我的代码得到论文的结果。

差异部分,但不完全是由于日期计数器。

如果您使用 day_count = SimpleDayCounter(),保持所有其他不变,QuantLib 结果变为 0.04964543。

其余的差异是因为您将AnalyticHestonEngine中的"relative tolerance"设置为0.01。如果您将其设置为较小的值,例如到0.001,得到0.04951948的答案,与0.0495的论文得到的答案一致