2011-02-03 88 views
6

计算EuropeanOptionImpliedVolatility我有一个使用RQuantlib库R代码里面。为了从python运行它,我使用RPy2。我知道python有自己的quantlib(quantlib-python)绑定。我想完全从R切换到Python。在quantlib的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 
+0

你试过像`从quantlib进口EuropeanOptionImpliedVolatility`,然后用相同的参数调用它。见http://quantlib.referata.com/wiki/Python_QuantLib_tutorial(似乎总和的文档) – 2011-02-03 22:54:22

+0

@Thomas K:我可以这样做:`从QuantLib进口EuropeanOption`我希望一个解释如何为给定的计算方法建立定价引擎。 R采取正面方法,python遵循原来的cpp Quantlib权力和复杂性的路径,因此我的问题。 – 2011-02-04 04:28:54

回答

19

你需要一些设置的。为方便起见,除非你的名字冲突,你最好导入的一切:

from QuantLib import * 

然后,创建选项,这需要一个锻炼和回报:

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

(请注意,您需要一个行权日,而不是一个时间期限。)

现在,你是否要降价,或得到它的隐含波动率,你就必须建立一个布莱克 - 斯科尔斯过程。有参与其中,因为你不能只传递一个值,也就是说,无风险利率的位的机器:你需要一个完整的曲线,让你将创建一个平坦的一个,并在手柄包裹。股息收益率和卷同上基础价值在一个报价中。 (我不会解释什么所有对象都是;如果你需要它的评论)

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

你migh不要使用其他功能(在报价中包装费率,以便以后可以更改它们等),但这应该让你开始。