Skip to content

Commit 078a034

Browse files
committed
QPR-11181 more additional results for touch engine
1 parent 7beb594 commit 078a034

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

ql/pricingengines/vanilla/analyticdigitalamericanengine.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,18 @@ namespace QuantLib {
5757
Rate riskFreeDiscount =
5858
process_->riskFreeRate()->discount(ex->lastDate());
5959

60+
Real t_ex = process_->blackVolatility()->timeFromReference(ex->lastDate());
61+
Real forward = spot / riskFreeDiscount * dividendDiscount;
62+
6063
results_.additionalResults["spot"] = spot;
64+
results_.additionalResults["forward"] = forward;
6165
results_.additionalResults["strike"] = payoff->strike();
6266
results_.additionalResults["variance"] = variance;
67+
results_.additionalResults["volatility"] = std::sqrt(variance / t_ex);
68+
results_.additionalResults["timeToExpiry"] = t_ex;
6369
results_.additionalResults["riskFreeDiscount"] = riskFreeDiscount;
6470
results_.additionalResults["dividendDiscount"] = dividendDiscount;
65-
71+
6672
if(ex->payoffAtExpiry()) {
6773
AmericanPayoffAtExpiry pricer(spot, riskFreeDiscount,
6874
dividendDiscount, variance,
@@ -81,6 +87,14 @@ namespace QuantLib {
8187
arguments_.exercise->lastDate());
8288
results_.rho = pricer.rho(t);
8389
}
90+
91+
auto coo = ext::dynamic_pointer_cast<CashOrNothingPayoff>(payoff);
92+
Real payout = coo != nullptr ? coo->cashPayoff() : forward;
93+
Real valueToPayoutRatio = results_.value / payout;
94+
95+
results_.additionalResults["payout"] = payout;
96+
results_.additionalResults["discountedTouchProbability"] =
97+
knock_in() ? valueToPayoutRatio : 1.0 - valueToPayoutRatio;
8498
}
8599

86100
}

0 commit comments

Comments
 (0)