/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.provider.calculator.singlevalue; import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter; import com.opengamma.analytics.financial.interestrate.future.derivative.BondFuturesOptionMarginTransaction; import com.opengamma.analytics.financial.interestrate.future.derivative.BondFuturesTransaction; import com.opengamma.analytics.financial.interestrate.future.derivative.FederalFundsFutureTransaction; import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureOptionMarginTransaction; import com.opengamma.analytics.financial.interestrate.future.derivative.InterestRateFutureTransaction; import com.opengamma.analytics.financial.interestrate.future.derivative.SwapFuturesPriceDeliverableTransaction; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MulticurveSensitivity; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyMulticurveSensitivity; /** * Computes the par rate for different instrument. The meaning of "par rate" is instrument dependent. */ public final class FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator extends InstrumentDerivativeVisitorAdapter<MulticurveSensitivity, MultipleCurrencyMulticurveSensitivity> { /** * The unique instance of the calculator. */ private static final FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator INSTANCE = new FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator(); /** * Gets the calculator instance. * @return The calculator. */ public static FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator getInstance() { return INSTANCE; } /** * Constructor. */ private FuturesPVCurveSensitivityFromPriceCurveSensitivityCalculator() { } // ----- Futures ----- @Override public MultipleCurrencyMulticurveSensitivity visitFederalFundsFutureTransaction(final FederalFundsFutureTransaction futures, final MulticurveSensitivity priceSensitivity) { return MultipleCurrencyMulticurveSensitivity.of(futures.getCurrency(), priceSensitivity.multipliedBy(futures.getUnderlyingSecurity().getNotional() * futures.getQuantity() * futures.getUnderlyingSecurity().getPaymentAccrualFactor())); } @Override public MultipleCurrencyMulticurveSensitivity visitInterestRateFutureTransaction(final InterestRateFutureTransaction futures, final MulticurveSensitivity priceSensitivity) { return MultipleCurrencyMulticurveSensitivity.of(futures.getCurrency(), priceSensitivity.multipliedBy(futures.getUnderlyingSecurity().getNotional() * futures.getQuantity() * futures.getUnderlyingSecurity().getPaymentAccrualFactor())); } @Override public MultipleCurrencyMulticurveSensitivity visitBondFuturesTransaction(final BondFuturesTransaction futures, final MulticurveSensitivity priceSensitivity) { return MultipleCurrencyMulticurveSensitivity.of(futures.getCurrency(), priceSensitivity.multipliedBy(futures.getUnderlyingSecurity().getNotional() * futures.getQuantity())); } @Override public MultipleCurrencyMulticurveSensitivity visitSwapFuturesPriceDeliverableTransaction(final SwapFuturesPriceDeliverableTransaction futures, final MulticurveSensitivity priceSensitivity) { return MultipleCurrencyMulticurveSensitivity.of(futures.getCurrency(), priceSensitivity.multipliedBy(futures.getUnderlyingSecurity().getNotional() * futures.getQuantity())); } // ----- Futures options ----- @Override public MultipleCurrencyMulticurveSensitivity visitBondFuturesOptionMarginTransaction(final BondFuturesOptionMarginTransaction futures, final MulticurveSensitivity priceSensitivity) { return MultipleCurrencyMulticurveSensitivity.of(futures.getCurrency(), priceSensitivity.multipliedBy(futures.getUnderlyingSecurity().getUnderlyingFuture().getNotional() * futures.getQuantity())); } @Override public MultipleCurrencyMulticurveSensitivity visitInterestRateFutureOptionMarginTransaction(final InterestRateFutureOptionMarginTransaction futures, final MulticurveSensitivity priceSensitivity) { return MultipleCurrencyMulticurveSensitivity.of(futures.getCurrency(), priceSensitivity.multipliedBy(futures.getUnderlyingSecurity().getUnderlyingFuture().getNotional() * futures.getQuantity() * futures.getUnderlyingSecurity().getUnderlyingFuture().getPaymentAccrualFactor())); } }