@@ -93,6 +93,7 @@ void BlackBondOptionEngine::calculate() const {
9393
9494 // compute price vol from yield vol
9595 Volatility fwdPriceVol;
96+ Real shift = 0.0 ;
9697 if (volatility_->volatilityType () == VolatilityType::Normal)
9798 fwdPriceVol = yieldVol * fwdDur;
9899 else {
@@ -101,7 +102,7 @@ void BlackBondOptionEngine::calculate() const {
101102 << fwdYtm << " )" );
102103 fwdPriceVol = yieldVol * fwdDur * fwdYtm;
103104 } else {
104- Real shift = volatility_->shift (exerciseDate, underlyingLength);
105+ shift = volatility_->shift (exerciseDate, underlyingLength);
105106 QL_REQUIRE (fwdYtm > -shift, " BlackBondOptionEngine: input yield vols are shifted lognormal "
106107 << shift << " , but yield (" << fwdYtm << " ) is not greater than -shift ("
107108 << -shift);
@@ -154,6 +155,13 @@ void BlackBondOptionEngine::calculate() const {
154155 results_.additionalResults [" CashStrike" ] = cashStrike;
155156 results_.additionalResults [" FwdCashPrice" ] = fwdNpv;
156157 results_.additionalResults [" PriceVol" ] = fwdPriceVol;
158+ results_.additionalResults [" timeToExpiry" ] = volatility_->timeFromReference (exerciseDate);
159+ results_.additionalResults [" optionValue" ] = optionValue;
160+ results_.additionalResults [" yieldVol" ] = yieldVol;
161+ results_.additionalResults [" yieldVolShift" ] = shift;
162+ results_.additionalResults [" fwdDuration" ] = fwdDur;
163+ results_.additionalResults [" fwdYieldToMaturity" ] = fwdYtm;
164+
157165 results_.additionalResults [" AccruedAtExercise" ] = arguments_.underlying ->accruedAmount (exerciseDate)/100 ;
158166 // results_.additionalResults["CleanBondPrice"] = arguments_.underlying->cleanPrice();
159167 // results_.additionalResults["DirtyBondPrice"] = arguments_.underlying->dirtyPrice();
0 commit comments