Package com.opengamma.analytics.financial.calculator

Source Code of com.opengamma.analytics.financial.calculator.PresentValueCurveSensitivityConvertedCurveCurrencyCalculator

/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.calculator;

import com.opengamma.analytics.financial.forex.method.MultipleCurrencyInterestRateCurveSensitivity;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivative;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorSameMethodAdapter;
import com.opengamma.analytics.financial.interestrate.InterestRateCurveSensitivity;
import com.opengamma.analytics.financial.interestrate.InterestRateCurveSensitivityUtils;
import com.opengamma.analytics.financial.interestrate.YieldCurveBundle;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;

/**
* A present value curve sensitivity calculator that convert a multi-currency rate sensitivity into the curve currency.
* @deprecated {@link YieldCurveBundle} is deprecated
*/
@Deprecated
public class PresentValueCurveSensitivityConvertedCurveCurrencyCalculator extends InstrumentDerivativeVisitorSameMethodAdapter<YieldCurveBundle, InterestRateCurveSensitivity> {

  /**
   * The method unique instance.
   */
  private static final PresentValueCurveSensitivityConvertedCurveCurrencyCalculator INSTANCE = new PresentValueCurveSensitivityConvertedCurveCurrencyCalculator();

  /**
   * Return the unique instance of the class.
   * @return The instance.
   */
  public static PresentValueCurveSensitivityConvertedCurveCurrencyCalculator getInstance() {
    return INSTANCE;
  }

  /**
   * The present value curve sensitivity calculator (with MultiCurrencyAmount output)
   */
  private final InstrumentDerivativeVisitorAdapter<YieldCurveBundle, MultipleCurrencyInterestRateCurveSensitivity> _pvcsCalculator;

  /**
   * Constructor.
   */
  PresentValueCurveSensitivityConvertedCurveCurrencyCalculator() {
    _pvcsCalculator = PresentValueCurveSensitivityMCSCalculator.getInstance();
  }

  /**
   * Constructor.
   * @param pvcsc The present value curve sensitivity calculator (not converted). Not null.
   */
  public PresentValueCurveSensitivityConvertedCurveCurrencyCalculator(final InstrumentDerivativeVisitorAdapter<YieldCurveBundle, MultipleCurrencyInterestRateCurveSensitivity> pvcsc) {
    ArgumentChecker.notNull(pvcsc, "present value curve sensitivity calculator");
    _pvcsCalculator = pvcsc;
  }

  @Override
  public InterestRateCurveSensitivity visit(final InstrumentDerivative derivative, final YieldCurveBundle curves) {
    ArgumentChecker.notNull(curves, "curves");
    ArgumentChecker.notNull(derivative, "derivative");
    final MultipleCurrencyInterestRateCurveSensitivity pvcsMulti = derivative.accept(_pvcsCalculator, curves);
    InterestRateCurveSensitivity result = new InterestRateCurveSensitivity();
    for (final Currency ccy : pvcsMulti.getCurrencies()) {
      final InterestRateCurveSensitivity pvcs = pvcsMulti.getSensitivity(ccy);
      for (final String curve : pvcs.getCurves()) {
        if (curves.getCurrencyMap().get(curve).equals(ccy)) { // Identical currencies: no changes
          result = result.plus(curve, pvcs.getSensitivities().get(curve));
        } else { // Different currencies: exchange rate multiplication.
          final double fxRate = curves.getFxRates().getFxRate(curves.getCurrencyMap().get(curve), ccy);
          result = result.plus(curve, InterestRateCurveSensitivityUtils.multiplySensitivity(pvcs.getSensitivities().get(curve), fxRate));
        }
      }
    }
    return result;
  }

  @Override
  public InterestRateCurveSensitivity visit(final InstrumentDerivative derivative) {
    throw new UnsupportedOperationException("Need curves data");
  }
}
TOP

Related Classes of com.opengamma.analytics.financial.calculator.PresentValueCurveSensitivityConvertedCurveCurrencyCalculator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.