/*! Simple yield calculation based on underlying spot and
* forward values, taking into account underlying income.
* When \f$ t>0 \f$, call with:
* underlyingSpotValue=spotValue(t),
* forwardValue=strikePrice, to get current yield. For a
* repo, if \f$ t=0 \f$, impliedYield should reproduce the
* spot repo rate. For FRA's, this should reproduce the
* relevant zero rate at the FRA's maturityDate_;
*/
public InterestRate impliedYield(double underlyingSpotValue, double forwardValue, Date settlementDate,
Compounding compoundingConvention, DayCounter dayCounter)
{
double tenor = dayCounter.yearFraction(settlementDate, maturityDate_);
double compoundingFactor = forwardValue / (underlyingSpotValue - spotIncome(incomeDiscountCurve_));
return(InterestRate.impliedRate(compoundingFactor, dayCounter, compoundingConvention, Frequency.Annual, tenor));
}