Tomo prestado un ejemplo de la sección 7 del "Quantlib Python Cookbook" para plantear mi pregunta. Para que el punto sea lo más claro posible simplifico un poco el código. El objetivo es quitar la curva EONIA de las comillas OIS.
La inicialización no es para cuestionar:
%%capture
%pylab inline --no-import-all
import math
import numpy
import utils
import matplotlib.pyplot as plt
from QuantLib import *
today = Date(11, December, 2012)
Settings.instance().evaluationDate = today
Una lista de OISRateHelper
s de la que se desprenderá la estructura de plazos. El "2" indica al objeto ayudante que las comillas corresponden a contratos que comienzan dentro de +2 días.
helpers = [ OISRateHelper(2, Period(*tenor),
QuoteHandle(SimpleQuote(rate/100)), eonia)
for rate, tenor in [(0.002, (15,Months)), (0.008, (18,Months)),
(0.021, (21,Months)), (0.036, (2,Years)),
(0.127, (3,Years)), (0.274, (4,Years)),
(0.456, (5,Years)), (0.647, (6,Years)),
(0.827, (7,Years)), (0.996, (8,Years)),
(1.147, (9,Years)), (1.280, (10,Years)),
(1.404, (11,Years)), (1.516, (12,Years)),
(1.764, (15,Years)), (1.939, (20,Years)),
(2.003, (25,Years)), (2.038, (30,Years))] ]
A continuación, el bootstrapping se realiza mediante
eonia_curve = PiecewiseLogCubicDiscount(0, TARGET(), helpers, Actual365Fixed() )
El "0" inicial indica al algoritmo de bootstrapping que la fecha de referencia de la estructura temporal debe estar en la fecha previamente definida evaluationDate
.
No quiero que mi objeto de estructura temporal cambie su fecha de referencia más adelante cuando cambie la fecha de evaluación. Así que he intentado llamar a
eonia_curve = PiecewiseLogCubicDiscount(today, TARGET(), helpers, Actual365Fixed() )
lo que me pareció muy natural. Pero resultó: NotImplementedError: Número o tipo de argumentos incorrectos para la función sobrecargada 'new_PiecewiseLogCubicDiscount'.
Pregunta: ¿Cómo podría corregir la línea de código anterior para arrancar con una fecha de referencia fija?
Nota al margen: En la sección 5 del libro mencionado, el autor discutió la diferencia de las fechas de referencia fijas y no fijas. Sin embargo, el código que utilizó no me ayudó realmente, porque la fecha no se especificó explícitamente, sino que se tomó de una estructura de plazo anterior despojada.
# curve1 is an allready stripped term structure object
dates, rates = zip(*curve1.nodes())
# first date is taken as reference date
curve2 = ForwardCurve(dates, rates, Actual360())
Sin embargo, no quiero llamar al algoritmo de arranque dos veces: una con la fecha de evaluación como fecha de referencia y una segunda vez con today
como fecha de referencia.
Muchas gracias, Bernd