/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.curve.interestrate.generator; import com.opengamma.analytics.financial.interestrate.YieldCurveBundle; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.financial.model.interestrate.curve.YieldCurve; import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderInterface; import com.opengamma.analytics.math.curve.DoublesCurveNelsonSiegel; import com.opengamma.util.ArgumentChecker; /** * Store the details and generate the required curve. The yield (continuously compounded) is generated by a Nelson-Siegel function. * <p> Reference: Nelson, C.R., Siegel, A.F. (1987). Parsimonious modeling of yield curves, Journal of Business, 60(4):473-489. */ @SuppressWarnings("deprecation") public class GeneratorCurveYieldNelsonSiegel extends GeneratorYDCurve { /** * The number of parameters of the curve. */ private static final int NB_PARAMETERS = 4; @Override public int getNumberOfParameter() { return NB_PARAMETERS; } @Override public YieldAndDiscountCurve generateCurve(final String name, final double[] parameters) { ArgumentChecker.isTrue(parameters.length == NB_PARAMETERS, "Nelson-Siegel should have 4 parameters"); return new YieldCurve(name, new DoublesCurveNelsonSiegel(name, parameters)); } /** * {@inheritDoc} * @deprecated Curve builders that use and populate {@link YieldCurveBundle}s are deprecated. */ @Deprecated @Override public YieldAndDiscountCurve generateCurve(final String name, final YieldCurveBundle bundle, final double[] parameters) { return generateCurve(name, parameters); } @Override public YieldAndDiscountCurve generateCurve(final String name, final MulticurveProviderInterface multicurve, final double[] parameters) { return generateCurve(name, parameters); } @Override public double[] initialGuess(final double[] rates) { final double[] guess = rates.clone(); guess[3] = 2.0; //TODO: get a better guess? return guess; } }