final Clock snapshotClock = executionContext.getValuationClock();
final ZonedDateTime now = ZonedDateTime.now(snapshotClock);
final HistoricalTimeSeriesBundle timeSeries = HistoricalTimeSeriesFunctionUtils.getHistoricalTimeSeriesInputs(executionContext, inputs);
final InstrumentDefinition<?> definition = getDefinitionFromTarget(target);
final Forex forex = getForex(target, now, timeSeries, definition);
final FXMatrix fxMatrix = new FXMatrix();
final CurrencyPairs pairs = (CurrencyPairs) inputs.getValue(CURRENCY_PAIRS);
final Currency currency1 = forex.getCurrency1();
final Currency currency2 = forex.getCurrency2();
if (pairs.getCurrencyPair(currency1, currency2).getBase().equals(currency1)) {
final double spotRate = (Double) inputs.getValue(new ValueRequirement(ValueRequirementNames.SPOT_RATE,
CurrencyPair.TYPE.specification(CurrencyPair.of(currency2, currency1))));
fxMatrix.addCurrency(currency1, currency2, spotRate);
} else {
final double spotRate = (Double) inputs.getValue(new ValueRequirement(ValueRequirementNames.SPOT_RATE,
CurrencyPair.TYPE.specification(CurrencyPair.of(currency2, currency1))));
fxMatrix.addCurrency(currency2, currency1, 1 / spotRate);
}
return getValues(inputs, target, desiredValues, forex, fxMatrix, now);
}