在quantlib-python中计算EuropeanOptionImpliedVolatility

Dra*_*ric 8 python r rpy2 quantlib

我有使用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
Run Code Online (Sandbox Code Playgroud)

样品运行:

$ python vol.py 
Loading required package: Rcpp
Implied Volatility for EuropeanOptionImpliedVolatility is 0.381
Run Code Online (Sandbox Code Playgroud)

Lui*_*bio 23

你需要一些设置.为方便起见,除非您发生名称冲突,否则最好导入所有内容:

from QuantLib import *
Run Code Online (Sandbox Code Playgroud)

然后,创建选项,这需要练习和支付:

exercise = EuropeanExercise(Date(3,August,2011))
payoff = PlainVanillaPayoff(Option.Call, 100.0)
option = EuropeanOption(payoff,exercise)
Run Code Online (Sandbox Code Playgroud)

(请注意,您需要一个锻炼日期,而不是成熟的时间.)

现在,无论您想要定价还是获得其隐含波动率,您都必须设置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)
Run Code Online (Sandbox Code Playgroud)

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

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

option.impliedVolatility(11.10, process)
Run Code Online (Sandbox Code Playgroud)

和定价:

engine = AnalyticEuropeanEngine(process)
option.setPricingEngine(engine)
option.NPV()
Run Code Online (Sandbox Code Playgroud)

您可以使用其他功能(报价中的汇率以便您可以在以后更改它们等)但这应该可以帮助您入门.