@@ -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