2016-04-28 122 views
0

我使用QuantLib 1.7.1並嘗試運行這些代碼:QuantLib返回付款時間表與日期之外的日期?

Date begin(30, September, 2009), end(15, Jun, 2012); 
Calendar myCal = Japan(); 
BusinessDayConvention bdC = BusinessDayConvention(Following); 
Period myTenor(6, Months); 
DateGeneration::Rule myRule = DateGeneration::Forward; 
Schedule mySched(begin, end, myTenor, myCal, bdC, bdC, myRule, true); 
std::vector <Date > finalSched = mySched.dates(); 
BOOST_FOREACH(Date d, finalSched) std::cout << d << std::endl; 

我希望得到一個進度表,其下限和上限是30/9/2009和15/6/2012分別是這樣的:

September 30th, 2009 
March 31st, 2010 
September 30th, 2010 
March 31st, 2011 
September 30th, 2011 
March 30th, 2012 
June 15th, 2012 

但我得到的結果,其中最後付款日期是29/6/2012,這是後結合我設置:

September 30th, 2009 
March 31st, 2010 
September 30th, 2010 
March 31st, 2011 
September 30th, 2011 
March 30th, 2012 
June 29th, 2012 

如果我設置DateGeneration規則落後,它將如預期(下界時間表30/9/2009):

September 30th, 2009 
December 15th, 2009 
June 15th, 2010 
December 15th, 2010 
June 15th, 2011 
December 15th, 2011 
June 15th, 2012 

難道QuantLib給外面的結果在第一種情況下必然會有意或這是一個錯誤?

+0

Schedule類的文檔在哪裏?我做了一個快速的谷歌搜索,我發現的只是實現代碼。 –

+0

我從quantlib網站[link](http://quantlib.org/slides/dima-ql-intro-1.pdf)的這張幻燈片(第36頁)中看到它。有趣的是,在幻燈片中,它給出了正確的結果 –

+0

如果使用Backward而下限是9月20日而不是9月30日會怎樣? –

回答

1

就我所見,您傳遞的最後一個參數(true)導致所有日期都被調整爲月份的業務結束日期,包括到期日,並且即使遠離該日期。我不確定這是怎麼回事,但我不認爲這是預期的。

截至目前,恐怕沒有解決方案,這種具體情況。傳遞false作爲最後一個參數產生正確的成熟,但在兩者之間不調整日期:

September 30th, 2009 
March 30th, 2010 
September 30th, 2010 
March 30th, 2011 
September 30th, 2011 
March 30th, 2012 
June 15th, 2012 

,所以它不會幫你,如果你碰巧需要這種特殊的債券。

此外,只有當開始日期是該月的最後一個工作日纔會發生這種情況;如果不是,傳遞的endOfMonth參數將被忽略。

所以總之,是的:這可能是一個錯誤。

更新:其實,還有就是我已經忘記了一個解決辦法:你可以告訴Schedule構造明確不調整的成熟,通過傳遞Unadjusted作爲終止-日期約定:

Schedule mySched(begin, end, myTenor, myCal, bdC, Unadjusted, myRule, true); 

這得到你期待日期:

September 30th, 2009 
March 31st, 2010 
September 30th, 2010 
March 31st, 2011 
September 30th, 2011 
March 30th, 2012 
June 15th, 2012 

我還是傾向於認爲對方的行爲作爲某種錯誤的,雖然,因爲它是如此突兀。

+0

感謝您的支持。我正在學習QuantLib,並且只是好奇它爲什麼不像我讀過的例子那樣行事。 P/S:是的。未經調整將是這種情況下的一種解決辦法,但前提是終止日期不是非交易日:) –

+0

這是正確的。在這種情況下,您必須在將其傳遞給'Schedule'構造函數之前手動調整它。 –

相關問題