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)

(満期までの時間ではなく、行使日が必要になることに注意してください。)

価格を設定したい場合でも、インプライド ボラティリティを取得したい場合でも、ブラック-ショールズ プロセスを設定する必要があります。たとえば、無リスク金利の値をそのまま渡すことはできないため、多少の機械が必要です。完全な曲線が必要になるため、フラットな曲線を作成してハンドルでラップします。配当利回りとボリュームについても同様です。基になる値は引用符で囲みます。(すべてのオブジェクトが何であるかを説明しているわけではありません。必要な場合はコメントしてください。)

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 に答える