【问题标题】:Calculating EuropeanOptionImpliedVolatility in quantlib-python在 quantlib-python 中计算 EuropeanOptionImpliedVolatility
【发布时间】:2011-06-20 23:03:27
【问题描述】:

我有使用 RQuantlib 库的 R 代码。为了从 python 运行它,我使用的是 RPy2。我知道 python 有自己的 quantlib (quantlib-python) 绑定。我想完全从 R 切换到 python。

请告诉我如何使用 quantlib-python 运行以下命令

import rpy2.robjects as robjects

robjects.r('library(RQuantLib)')
x = robjects.r('x<-EuropeanOptionImpliedVolatility(type="call", value=11.10, underlying=100,strike=100, dividendYield=0.01, riskFreeRate=0.03,maturity=0.5, volatility=0.4)')
print x

示例运行:

$ python vol.py 
Loading required package: Rcpp
Implied Volatility for EuropeanOptionImpliedVolatility is 0.381

【问题讨论】:

  • 您是否尝试过类似from quantlib import EuropeanOptionImpliedVolatility 的方法,然后使用相同的参数调用它。见quantlib.referata.com/wiki/Python_QuantLib_tutorial(似乎是他们文档的总和)
  • @Thomas K:我可以这样做:from QuantLib import EuropeanOption 我希望能够解释如何为给定的计算成交量的方法设置定价引擎。 R 采用门面方法,python 遵循原始 cpp Quantlib 路径的功能和复杂性,因此是我的问题。

标签: python r rpy2 quantlib


【解决方案1】:

您需要进行一些设置。为方便起见,除非您遇到名称冲突,否则最好导入所有内容:

from QuantLib import *

然后,创建需要行使和回报的期权:

exercise = EuropeanExercise(Date(3,August,2011))
payoff = PlainVanillaPayoff(Option.Call, 100.0)
option = EuropeanOption(payoff,exercise)

(请注意,您需要的是行使日期,而不是到期时间。)

现在,无论您想对其定价还是获取其隐含波动率,您都必须设置一个 Black-Scholes 过程。这涉及到一些机器,因为您不能只传递一个值,例如无风险利率:您需要一条完整的曲线,因此您将创建一个平坦的曲线并将其包裹在手柄中。股息收益率和波动率同上;基础价值在报价中。 (我没有解释所有对象是什么;如果需要,请发表评论。)

S = QuoteHandle(SimpleQuote(100.0))
r = YieldTermStructureHandle(FlatForward(0, TARGET(), 0.03, Actual360()))
q = YieldTermStructureHandle(FlatForward(0, TARGET(), 0.01, Actual360()))
sigma = BlackVolTermStructureHandle(BlackConstantVol(0, TARGET(), 0.20, Actual360()))
process = BlackScholesMertonProcess(S,q,r,sigma)

(波动率实际上不会用于隐含波动率计算,但无论如何您都需要一个。)

现在,对于隐含波动率,您可以调用:

option.impliedVolatility(11.10, process)

以及定价:

engine = AnalyticEuropeanEngine(process)
option.setPricingEngine(engine)
option.NPV()

您可能会使用其他功能(在报价中包含价格以便您以后可以更改它们等),但这应该可以帮助您入门。

【讨论】:

  • 谢谢Luigi,非常感谢
  • 你是天赐之物路易吉·巴拉比奥!看起来上面的代码是针对目前隐含波动率的。是否有可能在未来/过去的某个时间点做到这一点?
  • 您可以将全球评估日期设置为任何日期,如果这是您所要求的。上面的代码将计算截至该日期的隐含成交量。使用Settings.instance().evaluationDate = date进行设置。
  • 再次感谢路易吉!我正在阅读我在 QuantLib-SWIG-1.7 中找到的 python 示例,并注意到与您所写内容的细微差别。例如,您有 FlatForward(0, TARGET(), 0.03, Actual360()),而 SWIG 有 FlatForward(settlementDate, 0.05, Actual365Fixed())。你能帮助理解其中的区别吗?我在哪里可以了解更多信息?
  • 我认为这个问题最好在一个新问题中提出,这样其他人也可以更容易地找到信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多