/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.pnl; import java.util.Map; import org.apache.commons.lang.Validate; import com.opengamma.analytics.financial.greeks.Underlying; import com.opengamma.analytics.financial.riskfactor.TaylorExpansionMultiplierCalculator; import com.opengamma.analytics.math.function.Function; import com.opengamma.timeseries.DoubleTimeSeries; /** * */ public class SensitivityPnLCalculator implements Function<SensitivityAndReturnDataBundle, DoubleTimeSeries<?>> { @Override public DoubleTimeSeries<?> evaluate(final SensitivityAndReturnDataBundle... data) { Validate.notNull(data, "data"); DoubleTimeSeries<?> result = null; DoubleTimeSeries<?> pnl = null; for (final SensitivityAndReturnDataBundle bundle : data) { final Underlying underlying = bundle.getUnderlying(); final Map<UnderlyingType, DoubleTimeSeries<?>> underlyingData = bundle.getUnderlyingReturnTS(); if (result == null) { result = TaylorExpansionMultiplierCalculator.getTimeSeries(underlyingData, underlying); result = result.multiply(bundle.getValue()); } else { pnl = TaylorExpansionMultiplierCalculator.getTimeSeries(underlyingData, underlying); result = result.add(pnl.multiply(bundle.getValue())); } } return result; } }