/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.riskfactor; import java.util.HashMap; import java.util.Map; import com.opengamma.analytics.financial.greeks.Greek; import com.opengamma.analytics.financial.greeks.GreekResultCollection; import com.opengamma.analytics.financial.greeks.Underlying; import com.opengamma.analytics.financial.pnl.UnderlyingType; import com.opengamma.analytics.financial.sensitivity.ValueGreek; import com.opengamma.analytics.financial.trade.OptionTradeData; import com.opengamma.analytics.math.function.Function1D; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.tuple.Pair; /** * */ public class GreekToValueGreekConverter extends Function1D<GreekDataBundle, Map<ValueGreek, Double>> { @Override public Map<ValueGreek, Double> evaluate(final GreekDataBundle data) { ArgumentChecker.notNull(data, "data"); final GreekResultCollection greeks = data.getGreekResults(); final Map<ValueGreek, Double> riskFactors = new HashMap<>(); final Map<UnderlyingType, Double> underlyingData = data.getUnderlyingData(); final OptionTradeData tradeData = data.getOptionTradeData(); for (final Pair<Greek, Double> entry : greeks) { final Greek key = entry.getFirst(); final Double value = entry.getSecond(); riskFactors.put(new ValueGreek(key), getValueGreek(key, value, underlyingData, tradeData)); } return riskFactors; } // TODO handle theta separately? private Double getValueGreek(final Greek greek, final double greekValue, final Map<UnderlyingType, Double> underlyings, final OptionTradeData tradeData) { final Underlying order = greek.getUnderlying(); return TaylorExpansionMultiplierCalculator.getValue(underlyings, order) * greekValue * tradeData.getNumberOfContracts() * tradeData.getPointValue() / TaylorExpansionMultiplierCalculator.getMultiplier(order); } }