-1

我试图使用 QuantLib 工具(python 3.5)复制这篇论文(即将发布到 Heston 模型)。

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

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

带有论文参数的食谱后面的代码:

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 的经验)。我使用我的代码得到了论文的结果。

4

1 回答 1

3

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

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

其余的差异是因为您将“相对容差”设置AnalyticHestonEngine为 0.01。如果将其设置为较小的值,例如设置为 0.001,则得到的答案为 0.04951948,这与论文中得到的答案 0.0495 一致。

于 2018-04-16T18:50:37.873 回答