我试图使用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的经验)。我用我的代码得到了论文的结果。
答案 0 :(得分:3)
区别在于部分,但不完全是由于日间计数器。
如果您使用day_count = SimpleDayCounter()
,则保留所有其他相同的QuantLib结果将变为0.04964543。
其余的区别是因为你设定了相对容差"在AnalyticHestonEngine
到0.01。如果将其设置为较小的值,例如到0.001,你得到0.04951948的答案,这与0.0495的论文中得到的答案一致。