// update vols private SabrParametersIborCapletFloorletVolatilities updateParameters(SabrParametersIborCapletFloorletVolatilities volatilities, int nExpiries, int timeIndex, bool betaFixed, DoubleArray newParameters) { int nBetaParams = volatilities.Parameters.BetaCurve.ParameterCount; int nRhoParams = volatilities.Parameters.RhoCurve.ParameterCount; SabrParametersIborCapletFloorletVolatilities newVols = volatilities.withParameter(timeIndex, newParameters.get(0)).withParameter(timeIndex + nExpiries + nBetaParams + nRhoParams, newParameters.get(3)); if (betaFixed) { newVols = newVols.withParameter(timeIndex + nExpiries + nBetaParams, newParameters.get(2)); return(newVols); } newVols = newVols.withParameter(timeIndex + nExpiries, newParameters.get(1)); return(newVols); }
public virtual void test_of() { SabrParametersIborCapletFloorletVolatilities test = SabrParametersIborCapletFloorletVolatilities.of(NAME, EUR_EURIBOR_3M, DATE_TIME, PARAM); assertEquals(test.Index, EUR_EURIBOR_3M); assertEquals(test.DayCount, ACT_ACT_ISDA); assertEquals(test.Parameters, PARAM); assertEquals(test.ValuationDateTime, DATE_TIME); assertEquals(test.ParameterCount, PARAM.ParameterCount); int nParams = PARAM.ParameterCount; double newValue = 152d; for (int i = 0; i < nParams; ++i) { assertEquals(test.getParameter(i), PARAM.getParameter(i)); assertEquals(test.getParameterMetadata(i), PARAM.getParameterMetadata(i)); assertEquals(test.withParameter(i, newValue), SabrParametersIborCapletFloorletVolatilities.of(NAME, EUR_EURIBOR_3M, DATE_TIME, PARAM.withParameter(i, newValue))); assertEquals(test.withPerturbation((n, v, m) => 2d * v), SabrParametersIborCapletFloorletVolatilities.of(NAME, EUR_EURIBOR_3M, DATE_TIME, PARAM.withPerturbation((n, v, m) => 2d * v))); } }