/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.sabrcube; import java.util.Collections; import java.util.Set; import com.opengamma.analytics.financial.interestrate.InstrumentDerivative; import com.opengamma.analytics.financial.interestrate.PresentValueSABRSensitivityDataBundle; import com.opengamma.analytics.financial.interestrate.PresentValueSABRSensitivitySABRRightExtrapolationCalculator; import com.opengamma.analytics.financial.model.option.definition.SABRInterestRateDataBundle; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueRequirementNames; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.financial.analytics.DoubleLabelledMatrix2D; import com.opengamma.financial.security.FinancialSecurityUtils; /** * Calculates sensitivities with respect to the SABR parameters. * @deprecated The parent of this class is deprecated */ @Deprecated public abstract class SABRRightExtrapolationPVSABRSensitivityFunction extends SABRRightExtrapolationFunction { @Override public Set<ValueSpecification> getResults(final FunctionCompilationContext context, final ComputationTarget target) { final String currency = FinancialSecurityUtils.getCurrency(target.getSecurity()).getCode(); final ValueProperties properties = getResultProperties(createValueProperties().get(), currency); return Collections.singleton(new ValueSpecification(getValueRequirement(), target.toSpecification(), properties)); } @Override protected Object getResult(final InstrumentDerivative derivative, final SABRInterestRateDataBundle data, final ValueRequirement desiredValue) { final Double cutoff = Double.parseDouble(desiredValue.getConstraint(SABRRightExtrapolationFunction.PROPERTY_CUTOFF_STRIKE)); final Double mu = Double.parseDouble(desiredValue.getConstraint(SABRRightExtrapolationFunction.PROPERTY_TAIL_THICKNESS_PARAMETER)); final PresentValueSABRSensitivitySABRRightExtrapolationCalculator calculator = new PresentValueSABRSensitivitySABRRightExtrapolationCalculator(cutoff, mu); return getResultAsMatrix(derivative.accept(calculator, data)); } protected abstract DoubleLabelledMatrix2D getResultAsMatrix(final PresentValueSABRSensitivityDataBundle sensitivities); /** * Function to get the sensitivity to the alpha parameter */ public static class Alpha extends SABRRightExtrapolationPVSABRSensitivityFunction { @Override protected String getValueRequirement() { return ValueRequirementNames.PRESENT_VALUE_SABR_ALPHA_SENSITIVITY; } @Override protected DoubleLabelledMatrix2D getResultAsMatrix(final PresentValueSABRSensitivityDataBundle sensitivities) { return SABRCubeUtils.toDoubleLabelledMatrix2D(sensitivities.getAlpha()); } } /** * Function to get the sensitivity to the rho parameter */ public static class Rho extends SABRRightExtrapolationPVSABRSensitivityFunction { @Override protected String getValueRequirement() { return ValueRequirementNames.PRESENT_VALUE_SABR_RHO_SENSITIVITY; } @Override protected DoubleLabelledMatrix2D getResultAsMatrix(final PresentValueSABRSensitivityDataBundle sensitivities) { return SABRCubeUtils.toDoubleLabelledMatrix2D(sensitivities.getRho()); } } /** * Function to get the sensitivity to the nu parameter */ public static class Nu extends SABRRightExtrapolationPVSABRSensitivityFunction { @Override protected String getValueRequirement() { return ValueRequirementNames.PRESENT_VALUE_SABR_NU_SENSITIVITY; } @Override protected DoubleLabelledMatrix2D getResultAsMatrix(final PresentValueSABRSensitivityDataBundle sensitivities) { return SABRCubeUtils.toDoubleLabelledMatrix2D(sensitivities.getNu()); } } }