如何解决使用 Quantlib、Heston 模型定价
我最近开始探索 Python 的 QuantLib 期权定价库,但遇到了一个我似乎不明白的错误。基本上,我正在尝试使用 Heston 模型为期权定价。我编写的代码取自网上找到的示例,并根据我的具体情况进行了调整。本质上,问题是当我运行下面的代码时,我得到一个错误,我认为是在代码的最后一行触发的,即 european_option.NPV() 函数。
有人可以解释一下我做错了什么吗?
def call_heston(asset,strike,r_daily):
initial_date = asset.index[0].strftime("%Y-%m-%d")
final_date = asset.index[-1].strftime("%Y-%m-%d")
initial_price = asset[0]
kappa_h = kappa(asset)
theta_h = asset.std()
lambda_h = lambd(asset)
rho_h = rho(asset,kappa_h,theta_h,lambda_h,r_daily)
maturity_ql = ql.Date(final_date,"%Y-%m-%d")
payoff = ql.PlainVanillaPayoff(ql.Option.Call,strike)
exercise = ql.EuropeanExercise(maturity_ql)
european_option = ql.VanillaOption(payoff,exercise)
initial_date = ql.Date(initial_date,"%Y-%m-%d")
ql.Settings.instance().evaluationDate = initial_date
spot_handle = ql.QuoteHandle(ql.SimpleQuote(initial_price))
flat_ts = ql.YieldTermStructureHandle(ql.FlatForward(initial_date,r_daily,ql.Actual365Fixed()))
dividend_yield = ql.YieldTermStructureHandle(ql.FlatForward(initial_date,ql.Actual365Fixed()))
heston_process = ql.HestonProcess(flat_ts,dividend_yield,spot_handle,rho_h)
engine = ql.AnalyticHestonEngine(ql.HestonModel(heston_process),0.01,1000)
european_option.setPricingEngine(engine)
return european_option.NPV()
call_H_price = call_heston(asset,r_daily)
print("C_0 =",call_H_price)
错误:
RuntimeError Traceback (most recent call last)
<ipython-input-19-b6ab40eefd8f> in <module>
32 return european_option.NPV()
33
---> 34 call_H_price = call_heston(asset,r_daily)
35 print("C_0 =",call_H_price)
<ipython-input-19-b6ab40eefd8f> in call_heston(asset,r_daily)
27 heston_process = ql.HestonProcess(flat_ts,rho_h)
28
---> 29 engine = ql.AnalyticHestonEngine(ql.HestonModel(heston_process),1000)
30 european_option.setPricingEngine(engine)
31
~/opt/anaconda3/lib/python3.8/site-packages/QuantLib/QuantLib.py in __init__(self,process)
11728
11729 def __init__(self,process):
> 11730 _QuantLib.HestonModel_swiginit(self,_QuantLib.new_HestonModel(process))
11731
11732 def theta(self):
RuntimeError: -0.0010463: invalid value
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。