2011-02-03 23 views
6

Tengo código R que utiliza la biblioteca RQuantlib. Para ejecutarlo desde Python, estoy usando RPy2. Sé que Python tiene sus propios enlaces para quantlib (quantlib-python). Me gustaría cambiar completamente de R a Python.Cálculo de EuropeanOptionImpliedVolatility en quantlib-python

Por favor, hágamelo saber cómo puedo ejecutar el siguiente usando QuantLib-pitón

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 

de ejecución de la muestra:

$ python vol.py 
Loading required package: Rcpp 
Implied Volatility for EuropeanOptionImpliedVolatility is 0.381 
+0

Ha intentado algo como 'from quantlib import EuropeanOptionImpliedVolatility', y luego llamarlo con los mismos argumentos. Ver http://quantlib.referata.com/wiki/Python_QuantLib_tutorial (parece ser la suma total de su documentación) –

+0

@Thomas K: Puedo hacer esto: 'desde QuantLib importe EuropeanOption' Esperaba una explicación sobre cómo establecer un motor de fijación de precios para un método dado de cálculo de vol. R toma un enfoque de fachada, Python sigue el camino de poder y complejidad original de cpp Quantlib, por lo tanto, mi pregunta. –

Respuesta

19

que necesitará un poco de configuración. Para mayor comodidad, ya menos que se obtiene conflictos de nombre, importar todo lo mejor:

from QuantLib import * 

a continuación, crear la opción, que necesita un ejercicio y una recompensa:

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

(tenga en cuenta que necesitará una fecha de ejercicio, no un tiempo hasta el vencimiento.)

Ahora, independientemente de si desea ponerle precio o adquirir su volatilidad implícita, tendrá que configurar un proceso de Black-Scholes. Hay un poco de maquinaria involucrada, ya que no se puede simplemente pasar un valor, por ejemplo, de la tasa libre de riesgo: necesitará una curva completa, por lo que creará una plana y la colocará en un asa. Lo mismo ocurre con el rendimiento de dividendos y el volumen; el valor subyacente va en una cotización. (No estoy explicando lo que todos los objetos son;. Comentar si lo necesita)

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 volatilidad en realidad no se utilizan para el cálculo vol-implícita, pero necesito uno de todos modos)

Ahora, por la volatilidad implícita de que vas a llamar:

option.impliedVolatility(11.10, process) 

y para la fijación de precios:

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

migh t use otras funciones (ajuste las tasas en una cotización para que pueda cambiarlas más adelante, etc.), pero esto debería ayudarlo a comenzar.

+0

Gracias Luigi, muy apreciado –

+0

¡Eres el Diosa Luigi Ballabio! Parece que el código anterior es para ahora volatilidad implícita. ¿Es posible hacerlo por algún momento en el futuro/pasado? – user1700890

+1

Puede establecer la fecha de evaluación global en cualquier fecha, si eso es lo que está preguntando. El código anterior calculará el volumen implícito a partir de esa fecha. Use 'Settings.instance(). EvaluationDate = date' para establecerlo. –