/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.forex.calculator; import java.util.List; import java.util.Map; import com.google.common.collect.Maps; import com.opengamma.analytics.financial.forex.derivative.Forex; import com.opengamma.analytics.financial.forex.derivative.ForexOptionDigital; import com.opengamma.analytics.financial.forex.derivative.ForexOptionSingleBarrier; import com.opengamma.analytics.financial.forex.derivative.ForexOptionVanilla; import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter; import com.opengamma.analytics.financial.interestrate.YieldCurveBundle; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.tuple.DoublesPair; /** * Returns the change in present value of an instrument due to a parallel move of the yield curve, scaled so that the move is 1bp. * This calculator is Forex instrument-specific, and assumes that the list of sensitivities are in the currency appropriate for * the yield curve. * @deprecated Curve builders that use and populate {@link YieldCurveBundle}s are deprecated. */ @Deprecated public final class PV01ForexCalculator extends InstrumentDerivativeVisitorAdapter<Map<String, List<DoublesPair>>, Map<String, Double>> { private static final PV01ForexCalculator INSTANCE = new PV01ForexCalculator(); private static final double ONE_BASIS_POINT = 1.0E-4; public static PV01ForexCalculator getInstance() { return INSTANCE; } private PV01ForexCalculator() { } @Override public Map<String, Double> visitForex(final Forex forex, final Map<String, List<DoublesPair>> curveSensitivities) { return visit(curveSensitivities); } @Override public Map<String, Double> visitForexOptionDigital(final ForexOptionDigital option, final Map<String, List<DoublesPair>> curveSensitivities) { return visit(curveSensitivities); } @Override public Map<String, Double> visitForexOptionVanilla(final ForexOptionVanilla option, final Map<String, List<DoublesPair>> curveSensitivities) { return visit(curveSensitivities); } @Override public Map<String, Double> visitForexOptionSingleBarrier(final ForexOptionSingleBarrier option, final Map<String, List<DoublesPair>> curveSensitivities) { return visit(curveSensitivities); } private Map<String, Double> visit(final Map<String, List<DoublesPair>> curveSensitivities) { ArgumentChecker.notNull(curveSensitivities, "curve sensitivities"); final Map<String, Double> result = Maps.newHashMapWithExpectedSize(curveSensitivities.size()); for (final Map.Entry<String, List<DoublesPair>> entry : curveSensitivities.entrySet()) { final String name = entry.getKey(); final double sum = sumListPair(entry.getValue()) * ONE_BASIS_POINT; result.put(name, sum); } return result; } private double sumListPair(final List<DoublesPair> list) { double sum = 0.0; for (final DoublesPair pair : list) { sum += pair.getSecond(); } return sum; } }