/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.payments.method;
import org.apache.commons.lang.Validate;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivative;
import com.opengamma.analytics.financial.interestrate.YieldCurveBundle;
import com.opengamma.analytics.financial.interestrate.method.PricingMethod;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CapFloorIbor;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIbor;
import com.opengamma.analytics.financial.model.option.definition.SABRInterestRateDataBundle;
import com.opengamma.util.money.CurrencyAmount;
/**
* Class used to compute the price and sensitivity of a Ibor coupon in arrears.
* The coupon are supposed to be exactly in arrears. The payment date is ignored and the start fixing period date is used instead.
* @deprecated Use {@link com.opengamma.analytics.financial.interestrate.payments.provider.CouponIborInArrearsReplicationMethod}
*/
//TODO: Add a reference to Libor-with-delay pricing method when available.
@Deprecated
public class CouponIborInArrearsReplicationMethod implements PricingMethod {
/**
* Base method for the pricing of standard cap/floors.
*/
private final PricingMethod _baseMethod;
/**
* Constructor of the in-arrears pricing method.
* @param baseMethod The base method for the pricing of standard cap/floors.
*/
public CouponIborInArrearsReplicationMethod(final PricingMethod baseMethod) {
this._baseMethod = baseMethod;
}
/**
* Computes the present value of an Ibor coupon in arrears by replication. The coupon is price as an cap with strike 0.
* @param coupon The Ibor coupon.
* @param sabrData The SABR data.
* @return The present value.
*/
public CurrencyAmount presentValue(final CouponIbor coupon, final SABRInterestRateDataBundle sabrData) {
Validate.notNull(coupon);
Validate.notNull(sabrData);
final CapFloorIbor cap0 = CapFloorIbor.from(coupon, 0.0, true);
final CapFloorIborInArrearsGenericReplicationMethod method = new CapFloorIborInArrearsGenericReplicationMethod(_baseMethod);
return method.presentValue(cap0, sabrData);
}
@Override
public CurrencyAmount presentValue(final InstrumentDerivative instrument, final YieldCurveBundle curves) {
Validate.isTrue(instrument instanceof CouponIbor, "Coupon Ibor");
Validate.isTrue(curves instanceof SABRInterestRateDataBundle, "SABR interest rate data bundle required");
return presentValue((CouponIbor) instrument, (SABRInterestRateDataBundle) curves);
}
}