Asset swap test error

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Asset swap test error

Matt Fair
I noticed this in the tests:
Testing consistency between fair price and fair spread...
assetswap.cpp(181): fatal error in "QuantLib::detail::quantlib_test_case(&AssetSwapTest::testConsistency)": 
par asset swap fair clean price doesn't zero the NPV: 
  clean price:      95.0000
  fair clean price: 107.0805
  NPV:              24.1511
  tolerance:        0.0000
This is the only test that fails.
Matt

------------------------------------------------------------------------------
BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
http://p.sf.net/sfu/rim-devcon-copy2
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Asset swap test error

Matt Fair
It doesn't look like anyone is addressing this failure in the tests.
The test failure was introduced in revision 18001.  It alters the way
the price values are computed and therefore doesn't pass the test that
existed.  If the test is wrong, then fix it so the tests pass,
otherwise the asset swap code needs to be fixed.
I don't know too much about this code, so I don't know what is right
or wrong, just know when the test that existed started to fail.

Index: ql/instruments/assetswap.cpp
===================================================================
--- ql/instruments/assetswap.cpp (revision 18000)
+++ ql/instruments/assetswap.cpp (revision 18001)
@@ -243,12 +243,12 @@
             // backpayment on the floating leg
             // (accounts for non-par redemption, if any)
             Real backPayment = notional;
-            shared_ptr<CashFlow> backPaymentCashFlow (new
+            shared_ptr<CashFlow> backPaymentCashFlow(new
                 SimpleCashFlow(backPayment, finalDate));
             legs_[1].push_back(backPaymentCashFlow);
         } else {
             // final notional exchange
-            shared_ptr<CashFlow> finalCashFlow (new
+            shared_ptr<CashFlow> finalCashFlow(new
                 SimpleCashFlow(notional, finalDate));
             legs_[1].push_back(finalCashFlow);
         }
@@ -349,12 +349,12 @@
                        "fair clean price not available for seasoned deal");
             Real notional = bond_->notional(upfrontDate_);
             if (parSwap_) {
-                fairCleanPrice_ = bondCleanPrice_ -
+                fairCleanPrice_ = bondCleanPrice_ - payer_[0] *
                     NPV_*npvDateDiscount_/startDiscounts_[1]/(notional/100.0);
             } else {
                 Real accruedAmount = bond_->accruedAmount(upfrontDate_);
                 Real dirtyPrice = bondCleanPrice_ + accruedAmount;
-                Real fairDirtyPrice = - legNPV_[0]/legNPV_[1] * dirtyPrice;
+                Real fairDirtyPrice = - payer_[0] *
legNPV_[0]/legNPV_[1] * dirtyPrice;
                 fairCleanPrice_ = fairDirtyPrice - accruedAmount;
             }

@@ -370,7 +370,7 @@
             QL_REQUIRE(endDiscounts_[1]!=Null<DiscountFactor>(),
                        "fair non par repayment not available for expired leg");
             Real notional = bond_->notional(upfrontDate_);
-            fairNonParRepayment_ = nonParRepayment_ -
+            fairNonParRepayment_ = nonParRepayment_ + payer_[0] *
                 NPV_*npvDateDiscount_/endDiscounts_[1]/(notional/100.0);
             return fairNonParRepayment_;
         }


On Sat, Sep 17, 2011 at 3:49 PM, Matt Fair <[hidden email]> wrote:

> I noticed this in the tests:
>
> Testing consistency between fair price and fair spread...
> assetswap.cpp(181): fatal error in
> "QuantLib::detail::quantlib_test_case(&AssetSwapTest::testConsistency)":
> par asset swap fair clean price doesn't zero the NPV:
>   clean price:      95.0000
>   fair clean price: 107.0805
>   NPV:              24.1511
>   tolerance:        0.0000
>
> This is the only test that fails.
>
> Matt

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Asset swap test error

Luigi Ballabio
On Mon, 2011-10-03 at 09:36 -0600, Matt Fair wrote:
> It doesn't look like anyone is addressing this failure in the tests.

True.  Last week I reported it to the author, but he's busy with his
real work at the moment so it will be a few days before the test is
fixed.  I'm afraid it happens in the best families...

Later,
        Luigi


