Ahora mismo estoy trabajando en el "libro de cocina" de Goutham Balaraman y Luigi Ballabio. Por cierto una muy buena introducción en QuantLib-Python y un buen punto de partida :-)
En la sección cuatro se encuentra el siguiente ejemplo que valora una opción simple con Black&Scholes:
from QuantLib import *
today = Date(7, March, 2014)
Settings.instance().evaluationDate = today
# The Instrument
option = EuropeanOption( PlainVanillaPayoff(Option.Call, 100.0),
EuropeanExercise(Date(7, June, 2014)))
# The Market
u = SimpleQuote(100.0) # set todays value of the underlying
r = SimpleQuote(0.01) # set risk-free rate
sigma = SimpleQuote(0.20) # set volatility
riskFreeCurve = FlatForward(0, TARGET(), QuoteHandle(r), Actual360())
volatility = BlackConstantVol(0, TARGET(), QuoteHandle(sigma), Actual360())
# The Model
process = BlackScholesProcess( QuoteHandle(u),
YieldTermStructureHandle(riskFreeCurve),
BlackVolTermStructureHandle(volatility))
# The Pricing Engine
engine = AnalyticEuropeanEngine(process)
# The Result
option.setPricingEngine(engine)
print( "NPV: ", option.NPV() )
El código escupe el VAN de la opción.
En la universidad aprendí una vez que el valor de una opción podía dividirse en una parte "intrínseca" y otra "temporal". ¿Es posible lograr esto con QouantLib-Python?
NPV_intrinsic = max([ 0 , u.value() - option.getStrike() ])
Lo anterior no funciona porque 'option.getStrike()' no existe :-(
¡Muchas gracias!
1 votos
No creo que necesites QuantLib para calcular el valor intrínseco de tu opción. Es sencillo obtener
max(S - K, 0)
Una vez que se tiene esto, el valor temporal es sólo el precio menos el valor intrínseco.0 votos
Si insiste en utilizar QuantLib para el valor intrínseco, puede obtenerlo utilizando un duplicado de la opción que está valorando pero con vencimiento = hoy.
0 votos
Tienes razón. La ecuación es simple. Así que no necesito que QuntLib la calcule por mí. Pero necesito reextraer el strike del objeto-opción y no tengo idea de cómo lograrlo
0 votos
En otras palabras: ¿qué tengo que sustituir la opción.getStrike() en el siguiente comando? NPV_intrinsic = max([ 0 , u.value() - option.getStrike() ])
0 votos
¿No debería ser posible obtener la información sobre los métodos del objeto de opción en alguna parte? quantlib.org/reference/class_quant_lib_1_1_european_option.html
0 votos
O bien
option.payoff(u.value())
como explicó Luigi en su respuesta, pero como no está disponible en Python, puedes hacermax(0 , u.value() - K)
ya que conoces tu K de huelga ya que eres el que construye la opción después de todo.