/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.interestrate.swap.provider;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter;
import com.opengamma.analytics.financial.interestrate.fra.derivative.ForwardRateAgreement;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIbor;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIborAverage;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIborGearing;
import com.opengamma.analytics.financial.interestrate.payments.derivative.CouponIborSpread;
import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderInterface;
/**
* Computes the forward rate associated to different types of instruments.
*/
public class CouponForwardRateVisitor extends InstrumentDerivativeVisitorAdapter<MulticurveProviderInterface, Double> {
@Override
public Double visitCouponIbor(final CouponIbor payment, final MulticurveProviderInterface curves) {
return curves.getSimplyCompoundForwardRate(payment.getIndex(), payment.getFixingPeriodStartTime(),
payment.getFixingPeriodEndTime(), payment.getFixingAccrualFactor());
}
@Override
public Double visitCouponIborSpread(final CouponIborSpread payment, final MulticurveProviderInterface curves) {
return curves.getSimplyCompoundForwardRate(payment.getIndex(), payment.getFixingPeriodStartTime(),
payment.getFixingPeriodEndTime(), payment.getFixingAccrualFactor());
}
@Override
public Double visitCouponIborGearing(final CouponIborGearing payment, final MulticurveProviderInterface curves) {
return curves.getSimplyCompoundForwardRate(payment.getIndex(), payment.getFixingPeriodStartTime(),
payment.getFixingPeriodEndTime(), payment.getFixingAccrualFactor());
}
@Override
public Double visitCouponIborAverage(final CouponIborAverage payment, final MulticurveProviderInterface multicurve) {
double forward1 = multicurve.getSimplyCompoundForwardRate(payment.getIndex1(), payment.getFixingPeriodStartTime1(),
payment.getFixingPeriodEndTime1(), payment.getFixingAccrualFactor1());
double forward2 = multicurve.getSimplyCompoundForwardRate(payment.getIndex2(), payment.getFixingPeriodStartTime2(),
payment.getFixingPeriodEndTime2(), payment.getFixingAccrualFactor2());
double forward = payment.getWeight1() * forward1 + payment.getWeight2() * forward2;
return forward;
}
@Override
public Double visitForwardRateAgreement(ForwardRateAgreement payment, MulticurveProviderInterface curves) {
return curves.getSimplyCompoundForwardRate(payment.getIndex(), payment.getFixingPeriodStartTime(),
payment.getFixingPeriodEndTime(), payment.getFixingYearFraction());
}
}