> The test failure was introduced in revision 18001.  It alters the way
> the price values are computed and therefore doesn't pass the test that
> existed.  If the test is wrong, then fix it so the tests pass,
> otherwise the asset swap code needs to be fixed.
> I don't know too much about this code, so I don't know what is right
> or wrong, just know when the test that existed started to fail.
>
> Index: ql/instruments/assetswap.cpp
> ===================================================================
> --- ql/instruments/assetswap.cpp (revision 18000)
> +++ ql/instruments/assetswap.cpp (revision 18001)
> @@ -243,12 +243,12 @@
>              // backpayment on the floating leg
>              // (accounts for non-par redemption, if any)
>              Real backPayment = notional;
> -            shared_ptr<CashFlow> backPaymentCashFlow (new
> +            shared_ptr<CashFlow> backPaymentCashFlow(new
>                  SimpleCashFlow(backPayment, finalDate));
>              legs_[1].push_back(backPaymentCashFlow);
>          } else {
>              // final notional exchange
> -            shared_ptr<CashFlow> finalCashFlow (new
> +            shared_ptr<CashFlow> finalCashFlow(new
>                  SimpleCashFlow(notional, finalDate));
>              legs_[1].push_back(finalCashFlow);
>          }
> @@ -349,12 +349,12 @@
>                         "fair clean price not available for seasoned deal");
>              Real notional = bond_->notional(upfrontDate_);
>              if (parSwap_) {
> -                fairCleanPrice_ = bondCleanPrice_ -
> +                fairCleanPrice_ = bondCleanPrice_ - payer_[0] *
>                      NPV_*npvDateDiscount_/startDiscounts_[1]/(notional/100.0);
>              } else {
>                  Real accruedAmount = bond_->accruedAmount(upfrontDate_);
>                  Real dirtyPrice = bondCleanPrice_ + accruedAmount;
> -                Real fairDirtyPrice = - legNPV_[0]/legNPV_[1] * dirtyPrice;
> +                Real fairDirtyPrice = - payer_[0] *
> legNPV_[0]/legNPV_[1] * dirtyPrice;
>                  fairCleanPrice_ = fairDirtyPrice - accruedAmount;
>              }
>
> @@ -370,7 +370,7 @@
>              QL_REQUIRE(endDiscounts_[1]!=Null<DiscountFactor>(),
>                         "fair non par repayment not available for expired leg");
>              Real notional = bond_->notional(upfrontDate_);
> -            fairNonParRepayment_ = nonParRepayment_ -
> +            fairNonParRepayment_ = nonParRepayment_ + payer_[0] *
>                  NPV_*npvDateDiscount_/endDiscounts_[1]/(notional/100.0);
>              return fairNonParRepayment_;
>          }
>
>
> On Sat, Sep 17, 2011 at 3:49 PM, Matt Fair <[hidden email]> wrote:
> > I noticed this in the tests:
> >
> > Testing consistency between fair price and fair spread...
> > assetswap.cpp(181): fatal error in
> > "QuantLib::detail::quantlib_test_case(&AssetSwapTest::testConsistency)":
> > par asset swap fair clean price doesn't zero the NPV:
> >   clean price:      95.0000
> >   fair clean price: 107.0805
> >   NPV:              24.1511
> >   tolerance:        0.0000
> >
> > This is the only test that fails.
> >
> > Matt
>
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure contains a
> definitive record of customers, application performance, security
> threats, fraudulent activity and more. Splunk takes this data and makes
> sense of it. Business sense. IT sense. Common sense.
> http://p.sf.net/sfu/splunk-d2dcopy1
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev

--

Present to inform, not to impress; if you inform, you will impress.
-- Fred Brooks



------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Asset swap test error

Ferdinando M. Ametrano-3
Hi Matt

glad you cannot live with error in the test-suite. Me too!

I fixed an existing bug and introduced a new one: use the latest
release in the meantime please.
Take it for granted I'll get back to this issue as I'm working on
related subjects... or I might leave the fix as exercise to you ;-)


On Mon, Oct 3, 2011 at 5:45 PM, Luigi Ballabio <[hidden email]> wrote:

