@Override public Set<ValueRequirement> getRequirements( final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue) { final Set<ValueRequirement> requirements = new HashSet<>(); final ValueProperties constraints = desiredValue.getConstraints(); // curve final String curveName = constraints.getStrictValue(ValuePropertyNames.CURVE); if (curveName == null) { return null; } // interpolator final String interpolatorName = constraints.getStrictValue( ForwardCurveValuePropertyNames.PROPERTY_FORWARD_CURVE_INTERPOLATOR); if (interpolatorName == null) { return null; } // interpolator left extrapolator final String leftExtrapolatorName = constraints.getStrictValue( ForwardCurveValuePropertyNames.PROPERTY_FORWARD_CURVE_LEFT_EXTRAPOLATOR); if (leftExtrapolatorName == null) { return null; } // interpolator right extrapolator final String rightExtrapolatorName = constraints.getStrictValue( ForwardCurveValuePropertyNames.PROPERTY_FORWARD_CURVE_RIGHT_EXTRAPOLATOR); if (rightExtrapolatorName == null) { return null; } final ValueProperties futureCurveProperties = ValueProperties.builder() .with( InstrumentTypeProperties.PROPERTY_SURFACE_INSTRUMENT_TYPE, InstrumentTypeProperties.EQUITY_FUTURE_PRICE) .with(ValuePropertyNames.CURVE, curveName) .get(); requirements.add( new ValueRequirement( ValueRequirementNames.FUTURE_PRICE_CURVE_DATA, target.toSpecification(), futureCurveProperties)); return requirements; }