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