> On Mon, 2011-10-03 at 09:36 -0600, Matt Fair wrote:
>> It doesn't look like anyone is addressing this failure in the tests.
>
> True.  Last week I reported it to the author, but he's busy with his
> real work at the moment so it will be a few days before the test is
> fixed.  I'm afraid it happens in the best families...
>
> Later,
>        Luigi
>
>
>> The test failure was introduced in revision 18001.  It alters the way
>> the price values are computed and therefore doesn't pass the test that
>> existed.  If the test is wrong, then fix it so the tests pass,
>> otherwise the asset swap code needs to be fixed.
>> I don't know too much about this code, so I don't know what is right
>> or wrong, just know when the test that existed started to fail.
>>
>> Index: ql/instruments/assetswap.cpp
>> ===================================================================
>> --- ql/instruments/assetswap.cpp      (revision 18000)
>> +++ ql/instruments/assetswap.cpp      (revision 18001)
>> @@ -243,12 +243,12 @@
>>              // backpayment on the floating leg
>>              // (accounts for non-par redemption, if any)
>>              Real backPayment = notional;
>> -            shared_ptr<CashFlow> backPaymentCashFlow (new
>> +            shared_ptr<CashFlow> backPaymentCashFlow(new
>>                  SimpleCashFlow(backPayment, finalDate));
>>              legs_[1].push_back(backPaymentCashFlow);
>>          } else {
>>              // final notional exchange
>> -            shared_ptr<CashFlow> finalCashFlow (new
>> +            shared_ptr<CashFlow> finalCashFlow(new
>>                  SimpleCashFlow(notional, finalDate));
>>              legs_[1].push_back(finalCashFlow);
>>          }
>> @@ -349,12 +349,12 @@
>>                         "fair clean price not available for seasoned deal");
>>              Real notional = bond_->notional(upfrontDate_);
>>              if (parSwap_) {
>> -                fairCleanPrice_ = bondCleanPrice_ -
>> +                fairCleanPrice_ = bondCleanPrice_ - payer_[0] *
>>                      NPV_*npvDateDiscount_/startDiscounts_[1]/(notional/100.0);
>>              } else {
>>                  Real accruedAmount = bond_->accruedAmount(upfrontDate_);
>>                  Real dirtyPrice = bondCleanPrice_ + accruedAmount;
>> -                Real fairDirtyPrice = - legNPV_[0]/legNPV_[1] * dirtyPrice;
>> +                Real fairDirtyPrice = - payer_[0] *
>> legNPV_[0]/legNPV_[1] * dirtyPrice;
>>                  fairCleanPrice_ = fairDirtyPrice - accruedAmount;
>>              }
>>
>> @@ -370,7 +370,7 @@
>>              QL_REQUIRE(endDiscounts_[1]!=Null<DiscountFactor>(),
>>                         "fair non par repayment not available for expired leg");
>>              Real notional = bond_->notional(upfrontDate_);
>> -            fairNonParRepayment_ = nonParRepayment_ -
>> +            fairNonParRepayment_ = nonParRepayment_ + payer_[0] *
>>                  NPV_*npvDateDiscount_/endDiscounts_[1]/(notional/100.0);
>>              return fairNonParRepayment_;
>>          }
>>
>>
>> On Sat, Sep 17, 2011 at 3:49 PM, Matt Fair <[hidden email]> wrote:
>> > I noticed this in the tests:
>> >
>> > Testing consistency between fair price and fair spread...
>> > assetswap.cpp(181): fatal error in
>> > "QuantLib::detail::quantlib_test_case(&AssetSwapTest::testConsistency)":
>> > par asset swap fair clean price doesn't zero the NPV:
>> >   clean price:      95.0000
>> >   fair clean price: 107.0805
>> >   NPV:              24.1511
>> >   tolerance:        0.0000
>> >
>> > This is the only test that fails.
>> >
>> > Matt
>>
>> ------------------------------------------------------------------------------
>> All the data continuously generated in your IT infrastructure contains a
>> definitive record of customers, application performance, security
>> threats, fraudulent activity and more. Splunk takes this data and makes
>> sense of it. Business sense. IT sense. Common sense.
>> http://p.sf.net/sfu/splunk-d2dcopy1
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>
> --
>
> Present to inform, not to impress; if you inform, you will impress.
> -- Fred Brooks
>
>
>
> ------------------------------------------------------------------------------
> All the data continuously generated in your IT infrastructure contains a
> definitive record of customers, application performance, security
> threats, fraudulent activity and more. Splunk takes this data and makes
> sense of it. Business sense. IT sense. Common sense.
> http://p.sf.net/sfu/splunk-d2dcopy1
> _______________________________________________
> QuantLib-dev mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev
Reply | Threaded
Open this post in threaded view
|

Re: Asset swap test error

Ferdinando M. Ametrano-3
> It doesn't look like anyone is addressing this failure in the tests.

fixed now on the trunk


On Mon, Oct 3, 2011 at 9:43 PM, Ferdinando Ametrano <[hidden email]> wrote:

