2016-11-23 6 views
0

Ich schätze, dass die Klasse Quantlib Schedule einen Datumsvektor als Konstruktor verwenden kann. Ich habe auf diese Weise erfolgreich einen Zeitplan erstellt. Wenn ich diesen Zeitplan jedoch an den Konstruktor von vansawswap übergebe, beginnt der Code in der Funktion bool Schedule::isRegular(Size i) const in der Datei schedule.cpp einen Fehler zu erzeugen. Hier ist ein Teil meines Codes zu diesem Fehler:Quantlib übergibt einen Datumsvektor an Schedule-Klasse

vector<Date> fixedDates; 
vector<Date> floatDates; 

fixedDates.push_back(Date(15, April, 2016)); 
fixedDates.push_back(Date(18, April, 2017)); 
floatDates.push_back(Date(15, April, 2016)); 
floatDates.push_back(Date(15, July, 2016)); 
floatDates.push_back(Date(17, October, 2016)); 
floatDates.push_back(Date(17, January, 2017)); 
floatDates.push_back(Date(18, April, 2017)); 

Schedule fixedSchedule(fixedDates); 
Schedule floatSchedule(floatDates); 

VanillaSwap::Type swapType = VanillaSwap::Payer; 
VanillaSwap swap(swapType, nominal, fixedSchedule, fixedRate, Actual365Fixed(), floatSchedule, libor, spread, Actual365Fixed()); 

Wenn ich meinen Code ausführen, schlägt es auf Grund dieser isRegular_.size() Rückkehr 0.

Ich fand diese Verbindung ist nützlich: http://www.implementingquantlib.com/2014/11/odds-and-ends-date-calculations.html

Ich bin mir jedoch nicht sicher, ob ich den letzten Absatz zur Lösung dieses Problems vollständig verstanden habe. Kann mir hier jemand ein Beispiel geben?

Vielen Dank

Antwort

1

Seit einigen Versionen der Konstruktor, die einen Vektor der Daten dauert wurde erweitert (wie in dem Link vorgeschlagen, dass Sie zitiert) zusätzliche Parameter zu übernehmen. Es wird nun erklärt, wie:

Schedule(const std::vector<Date>&, 
     const Calendar& calendar = NullCalendar(), 
     const BusinessDayConvention 
           convention = Unadjusted, 
     boost::optional<BusinessDayConvention> 
       terminationDateConvention = boost::none, 
     const boost::optional<Period> tenor = boost::none, 
     boost::optional<DateGeneration::Rule> rule = boost::none, 
     boost::optional<bool> endOfMonth = boost::none, 
     const std::vector<bool>& isRegular = std::vector<bool>(0)); 

so können Sie die fehlenden Informationen passieren, dass der Zeitplan nicht in der Lage ist, von den Terminen, um herauszufinden; Zum Beispiel können Sie isRegular als vector<bool>(n, true) übergeben, wobei n die Anzahl der Daten im Zeitplan ist (unter der Annahme, dass die Perioden regelmäßig sind; natürlich, wenn Sie einen kurzen oder langen Coupon haben, sollten Sie einen false in den Vektor bei der entsprechenden setzen Position).

+0

Ja, alle diese Parameter werden funktionieren. – Ben10

Verwandte Themen