/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.sesame.fedfundsfuture; import org.threeten.bp.ZonedDateTime; import com.opengamma.analytics.financial.instrument.InstrumentDefinition; import com.opengamma.analytics.financial.interestrate.InstrumentDerivative; import com.opengamma.analytics.financial.provider.calculator.discounting.PresentValueDiscountingCalculator; import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderInterface; import com.opengamma.financial.analytics.conversion.FederalFundsFutureTradeConverter; import com.opengamma.financial.analytics.conversion.FixedIncomeConverterDataProvider; import com.opengamma.financial.analytics.timeseries.HistoricalTimeSeriesBundle; import com.opengamma.sesame.trade.FedFundsFutureTrade; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.money.MultipleCurrencyAmount; import com.opengamma.util.result.Result; /** * Federal funds futures discounting calculator. */ public class FedFundsFutureDiscountingCalculator implements FedFundsFutureCalculator { private static final PresentValueDiscountingCalculator PVDC = PresentValueDiscountingCalculator.getInstance(); private final InstrumentDerivative _derivative; private final MulticurveProviderInterface _bundle; public FedFundsFutureDiscountingCalculator(FedFundsFutureTrade trade, MulticurveProviderInterface bundle, FederalFundsFutureTradeConverter converter, ZonedDateTime valuationTime, FixedIncomeConverterDataProvider definitionToDerivativeConverter, HistoricalTimeSeriesBundle fixings) { _derivative = createInstrumentDerivative(trade, converter, valuationTime, definitionToDerivativeConverter, fixings); _bundle = ArgumentChecker.notNull(bundle, "bundle"); } private InstrumentDerivative createInstrumentDerivative(FedFundsFutureTrade tradeWrapper, FederalFundsFutureTradeConverter converter, ZonedDateTime valuationTime, FixedIncomeConverterDataProvider definitionToDerivativeConverter, HistoricalTimeSeriesBundle fixings) { InstrumentDefinition<?> definition = converter.convert(tradeWrapper.getTrade()); return definitionToDerivativeConverter.convert(tradeWrapper.getSecurity(), definition, valuationTime, fixings); } @Override public Result<MultipleCurrencyAmount> calculatePV() { return Result.success(_derivative.accept(PVDC, _bundle)); } }