No estoy seguro de los argumentos exactos requeridos para la función Schedule para un flotador amortizante - mi código se encuentra a continuación. Específicamente, mi pregunta se refiere a si el cronograma debe comenzar siempre a partir de la fecha de emisión del bono o si debe comenzar a partir de la fecha de liquidación si el bono está maduro. Parece que he visto el uso de ambas maneras en algunos de los ejemplos en la web, así que estoy un poco confundido.
Yo esperaría que las funciones de VAN indexen el flujo de caja correcto en base a la fecha de liquidación proporcionada, pero sólo lo estoy comprobando.
Además, si alguien tiene un ejemplo de trabajo de un AmortizingFloatingRateBond que calcule el DM dado un precio (o viceversa) utilizando un calendario nocional, sería muy apreciado.
Fragmento de código:
QuantLib::JointCalendar calendar = QuantLib::JointCalendar(QuantLib::UnitedStates(),QuantLib::UnitedKingdom(),
JoinBusinessDays);
QuantLib::DayCounter dayCounter = QuantLib::Actual360();
QuantLib::Integer fixingDays = 1;
QuantLib::Natural settlementDays = 3;
QuantLib::Date tradeDate(20, QuantLib::September, 2013);
QuantLib::Date settlementDate = calendar.advance(tradeDate, settlementDays, QuantLib::Days);
settlementDate = calendar.adjust(settlementDate);
QuantLib::Settings::instance().evaluationDate() = tradeDate;
QuantLib::Date issueDate(25,QuantLib::July,2013);
QuantLib::Period p1m = QuantLib::Period(1,QuantLib::Months);
// Number of payments
int num_cashflows = 120;
QuantLib::Date maturityDate = issueDate + num_cashflows * p1m;
QuantLib::Schedule mySchedule(issueDate,
maturityDate,
QuantLib::Period(QuantLib::Monthly),
calendar,
QuantLib::BusinessDayConvention::Unadjusted,
QuantLib::BusinessDayConvention::ModifiedFollowing,
QuantLib::DateGeneration::Forward,
false);
QuantLib::AmortizingFloatingRateBond MyFloater(settlementDays,
Notional,
mySchedule,
libor,
QuantLib::Actual360(),
QuantLib::BusinessDayConvention::ModifiedFollowing,
fixingDays,
std::vector<QuantLib::Real>(1,1.0),
std::vector<QuantLib::Spread>(1,Spread),
std::vector<QuantLib::Rate>(),
std::vector<QuantLib::Rate>(),
true,
issueDate);
MyFloater.setPricingEngine(bondEngine);
std::vector<QuantLib::Date> paySchedule = mySchedule.dates();
std::vector<QuantLib::Date>::iterator pIter;
QuantLib::Date priorDate;
for (pIter = paySchedule.begin(); pIter != paySchedule.end() && *pIter < settlementDate; ++pIter){
priorDate = *pIter;
libor->addFixing(calendar.advance(priorDate, QuantLib::Period(-fixingDays,QuantLib::Days)), 0.1805/100);
}