/**
* 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.method;
import org.apache.commons.lang.Validate;
import com.opengamma.analytics.financial.interestrate.YieldCurveBundle;
import com.opengamma.analytics.financial.interestrate.annuity.derivative.Annuity;
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.derivative.CouponFixedAccruedCompounding;
import com.opengamma.analytics.financial.interestrate.payments.derivative.Payment;
import com.opengamma.analytics.financial.interestrate.payments.method.CouponFixedAccruedCompoundingDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.payments.method.CouponFixedDiscountingMethod;
import com.opengamma.util.money.CurrencyAmount;
/**
* Class used to compute values related to annuities.
* @deprecated Use {@link com.opengamma.analytics.financial.interestrate.annuity.provider.AnnuityDiscountingMethod}
*/
@Deprecated
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();
private static final CouponFixedAccruedCompoundingDiscountingMethod METHOD_CPN_ACCRUED = CouponFixedAccruedCompoundingDiscountingMethod.getInstance();
/**
* Computes the present value of an annuity of fixed coupons.
* @param annuity The annuity.
* @param curves The curve bundle.
* @return The present value.
*/
public CurrencyAmount presentValue(final AnnuityCouponFixed annuity, final YieldCurveBundle curves) {
Validate.notNull(curves);
Validate.notNull(annuity);
CurrencyAmount pv = CurrencyAmount.of(annuity.getCurrency(), 0);
for (final CouponFixed cpn : annuity.getPayments()) {
pv = pv.plus(METHOD_CPN_FIXED.presentValue(cpn, curves));
}
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 curves The curve bundle.
* @return The present value.
*/
public CurrencyAmount presentValuePositiveNotional(final AnnuityCouponFixed annuity, final YieldCurveBundle curves) {
Validate.notNull(curves);
Validate.notNull(annuity);
CurrencyAmount pv = CurrencyAmount.of(annuity.getCurrency(), 0);
for (final CouponFixed cpn : annuity.getPayments()) {
pv = pv.plus(METHOD_CPN_FIXED.presentValuePositiveNotional(cpn, curves));
}
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 curves The curve bundle.
* @return The present value.
*/
public CurrencyAmount presentValuePositiveNotional(final Annuity<CouponFixedAccruedCompounding> annuity, final YieldCurveBundle curves) {
Validate.notNull(curves);
Validate.notNull(annuity);
CurrencyAmount pv = CurrencyAmount.of(annuity.getCurrency(), 0);
for (final Payment cpn : annuity.getPayments()) {
pv = pv.plus(METHOD_CPN_ACCRUED.presentValuePositiveNotional((CouponFixedAccruedCompounding) cpn, curves));
}
return pv;
}
}