Estoy tratando de entender el pricer de diferencia finita de Quantlib usando Eclipse con el depurador GDB.
El código que se muestra a continuación cotiza una opción de venta americana utilizando el esquema de diferencias finitas de Crank-Nicholson.
-
He insertado un breakpoint en la línea
americanOption.NPV();
y intenté entrar en la llamada a la función asociada, pero encontré que el depurador simplemente pasa a la siguiente línea. ¿A qué se debe esto? -
Al final pude coger un punto de ruptura en
void TridiagonalOperator::solveFor(const Array& rhs, Array& result) const
situado entridiagonaloperator.cpp
. Sin embargo, cuando investigo la pila de llamadas, sin embargo, obtengo una lista incomprensible de llamadas a funciones llamadas a funciones (captura de pantalla: https://www.dropbox.com/s/bid7gae87zzx7tv/Screenshot%202015-12-05%2017.33.48.png?dl=0 ). ¿Cómo puedo interpretar esto?
¿Puede alguien sugerir alguna estrategia para depurar Quantlib de forma más eficiente?
#include <ql/quantlib.hpp>
using namespace QuantLib;
int main()
{
Calendar calendar = UnitedStates();
DayCounter dayCounter = Business252();
Date t(1, Jan, 2014);
Settings::instance().evaluationDate() = t;
Date T(31, Dec, 2016);
Option::Type type(Option::Put);
Real S0 = 100;
Real K = 100;
Real delta = 0.00;
Real r = 0.01;
Real sigma = 0.2;
Handle<Quote> underlying(
boost::shared_ptr<Quote>(boost::make_shared<SimpleQuote>(S0)));
Handle<YieldTermStructure> TS(
boost::shared_ptr<YieldTermStructure>(boost::make_shared<FlatForward>(t, r, dayCounter)));
Handle<YieldTermStructure> dividendTS(
boost::shared_ptr<YieldTermStructure>(boost::make_shared<FlatForward>(t, delta, dayCounter)));
Handle<BlackVolTermStructure> volTS(
boost::shared_ptr<BlackVolTermStructure>(boost::make_shared<BlackConstantVol>(t, calendar, sigma, dayCounter)));
boost::shared_ptr<BlackScholesMertonProcess> bsmProcess(
boost::make_shared<BlackScholesMertonProcess>(underlying, dividendTS,TS, volTS));
boost::shared_ptr<Exercise> americanExercise(
boost::make_shared<AmericanExercise>(T));
boost::shared_ptr<StrikedTypePayoff> payoff(
boost::make_shared<PlainVanillaPayoff>(type, K));
VanillaOption americanOption(payoff, americanExercise);
int timeSteps = 100;
int gridPoints = 100;
boost::shared_ptr<PricingEngine> engineFD(
boost::make_shared<FDAmericanEngine<CrankNicolson>>(bsmProcess, timeSteps,gridPoints));
americanOption.setPricingEngine(engineFD);
americanOption.NPV();
std::cout << "PV = " << americanOption.NPV() << std::endl;
}