public virtual void recovery_test_normal()
        {
            double lambdaT = 0.07;
            double lambdaK = 0.07;
            double error   = 1.0e-5;
            DirectIborCapletFloorletVolatilityDefinition definition = DirectIborCapletFloorletVolatilityDefinition.of(NAME, USD_LIBOR_3M, ACT_ACT_ISDA, lambdaT, lambdaK, INTERPOLATOR);
            ImmutableList <Period> maturities  = createNormalMaturities();
            DoubleArray            strikes     = createNormalStrikes();
            DoubleMatrix           errorMatrix = DoubleMatrix.filled(maturities.size(), strikes.size(), error);
            RawOptionData          data        = RawOptionData.of(maturities, strikes, STRIKE, createFullNormalDataMatrix(), errorMatrix, NORMAL_VOLATILITY);
            IborCapletFloorletVolatilityCalibrationResult    res    = CALIBRATOR.calibrate(definition, CALIBRATION_TIME, data, RATES_PROVIDER);
            NormalIborCapletFloorletExpiryStrikeVolatilities resVol = (NormalIborCapletFloorletExpiryStrikeVolatilities)res.Volatilities;

            for (int i = 0; i < strikes.size(); ++i)
            {
                Pair <IList <ResolvedIborCapFloorLeg>, IList <double> > capsAndVols = getCapsNormalVols(i);
                IList <ResolvedIborCapFloorLeg> caps = capsAndVols.First;
                IList <double> vols  = capsAndVols.Second;
                int            nCaps = caps.Count;
                for (int j = 0; j < nCaps; ++j)
                {
                    ConstantSurface volSurface = ConstantSurface.of(Surfaces.normalVolatilityByExpiryStrike("test", ACT_ACT_ISDA), vols[j]);
                    NormalIborCapletFloorletExpiryStrikeVolatilities constVol = NormalIborCapletFloorletExpiryStrikeVolatilities.of(USD_LIBOR_3M, CALIBRATION_TIME, volSurface);
                    double priceOrg   = LEG_PRICER_NORMAL.presentValue(caps[j], RATES_PROVIDER, constVol).Amount;
                    double priceCalib = LEG_PRICER_NORMAL.presentValue(caps[j], RATES_PROVIDER, resVol).Amount;
                    assertEquals(priceOrg, priceCalib, Math.Max(priceOrg, 1d) * TOL);
                }
            }
        }
Exemplo n.º 2
0
        public virtual void test_presentValue()
        {
            CurrencyAmount capComputed   = PRICER.presentValue(CAP, RATES, VOLS);
            CurrencyAmount floorComputed = PRICER.presentValue(FLOOR, RATES, VOLS);
            double         capExpected   = 0d;
            double         floorExpected = 0d;
            int            nPeriods      = CAP.CapletFloorletPeriods.size();

            for (int i = 0; i < nPeriods; ++i)
            {
                capExpected   += PRICER_PERIOD.presentValue(CAP.CapletFloorletPeriods.get(i), RATES, VOLS).Amount;
                floorExpected += PRICER_PERIOD.presentValue(FLOOR.CapletFloorletPeriods.get(i), RATES, VOLS).Amount;
            }
            assertEquals(capComputed.Currency, EUR);
            assertEquals(capComputed.Amount, capExpected);
            assertEquals(floorComputed.Currency, EUR);
            assertEquals(floorComputed.Amount, floorExpected);
        }
Exemplo n.º 3
0
        public virtual void test_presentValue()
        {
            MultiCurrencyAmount computed1 = PRICER.presentValue(CAP_ONE_LEG, RATES, VOLS);
            MultiCurrencyAmount computed2 = PRICER.presentValue(CAP_TWO_LEGS, RATES, VOLS);
            CurrencyAmount      cap       = PRICER_CAP_LEG.presentValue(CAP_LEG, RATES, VOLS);
            CurrencyAmount      pay       = PRICER_PAY_LEG.presentValue(PAY_LEG, RATES);

            assertEquals(computed1, MultiCurrencyAmount.of(cap));
            assertEquals(computed2, MultiCurrencyAmount.of(cap.plus(pay)));
        }