Beispiel #1
0
        // 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)));
            }
        }