@Override
 public Set<ValueRequirement> getTimeSeriesRequirements(
     final FRASecurity security, final String[] curveNames) {
   final ExternalId indexId = security.getUnderlyingId();
   final ConventionBundle indexConvention =
       getConventionSource().getConventionBundle(indexId);
   if (indexConvention == null) {
     throw new OpenGammaRuntimeException(
         "No conventions found for floating reference rate " + indexId);
   }
   final ExternalIdBundle indexIdBundle = indexConvention.getIdentifiers();
   final HistoricalTimeSeriesResolutionResult timeSeries =
       getTimeSeriesResolver()
           .resolve(
               indexIdBundle,
               null,
               null,
               null,
               MarketDataRequirementNames.MARKET_VALUE,
               null);
   if (timeSeries == null) {
     return null;
   }
   return Collections.singleton(
       HistoricalTimeSeriesFunctionUtils.createHTSRequirement(
           timeSeries,
           MarketDataRequirementNames.MARKET_VALUE,
           DateConstraint.VALUATION_TIME.minus(Period.ofDays(7)).previousWeekDay(),
           true,
           DateConstraint.VALUATION_TIME,
           false));
 }
 @SuppressWarnings("synthetic-access")
 @Override
 public InstrumentDerivative convert(
     final FRASecurity security,
     final ForwardRateAgreementDefinition definition,
     final ZonedDateTime now,
     final String[] curveNames,
     final HistoricalTimeSeriesBundle timeSeries) {
   final ExternalId indexId = security.getUnderlyingId();
   final ConventionBundle indexConvention = _conventionSource.getConventionBundle(indexId);
   if (indexConvention == null) {
     throw new OpenGammaRuntimeException(
         "No conventions found for floating reference rate " + indexId);
   }
   final ExternalIdBundle indexIdBundle = indexConvention.getIdentifiers();
   final HistoricalTimeSeries ts =
       timeSeries.get(MarketDataRequirementNames.MARKET_VALUE, indexIdBundle);
   if (ts == null) {
     throw new OpenGammaRuntimeException(
         "Could not get price time series for " + indexIdBundle);
   }
   FastBackedDoubleTimeSeries<LocalDate> localDateTS = ts.getTimeSeries();
   // TODO this normalization should not be done here
   localDateTS = localDateTS.divide(100);
   final FastLongDoubleTimeSeries convertedTS =
       localDateTS.toFastLongDoubleTimeSeries(DateTimeNumericEncoding.TIME_EPOCH_MILLIS);
   final LocalTime fixingTime = LocalTime.of(0, 0);
   final DoubleTimeSeries<ZonedDateTime> indexTS =
       new ArrayZonedDateTimeDoubleTimeSeries(
           new ZonedDateTimeEpochMillisConverter(now.getZone(), fixingTime), convertedTS);
   // TODO: remove the zone
   return definition.toDerivative(now, indexTS, curveNames);
 }
 /**
  * Returns the ExternalIDBundle associated to an ExternalId as stored in the convention source.
  *
  * @param indexId The external id.
  * @return The bundle.
  */
 private ExternalIdBundle getIndexIdBundle(final ExternalId indexId) {
   final ConventionBundle indexConvention = getConventionSource().getConventionBundle(indexId);
   if (indexConvention == null) {
     throw new OpenGammaRuntimeException(
         "No conventions found for floating reference rate " + indexId);
   }
   return indexConvention.getIdentifiers();
 }
 public static Set<ValueRequirement> buildRequirements(
     final InterpolatedYieldCurveSpecification specification,
     final FunctionCompilationContext context) {
   final Set<ValueRequirement> result = new HashSet<ValueRequirement>();
   for (final FixedIncomeStripWithIdentifier strip : specification.getStrips()) {
     result.add(
         new ValueRequirement(MarketDataRequirementNames.MARKET_VALUE, strip.getSecurity()));
   }
   final ConventionBundleSource conventionBundleSource =
       OpenGammaCompilationContext.getConventionBundleSource(context);
   final ConventionBundle conventionBundle =
       conventionBundleSource.getConventionBundle(
           Identifier.of(
               InMemoryConventionBundleMaster.SIMPLE_NAME_SCHEME,
               specification.getCurrency().getCode() + "_SWAP"));
   final ConventionBundle referenceRateConvention =
       conventionBundleSource.getConventionBundle(
           IdentifierBundle.of(conventionBundle.getSwapFloatingLegInitialRate()));
   final Identifier initialRefRateId =
       SecurityUtils.bloombergTickerSecurityId(
           referenceRateConvention.getIdentifiers().getIdentifier(SecurityUtils.BLOOMBERG_TICKER));
   result.add(new ValueRequirement(MarketDataRequirementNames.MARKET_VALUE, initialRefRateId));
   return Collections.unmodifiableSet(result);
 }