9

我有使用 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
4

1 回答 1

26

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

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()

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

于 2011-02-04T08:45:33.567 回答