/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIbor;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIborGearing;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIborSpread;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve;
import com.opengamma.util.money.CurrencyAmount;
/**
*
*/
public class CouponProjectedPaymentVisitor extends InstrumentDerivativeVisitorAdapter<YieldCurveBundle, CurrencyAmount> {
@Override
public CurrencyAmount visitCouponIbor(final CouponIbor payment, final YieldCurveBundle curves) {
final YieldAndDiscountCurve forwardCurve = curves.getCurve(payment.getForwardCurveName());
final double forward = (forwardCurve.getDiscountFactor(payment.getFixingPeriodStartTime()) / forwardCurve.getDiscountFactor(payment.getFixingPeriodEndTime()) - 1) /
payment.getFixingAccrualFactor();
return CurrencyAmount.of(payment.getCurrency(), payment.getNotional() * payment.getPaymentYearFraction() * forward);
}
@Override
public CurrencyAmount visitCouponIborSpread(final CouponIborSpread payment, final YieldCurveBundle curves) {
final YieldAndDiscountCurve forwardCurve = curves.getCurve(payment.getForwardCurveName());
final double forward = (forwardCurve.getDiscountFactor(payment.getFixingPeriodStartTime()) / forwardCurve.getDiscountFactor(payment.getFixingPeriodEndTime()) - 1) /
payment.getFixingAccrualFactor();
return CurrencyAmount.of(payment.getCurrency(), payment.getNotional() * payment.getPaymentYearFraction() * forward);
}
@Override
public CurrencyAmount visitCouponIborGearing(final CouponIborGearing payment, final YieldCurveBundle curves) {
final YieldAndDiscountCurve forwardCurve = curves.getCurve(payment.getForwardCurveName());
final double forward = (forwardCurve.getDiscountFactor(payment.getFixingPeriodStartTime()) / forwardCurve.getDiscountFactor(payment.getFixingPeriodEndTime()) - 1) /
payment.getFixingAccrualFactor();
return CurrencyAmount.of(payment.getCurrency(), payment.getNotional() * payment.getPaymentYearFraction() * forward);
}
}