Skip to content

Commit 62dbd76

Browse files
committed
QPR-11115 attach engines where necessary, calculate the trade where necessary
1 parent 0d3092b commit 62dbd76

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

ql/instruments/creditdefaultswap.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ namespace QuantLib {
483483
Real accuracy,
484484
PricingModel model) const {
485485

486+
calculate();
486487
ext::shared_ptr<SimpleQuote> flatRate = ext::make_shared<SimpleQuote>(0.0);
487488

488489
Handle<DefaultProbabilityTermStructure> probability =
@@ -510,6 +511,7 @@ namespace QuantLib {
510511
const DayCounter& dayCounter,
511512
PricingModel model) const {
512513

514+
calculate();
513515
ext::shared_ptr<SimpleQuote> flatRate = ext::make_shared<SimpleQuote>(0.0);
514516

515517
Handle<DefaultProbabilityTermStructure> probability =
@@ -569,6 +571,7 @@ namespace QuantLib {
569571
}
570572

571573
const ext::shared_ptr<SimpleCashFlow>& CreditDefaultSwap::accrualRebateCurrent() const {
574+
calculate();
572575
return accrualRebateCurrent_;
573576
}
574577

test-suite/creditdefaultswap.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,12 @@ void CreditDefaultSwapTest::testIsdaEngine() {
688688

689689
ext::shared_ptr<CreditDefaultSwap> quotedTrade =
690690
MakeCreditDefaultSwap(termDate, spread).withNominal(10000000.);
691+
quotedTrade->setPricingEngine(boost::make_shared<MidPointCdsEngine>(
692+
Handle<DefaultProbabilityTermStructure>(boost::make_shared<FlatHazardRate>(
693+
0, NullCalendar(), 0.0, Actual365Fixed())),
694+
0.0,
695+
Handle<YieldTermStructure>(boost::make_shared<FlatForward>(
696+
0, NullCalendar(), 0.0, Actual365Fixed()))));
691697

692698
Rate h = quotedTrade->impliedHazardRate(0., discountCurve, Actual365Fixed(),
693699
recovery, 1e-10, CreditDefaultSwap::ISDA);
@@ -766,6 +772,12 @@ void CreditDefaultSwapTest::testAccrualRebateAmounts() {
766772
Settings::instance().evaluationDate() = input.first;
767773
CreditDefaultSwap cds = MakeCreditDefaultSwap(maturity, spread)
768774
.withNominal(notional);
775+
cds.setPricingEngine(boost::make_shared<MidPointCdsEngine>(
776+
Handle<DefaultProbabilityTermStructure>(
777+
boost::make_shared<FlatHazardRate>(0, NullCalendar(), 0.0, Actual365Fixed())),
778+
0.0,
779+
Handle<YieldTermStructure>(
780+
boost::make_shared<FlatForward>(0, NullCalendar(), 0.0, Actual365Fixed()))));
769781
BOOST_TEST_MESSAGE("asof " << io::iso_date(input.first)
770782
<< " expected " << std::fixed << std::setprecision(4) << input.second
771783
<< " calculated " << cds.accrualRebate()->amount());
@@ -838,6 +850,12 @@ void CreditDefaultSwapTest::testIsdaCalculatorReconcileSingleQuote ()
838850

839851
ext::shared_ptr<CreditDefaultSwap> quotedTrade =
840852
MakeCreditDefaultSwap(instrumentMaturity, conventionalSpread).withNominal(nominal);
853+
quotedTrade->setPricingEngine(boost::make_shared<MidPointCdsEngine>(
854+
Handle<DefaultProbabilityTermStructure>(
855+
boost::make_shared<FlatHazardRate>(0, NullCalendar(), 0.0, Actual365Fixed())),
856+
0.0,
857+
Handle<YieldTermStructure>(
858+
boost::make_shared<FlatForward>(0, NullCalendar(), 0.0, Actual365Fixed()))));
841859

842860
Rate h = quotedTrade->impliedHazardRate(0., discountCurve, Actual365Fixed(),
843861
recovery, 1e-10, CreditDefaultSwap::ISDA);
@@ -952,6 +970,12 @@ void CreditDefaultSwapTest::testIsdaCalculatorReconcileSingleWithIssueDateInTheP
952970
ext::shared_ptr<CreditDefaultSwap> quotedTrade =
953971
MakeCreditDefaultSwap(instrumentMaturity, conventionalSpread)
954972
.withNominal(nominal);
973+
quotedTrade->setPricingEngine(boost::make_shared<MidPointCdsEngine>(
974+
Handle<DefaultProbabilityTermStructure>(
975+
boost::make_shared<FlatHazardRate>(0, NullCalendar(), 0.0, Actual365Fixed())),
976+
0.0,
977+
Handle<YieldTermStructure>(
978+
boost::make_shared<FlatForward>(0, NullCalendar(), 0.0, Actual365Fixed()))));
955979

956980
Rate h = quotedTrade->impliedHazardRate(0., discountCurve, Actual365Fixed(),
957981
recovery, 1e-10, CreditDefaultSwap::ISDA);

0 commit comments

Comments
 (0)