> Hi Matt
>
> glad you cannot live with error in the test-suite. Me too!
>
> I fixed an existing bug and introduced a new one: use the latest
> release in the meantime please.
> Take it for granted I'll get back to this issue as I'm working on
> related subjects... or I might leave the fix as exercise to you ;-)
>
>
> On Mon, Oct 3, 2011 at 5:45 PM, Luigi Ballabio <[hidden email]> wrote:
>> On Mon, 2011-10-03 at 09:36 -0600, Matt Fair wrote:
>>> It doesn't look like anyone is addressing this failure in the tests.
>>
>> True.  Last week I reported it to the author, but he's busy with his
>> real work at the moment so it will be a few days before the test is
>> fixed.  I'm afraid it happens in the best families...
>>
>> Later,
>>        Luigi
>>
>>
>>> The test failure was introduced in revision 18001.  It alters the way
>>> the price values are computed and therefore doesn't pass the test that
>>> existed.  If the test is wrong, then fix it so the tests pass,
>>> otherwise the asset swap code needs to be fixed.
>>> I don't know too much about this code, so I don't know what is right
>>> or wrong, just know when the test that existed started to fail.
>>>
>>> Index: ql/instruments/assetswap.cpp
>>> ===================================================================
>>> --- ql/instruments/assetswap.cpp      (revision 18000)
>>> +++ ql/instruments/assetswap.cpp      (revision 18001)
>>> @@ -243,12 +243,12 @@
>>>              // backpayment on the floating leg
>>>              // (accounts for non-par redemption, if any)
>>>              Real backPayment = notional;
>>> -            shared_ptr<CashFlow> backPaymentCashFlow (new
>>> +            shared_ptr<CashFlow> backPaymentCashFlow(new
>>>                  SimpleCashFlow(backPayment, finalDate));
>>>              legs_[1].push_back(backPaymentCashFlow);
>>>          } else {
>>>              // final notional exchange
>>> -            shared_ptr<CashFlow> finalCashFlow (new
>>> +            shared_ptr<CashFlow> finalCashFlow(new
>>>                  SimpleCashFlow(notional, finalDate));
>>>              legs_[1].push_back(finalCashFlow);
>>>          }
>>> @@ -349,12 +349,12 @@
>>>                         "fair clean price not available for seasoned deal");
>>>              Real notional = bond_->notional(upfrontDate_);
>>>              if (parSwap_) {
>>> -                fairCleanPrice_ = bondCleanPrice_ -
>>> +                fairCleanPrice_ = bondCleanPrice_ - payer_[0] *
>>>                      NPV_*npvDateDiscount_/startDiscounts_[1]/(notional/100.0);
>>>              } else {
>>>                  Real accruedAmount = bond_->accruedAmount(upfrontDate_);
>>>                  Real dirtyPrice = bondCleanPrice_ + accruedAmount;
>>> -                Real fairDirtyPrice = - legNPV_[0]/legNPV_[1] * dirtyPrice;
>>> +                Real fairDirtyPrice = - payer_[0] *
>>> legNPV_[0]/legNPV_[1] * dirtyPrice;
>>>                  fairCleanPrice_ = fairDirtyPrice - accruedAmount;
>>>              }
>>>
>>> @@ -370,7 +370,7 @@
>>>              QL_REQUIRE(endDiscounts_[1]!=Null<DiscountFactor>(),
>>>                         "fair non par repayment not available for expired leg");
>>>              Real notional = bond_->notional(upfrontDate_);
>>> -            fairNonParRepayment_ = nonParRepayment_ -
>>> +            fairNonParRepayment_ = nonParRepayment_ + payer_[0] *
>>>                  NPV_*npvDateDiscount_/endDiscounts_[1]/(notional/100.0);
>>>              return fairNonParRepayment_;
>>>          }
>>>
>>>
>>> On Sat, Sep 17, 2011 at 3:49 PM, Matt Fair <[hidden email]> wrote:
>>> > I noticed this in the tests:
>>> >
>>> > Testing consistency between fair price and fair spread...
>>> > assetswap.cpp(181): fatal error in
>>> > "QuantLib::detail::quantlib_test_case(&AssetSwapTest::testConsistency)":
>>> > par asset swap fair clean price doesn't zero the NPV:
>>> >   clean price:      95.0000
>>> >   fair clean price: 107.0805
>>> >   NPV:              24.1511
>>> >   tolerance:        0.0000
>>> >
>>> > This is the only test that fails.
>>> >
>>> > Matt
>>>
>>> ------------------------------------------------------------------------------
>>> All the data continuously generated in your IT infrastructure contains a
>>> definitive record of customers, application performance, security
>>> threats, fraudulent activity and more. Splunk takes this data and makes
>>> sense of it. Business sense. IT sense. Common sense.
>>> http://p.sf.net/sfu/splunk-d2dcopy1
>>> _______________________________________________
>>> QuantLib-dev mailing list
>>> [hidden email]
>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>> --
>>
>> Present to inform, not to impress; if you inform, you will impress.
>> -- Fred Brooks
>>
>>
>>
>> ------------------------------------------------------------------------------
>> All the data continuously generated in your IT infrastructure contains a
>> definitive record of customers, application performance, security
>> threats, fraudulent activity and more. Splunk takes this data and makes
>> sense of it. Business sense. IT sense. Common sense.
>> http://p.sf.net/sfu/splunk-d2dcopy1
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>
>

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2dcopy1
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev