/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.multicurve; import static com.opengamma.engine.value.ValueRequirementNames.ACCRUED_INTEREST; import static com.opengamma.engine.value.ValueRequirementNames.ALL_PV01S; import static com.opengamma.engine.value.ValueRequirementNames.ASSET_LEG_PV; import static com.opengamma.engine.value.ValueRequirementNames.BLOCK_CURVE_SENSITIVITIES; import static com.opengamma.engine.value.ValueRequirementNames.BOND_DETAILS; import static com.opengamma.engine.value.ValueRequirementNames.BUCKETED_PV01; import static com.opengamma.engine.value.ValueRequirementNames.CLEAN_PRICE; import static com.opengamma.engine.value.ValueRequirementNames.CONVEXITY; import static com.opengamma.engine.value.ValueRequirementNames.FUNDING_LEG_DETAILS; import static com.opengamma.engine.value.ValueRequirementNames.FUNDING_LEG_PV; import static com.opengamma.engine.value.ValueRequirementNames.FX_PRESENT_VALUE; import static com.opengamma.engine.value.ValueRequirementNames.GAMMA_PV01; import static com.opengamma.engine.value.ValueRequirementNames.GROSS_BASIS; import static com.opengamma.engine.value.ValueRequirementNames.MACAULAY_DURATION; import static com.opengamma.engine.value.ValueRequirementNames.MODIFIED_DURATION; import static com.opengamma.engine.value.ValueRequirementNames.NET_BASIS; import static com.opengamma.engine.value.ValueRequirementNames.PRESENT_VALUE; import static com.opengamma.engine.value.ValueRequirementNames.PV01; import static com.opengamma.engine.value.ValueRequirementNames.SWAP_PAY_LEG_DETAILS; import static com.opengamma.engine.value.ValueRequirementNames.SWAP_RECEIVE_LEG_DETAILS; import static com.opengamma.engine.value.ValueRequirementNames.VALUE_THETA; import static com.opengamma.engine.value.ValueRequirementNames.YIELD_CURVE_NODE_SENSITIVITIES; import static com.opengamma.engine.value.ValueRequirementNames.YTM; import static com.opengamma.engine.value.ValueRequirementNames.Z_SPREAD; import static com.opengamma.financial.analytics.model.curve.interestrate.MultiYieldCurvePropertiesAndDefaults.PROPERTY_ROOT_FINDER_ABSOLUTE_TOLERANCE; import static com.opengamma.financial.analytics.model.curve.interestrate.MultiYieldCurvePropertiesAndDefaults.PROPERTY_ROOT_FINDER_MAX_ITERATIONS; import static com.opengamma.financial.analytics.model.curve.interestrate.MultiYieldCurvePropertiesAndDefaults.PROPERTY_ROOT_FINDER_RELATIVE_TOLERANCE; import java.util.Collections; import java.util.Set; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.financial.property.DefaultPropertyFunction; import com.opengamma.util.ArgumentChecker; /** * Sets root-finding defaults for yield curves. */ public class MultiCurvePricingDefaults extends DefaultPropertyFunction { /** The value requirement names for which these defaults apply */ private static final String[] VALUE_REQUIREMENTS = new String[] { ACCRUED_INTEREST, ALL_PV01S, ASSET_LEG_PV, BLOCK_CURVE_SENSITIVITIES, BOND_DETAILS, BUCKETED_PV01, CLEAN_PRICE, CONVEXITY, FUNDING_LEG_DETAILS, FUNDING_LEG_PV, FX_PRESENT_VALUE, GAMMA_PV01, GROSS_BASIS, MACAULAY_DURATION, MODIFIED_DURATION, NET_BASIS, PRESENT_VALUE, PV01, SWAP_PAY_LEG_DETAILS, SWAP_RECEIVE_LEG_DETAILS, VALUE_THETA, YIELD_CURVE_NODE_SENSITIVITIES, YTM, Z_SPREAD }; /** The absolute tolerance */ private final Set<String> _absoluteTolerance; /** The relative tolerance */ private final Set<String> _relativeTolerance; /** The maximum number of iterations */ private final Set<String> _maxIterations; /** * @param absoluteTolerance The absolute tolerance for the root-finder * @param relativeTolerance The relative tolerance for the root-finder * @param maxIterations The maximum number of iterations */ public MultiCurvePricingDefaults(final String absoluteTolerance, final String relativeTolerance, final String maxIterations) { super(ComputationTargetType.TRADE, true); ArgumentChecker.notNull(absoluteTolerance, "absoluteTolerance"); ArgumentChecker.notNull(relativeTolerance, "relativeTolerance"); ArgumentChecker.notNull(maxIterations, "maxIterations"); _absoluteTolerance = Collections.singleton(absoluteTolerance); _relativeTolerance = Collections.singleton(relativeTolerance); _maxIterations = Collections.singleton(maxIterations); } @Override protected void getDefaults(final PropertyDefaults defaults) { for (final String valueRequirement : VALUE_REQUIREMENTS) { defaults.addValuePropertyName(valueRequirement, PROPERTY_ROOT_FINDER_ABSOLUTE_TOLERANCE); defaults.addValuePropertyName(valueRequirement, PROPERTY_ROOT_FINDER_RELATIVE_TOLERANCE); defaults.addValuePropertyName(valueRequirement, PROPERTY_ROOT_FINDER_MAX_ITERATIONS); } } @Override protected Set<String> getDefaultValue(final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue, final String propertyName) { switch (propertyName) { case PROPERTY_ROOT_FINDER_ABSOLUTE_TOLERANCE: return _absoluteTolerance; case PROPERTY_ROOT_FINDER_RELATIVE_TOLERANCE: return _relativeTolerance; case PROPERTY_ROOT_FINDER_MAX_ITERATIONS: return _maxIterations; default: return null; } } }