/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.annuity.provider;
import com.opengamma.analytics.financial.interestrate.annuity.derivative.AnnuityCouponFixed;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponFixed;
import com.opengamma.analytics.financial.interestrate.payments.provider.CouponFixedDiscountingMethod;
import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderInterface;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.CurrencyAmount;
import com.opengamma.util.money.MultipleCurrencyAmount;
/**
* Class used to compute values related to annuities.
*/
public final class AnnuityDiscountingMethod {
/**
* The method unique instance.
*/
private static final AnnuityDiscountingMethod INSTANCE = new AnnuityDiscountingMethod();
/**
* Return the unique instance of the class.
* @return The instance.
*/
public static AnnuityDiscountingMethod getInstance() {
return INSTANCE;
}
/**
* Private constructor.
*/
private AnnuityDiscountingMethod() {
}
/**
* Methods.
*/
private static final CouponFixedDiscountingMethod METHOD_CPN_FIXED = CouponFixedDiscountingMethod.getInstance();
/**
* Computes the present value of an annuity of fixed coupons.
* @param annuity The annuity.
* @param multicurves The multi-curves provider.
* @return The present value.
*/
public MultipleCurrencyAmount presentValue(final AnnuityCouponFixed annuity, final MulticurveProviderInterface multicurves) {
ArgumentChecker.notNull(annuity, "Annuity");
ArgumentChecker.notNull(multicurves, "Multi-curves provider");
MultipleCurrencyAmount pv = MultipleCurrencyAmount.of(annuity.getCurrency(), 0);
for (final CouponFixed cpn : annuity.getPayments()) {
pv = pv.plus(METHOD_CPN_FIXED.presentValue(cpn, multicurves));
}
return pv;
}
/**
* Computes the present value of an annuity of fixed coupons with positive notional (abs(notional) is used for each coupon).
* @param annuity The annuity.
* @param multicurves The multi-curves provider.
* @return The present value.
*/
public CurrencyAmount presentValuePositiveNotional(final AnnuityCouponFixed annuity, final MulticurveProviderInterface multicurves) {
ArgumentChecker.notNull(annuity, "Annuity");
ArgumentChecker.notNull(multicurves, "Multi-curves provider");
CurrencyAmount pv = CurrencyAmount.of(annuity.getCurrency(), 0);
for (final CouponFixed cpn : annuity.getPayments()) {
pv = pv.plus(METHOD_CPN_FIXED.presentValuePositiveNotional(cpn, multicurves));
}
return pv;
}
}