1 votos

QuantLib 1.17 C++ no contiene algunas clases YieldTermStructure mientras que QuantLib-Swig contiene

Quiero portar un código dependiente de QuantLib-Swig escrito en Python a C++ con QuanLib-1.17. Sin embargo, algunas clases YieldTermStructure (PiecewiseLogCubicDiscount, PiecewiseLinearZero y PiecewiseCubicZero) no están presentes en QuantLib-1.17.

Encontré algunos ejemplos de curvas de rendimiento que parece cubrir las funcionalidades de esas clases. Sin embargo, quiero saber si puedo encontrar el equivalente de estas clases en QuantLib-1.17 C++.

1voto

Equidamoid Puntos 133

La razón por la que no hay versiones específicas de esas clases la encontré discutiendo con el desarrollador de QuantLib. Me dijo que

esas clases son instancias de una única clase PiecewiseYieldCurve en C++, pero necesitan ser exportadas como clases separadas a Python donde no hay plantillas.

He implementado una plantilla de función calculateCurve y también implementó una función principal para mostrar las llamadas a calculateCurve :

template<class T, class I, template<class C> class B>
ext::shared_ptr<YieldTermStructure>
calculateCurve(Date &settlementDate,
               std::vector<ext::shared_ptr<RateHelper>> rateHelpers,
               DayCounter dayCounter,
               const I &interpolator = I())
{
    auto termStructure = ext::shared_ptr<YieldTermStructure>(new PiecewiseYieldCurve<T, I, B>(settlementDate,
                                                                                              rateHelpers,
                                                                                              dayCounter,
                                                                                              interpolator));
    return termStructure;
}

int main()
{
    ext::shared_ptr<Quote> rate(new SimpleQuote(0.0019121));
    ext::shared_ptr<RateHelper> rateHelper(new DepositRateHelper(
            Handle<Quote>(rate),
            Period(0, Days),
            2,
            TARGET(),
            Following,
            true,
            ActualActual()
    ));
    std::vector<ext::shared_ptr<RateHelper>> rateHelpers{rateHelper};

    Date settlementDate = Date(01, January, 2017);
    DayCounter dayCounter = Actual360();

    // PiecewiseLogCubicDiscount
    auto result = calculateCurve<Discount, LogCubic, IterativeBootstrap>(
            settlementDate,
            rateHelpers,
            dayCounter,
            LogCubic(CubicInterpolation::Spline));

    // PiecewiseCubicZero
    result = calculateCurve<ZeroYield, Cubic, IterativeBootstrap>(
            settlementDate,
            rateHelpers,
            dayCounter,
            Cubic(CubicInterpolation::Spline));

    // PiecewiseLinearZero
    result = calculateCurve<ZeroYield, Linear, IterativeBootstrap>(
            settlementDate,
            rateHelpers,
            dayCounter);

    return 0;
}

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