4 votos

Cómo gestionar los cambios de fecha de evaluación en QuantLib cuando se utiliza la clase ImpliedTermStructure

No voy a adjuntar todo el código porque sería un gran desperdicio de espacio y no sería útil para el propósito de esta pregunta.

Lo que voy a adjuntar aquí es un fragmento de código y su salida, que muestra lo que no soy capaz de entender.

La salida

Today is November 29th, 2013
Settlement date is December 4th, 2013
Evaluation date is November 29th, 2013

Actual and implied curve evaluated at November 29th, 2013
The reference date is December 4th, 2013 for the Actual curve
The reference date is June 3rd, 2014 for the Implied curve

---- Actual ----- Implied

1 - 0.995917 --- 0.995485
2 - 0.990663 --- 0.987753
3 - 0.981329 --- 0.975887
4 - 0.966947 --- 0.959062
5 - 0.947756 --- 0.938374
6 - 0.925654 --- 0.914803
7 - 0.900713 --- 0.889055
8 - 0.874264 --- 0.862391
9 - 0.847481 --- 0.835015
10 - 0.819623 --- 0.806789

We've just amended the evaluation date from November 29th, 2013 to May 29th, 2014

Actual and implied curve evaluated at May 29th, 2014
The reference date is June 3rd, 2014 for the Actual curve
The reference date is June 3rd, 2014 for the Implied curve

---- Actual ----- Implied

1 - 0.995917 --- 0.995917
2 - 0.990673 --- 0.990673
3 - 0.981353 --- 0.981353
4 - 0.966986 --- 0.966986
5 - 0.947756 --- 0.947756
6 - 0.925689 --- 0.925689
7 - 0.900707 --- 0.900707
8 - 0.874121 --- 0.874121
9 - 0.847552 --- 0.847552
10 - 0.819667 --- 0.819667

Esta salida muestra que, si su fecha de evaluación es igual al 29 de noviembre de 2013 y pide una estructura de plazos implícita cuya fecha de referencia es el 3 de junio de 2014, obtiene dos curvas que son diferentes, como cabría esperar

Pero, si se modifica la fecha de evaluación fijándola en el 3 de junio de 2014 y se pregunta por la estructura de plazos implícita, ésta cambia de forma.

El fragmento de código

