Question

J'ai du code R qui utilise la bibliothèque RQuantlib. Afin de l'exécuter à partir de Python, j'utilise RPY2. Je sais que Python a ses propres liaisons pour Quantlib (quantlib-python). Je voudrais passer de R à Python complètement.

S'il vous plaît laissez-moi savoir comment je peux exécuter ce qui suit en utilisant 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

Exemple de course:

$ python vol.py 
Loading required package: Rcpp
Implied Volatility for EuropeanOptionImpliedVolatility is 0.381
Était-ce utile?

La solution

Vous aurez besoin d'un peu de configuration. Pour plus de commodité, et à moins que vous n'obteniez des affrontements de noms, vous feriez mieux d'importer tout:

from QuantLib import *

Ensuite, créez l'option, qui a besoin d'un exercice et d'un gain:

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

(Notez que vous aurez besoin d'une date d'exercice, pas d'un moment d'échéance.)

Maintenant, que vous souhaitiez le prix ou obtenir sa volatilité implicite, vous devrez configurer un processus Black-Scholes. Il y a un peu de machines impliquées, car vous ne pouvez pas simplement passer une valeur, par exemple, du taux sans risque: vous aurez besoin d'une courbe complète, donc vous en créez un plat et envelopperez-le dans une poignée. Idem pour le rendement du dividende et le vol; La valeur sous-jacente va dans un devis. (Je n'explique pas quels sont tous les objets; commentez si vous en avez besoin.)

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)

(La volatilité ne sera pas réellement utilisée pour le calcul implicite-VOL, mais vous en avez besoin de toute façon.)

Maintenant, pour une volatilité implicite, vous appellerez:

option.impliedVolatility(11.10, process)

Et pour les prix:

engine = AnalyticEuropeanEngine(process)
option.setPricingEngine(engine)
option.NPV()

Vous pouvez utiliser d'autres fonctionnalités (tarifs enveloppés dans un devis afin que vous puissiez les modifier plus tard, etc.), mais cela devrait vous aider à démarrer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top