@Override protected LocalDateDoubleTimeSeries getReturnSeries( LocalDateDoubleTimeSeries ts, ValueRequirement desiredValue) { LocalDateDoubleTimeSeries differenceSeries = super.getReturnSeries(ts, desiredValue); double lambda = Double.parseDouble( desiredValue.getConstraint( VolatilityWeightingFunctionUtils.VOLATILITY_WEIGHTING_LAMBDA_PROPERTY)); TimeSeriesWeightedVolatilityOperator weightedVol = new TimeSeriesWeightedVolatilityOperator(lambda); LocalDateDoubleTimeSeries weightedVolSeries = (LocalDateDoubleTimeSeries) weightedVol.evaluate(ts); int n = weightedVolSeries.size(); double endDateWeightedVol = weightedVolSeries.getLatestValueFast(); double[] volWeightedDifferences = new double[n]; for (int i = 0; i < n; i++) { System.out.println( differenceSeries.getTimeAtIndex(i) + "," + differenceSeries.getValueAtIndexFast(i) + "," + weightedVolSeries.getValueAtIndexFast(i)); volWeightedDifferences[i] = differenceSeries.getValueAtIndexFast(i) * endDateWeightedVol / weightedVolSeries.getValueAtIndexFast(i); } LocalDateDoubleTimeSeries volWeightedDifferenceSeries = ImmutableLocalDateDoubleTimeSeries.of( weightedVolSeries.timesArrayFast(), volWeightedDifferences); return volWeightedDifferenceSeries; }