...
            // +---------------------------------
            // | Dates at which to forecast term structures
            // +---------------------------------

            Period forwardPeriod = 6 * Months;

            Date forwardDate = calendar.advance(todaysDate, forwardPeriod);
            Date forwardSettlementDate = calendar.advance(forwardDate, settlementDays, Days);

            // +---------------------------------
            // | Implied term structure
            // +---------------------------------

            RelinkableHandle<YieldTermStructure> actualDiscountCurve;
            actualDiscountCurve.linkTo(depoSwapTermStructure);
            boost::shared_ptr<YieldTermStructure> impliedDiscountCurve(new ImpliedTermStructure(    actualDiscountCurve,        // Handle<YieldTermStructure>
                                                                                                    forwardSettlementDate       // Date referenceDate
                                                                                                ));

            // +---------------------------------
            // | Printing today's discount factors
            // +---------------------------------

            std::cout << std::endl;
            std::cout << "Actual and implied curve evaluated at " << todaysDate << std::endl;
            std::cout << "The reference date is " << actualDiscountCurve->referenceDate() << " for the Actual curve" << std::endl;
            std::cout << "The reference date is " << impliedDiscountCurve->referenceDate() << " for the Implied curve" << std::endl;
            std::cout << std::endl;
            std::cout << "---- Actual ----- Implied" << std::endl;
            std::cout << std::endl;

            for(Time d = 1; d <= 10.0; d+= 1.0)
            {
                std::cout << d << " - " << depoSwapTermStructure->discount(d) << " --- " << impliedDiscountCurve->discount(d) << std::endl;
            }

            // +---------------------------------
            // | Evaluate the bond with the implied curve at forward date
            // +---------------------------------

            discountingTermStructure.linkTo(impliedDiscountCurve);
            Settings::instance().evaluationDate() = forwardDate;
            std::cout << std::endl;
            std::cout << "We've just amended the evaluation date from " << todaysDate << " to " << forwardDate << std::endl;

            // +---------------------------------
            // | Printing discount factors at forward date
            // +---------------------------------

            std::cout << std::endl;
            std::cout << "Actual and implied curve evaluated at " << forwardDate << std::endl;
            std::cout << "The reference date is " << actualDiscountCurve->referenceDate() << " for the Actual curve" << std::endl;
            std::cout << "The reference date is " << impliedDiscountCurve->referenceDate() << " for the Implied curve" << std::endl;
            std::cout << std::endl;
            std::cout << "---- Actual ----- Implied" << std::endl;
            std::cout << std::endl;

            for(Time d = 1; d <= 10.0; d+= 1.0)
            {
                std::cout << d << " - " << depoSwapTermStructure->discount(d) << " --- " << impliedDiscountCurve->discount(d) << std::endl;

...

Mi pregunta está relacionada con mi objetivo, que describo brevemente en los siguientes puntos:

  1. con la fecha de evaluación igual a hoy, quiero obtener la estructura de plazos implícita con fecha de referencia igual a hoy + 6M;
  2. con la fecha de evaluación igual a hoy + 6M, quiero valorar un bono cuyo DiscountingBondEngine() utiliza la estructura de plazos implícita anterior;
  3. esto me permitiría estimar una especie de "Theta" para el bono según una previsión (*) de la curva de descuento y no de una curva constante.

Cualquiera podría aclarar cómo hacer tal cosa sin tener una estructura de plazos implícita completamente cambiada después de la fecha de evaluación que modifica ?

(*) En realidad, la previsión procede de la curva de tipos a plazo.

5voto

Brad Tutterow Puntos 5628

Es difícil estar seguro sin ver las entradas, pero supongo que la curva implícita cambia de forma porque la curva original lo hace (lo que se puede ver en su salida: excepto en los puntos de 1 y 5 años, los descuentos reales son diferentes).

La razón por la que la curva original cambia es probablemente la diferente posición de los fines de semana o los días festivos (de modo que, por ejemplo, el depósito a 1 mes puede abarcar 30, 31 o 32 días naturales); cuando se desplaza la fecha de evaluación, la curva real utiliza los mismos tipos en plazos ligeramente diferentes, lo que hace que los factores de descuento salgan diferentes.

La curva implícita no es tan inteligente como para tener esto en cuenta; como probablemente hayas visto en su implementación, es sólo un reescalado de los factores de descuento para que el factor de descuento en la nueva fecha de referencia sea 1. Por lo tanto, cuando la fecha de evaluación está en el día de hoy, tiene la misma forma que la curva original, y no la forma que tendría la curva original en el día de hoy+6M; cuando la fecha de evaluación se desplaza, la curva implícita toma la nueva forma de la curva real (de hecho es igual a la curva real).

Si quieres que la curva implícita mantenga la misma forma, tienes que forzar a la curva original a hacer lo mismo. La forma de hacerlo depende de la clase específica de estructura de términos que esté utilizando; pero para la mayoría de ellas, una solución viable debería ser evitar que la fecha de referencia de la curva original se mueva cuando usted mueva la fecha de evaluación. En lugar de utilizar el constructor que toma un número de días de liquidación y un calendario (como supongo que está haciendo ahora) intente utilizar el que toma una fecha de referencia explícita. La curva que construyas de esta manera mantendrá esa misma fecha de referencia (y por tanto su forma) cuando la fecha de evaluación cambie, y a su vez esto debería conservar la forma de la curva implícita.

Para más información sobre el modo en que las estructuras de plazos se mueven con la fecha de evaluación, consulte http://implementingquantlib.blogspot.com/2013/09/chapter-3-part-1-of-n-term-structures.html .

Ah, y gracias por la pregunta. Me acabas de dar una de mis próximas entradas en el blog...

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X