/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.interestrate.payments.provider; import com.opengamma.analytics.financial.interestrate.payments.derivative.CapFloorIbor; import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIbor; import com.opengamma.analytics.financial.model.volatility.smile.fitting.interpolation.InterpolatedSmileFunction; import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderInterface; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyMulticurveSensitivity; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.money.MultipleCurrencyAmount; /** * Computes an Ibor coupon in arrears by replication */ public class CouponIborInArrearsSmileModelReplicationMethod { private final CapFloorIborInArrearsSmileModelCapGenericReplicationMethod _method; /** * @param smileFunction Interpolated and extrapolated smile */ public CouponIborInArrearsSmileModelReplicationMethod(final InterpolatedSmileFunction smileFunction) { _method = new CapFloorIborInArrearsSmileModelCapGenericReplicationMethod(smileFunction); } /** * Computes the present value of an Ibor coupon in arrears by replication. * The coupon is price as an cap with strike 0. * @param coupon Ibor coupon in arrears * @param curves The curves * @return The present value */ public MultipleCurrencyAmount presentValue(final CouponIbor coupon, final MulticurveProviderInterface curves) { ArgumentChecker.notNull(coupon, "coupon"); ArgumentChecker.notNull(curves, "curves"); CapFloorIbor cap0 = CapFloorIbor.from(coupon, 0.0, true); return _method.presentValue(cap0, curves); } /** * Computes pv sensitivity * @param coupon Ibor coupon in arrears * @param curves The curves * @return The sensitivity */ public MultipleCurrencyMulticurveSensitivity presentValueCurveSensitivity(final CouponIbor coupon, final MulticurveProviderInterface curves) { ArgumentChecker.notNull(coupon, "coupon"); ArgumentChecker.notNull(curves, "curves"); CapFloorIbor cap0 = CapFloorIbor.from(coupon, 0.0, true); return _method.presentValueCurveSensitivity(cap0, curves); } }