예제 #1
0
        //-------------------------------------------------------------------------
        public virtual void test_compareKey()
        {
            IborFutureOptionSensitivity a1    = IborFutureOptionSensitivity.of(NAME, 12d, date(2015, 8, 28), 0.98, 0.99, GBP, 32d);
            IborFutureOptionSensitivity a2    = IborFutureOptionSensitivity.of(NAME, 12d, date(2015, 8, 28), 0.98, 0.99, GBP, 32d);
            IborFutureOptionSensitivity b     = IborFutureOptionSensitivity.of(NAME2, 12d, date(2015, 8, 28), 0.98, 0.99, GBP, 32d);
            IborFutureOptionSensitivity c     = IborFutureOptionSensitivity.of(NAME, 13d, date(2015, 8, 28), 0.98, 0.99, GBP, 32d);
            IborFutureOptionSensitivity d     = IborFutureOptionSensitivity.of(NAME, 12d, date(2015, 9, 28), 0.98, 0.99, GBP, 32d);
            IborFutureOptionSensitivity e     = IborFutureOptionSensitivity.of(NAME, 12d, date(2015, 8, 28), 0.99, 0.99, GBP, 32d);
            IborFutureOptionSensitivity f     = IborFutureOptionSensitivity.of(NAME, 12d, date(2015, 8, 28), 0.98, 1.00, GBP, 32d);
            IborFutureOptionSensitivity g     = IborFutureOptionSensitivity.of(NAME, 12d, date(2015, 8, 28), 0.98, 0.99, USD, 32d);
            ZeroRateSensitivity         other = ZeroRateSensitivity.of(GBP, 2d, 32d);

            assertEquals(a1.compareKey(a2), 0);
            assertEquals(a1.compareKey(b) < 0, true);
            assertEquals(b.compareKey(a1) > 0, true);
            assertEquals(a1.compareKey(c) < 0, true);
            assertEquals(c.compareKey(a1) > 0, true);
            assertEquals(a1.compareKey(d) < 0, true);
            assertEquals(d.compareKey(a1) > 0, true);
            assertEquals(a1.compareKey(e) < 0, true);
            assertEquals(e.compareKey(a1) > 0, true);
            assertEquals(a1.compareKey(f) < 0, true);
            assertEquals(f.compareKey(a1) > 0, true);
            assertEquals(a1.compareKey(g) < 0, true);
            assertEquals(g.compareKey(a1) > 0, true);
            assertEquals(a1.compareKey(other) < 0, true);
            assertEquals(other.compareKey(a1) > 0, true);
        }
        public virtual void priceSensitivityNormalVolatility_from_env()
        {
            IborIndexRates      mockIbor = mock(typeof(IborIndexRates));
            SimpleRatesProvider prov     = new SimpleRatesProvider();

            prov.IborRates = mockIbor;
            when(mockIbor.rate(OPTION.UnderlyingFuture.IborRate.Observation)).thenReturn(RATE);

            double futurePrice = 1.0 - RATE;
            IborFutureOptionSensitivity optionVegaExpected = OPTION_PRICER.priceSensitivityModelParamsVolatility(OPTION, prov, VOL_SIMPLE_MONEY_PRICE, futurePrice);
            IborFutureOptionSensitivity optionVegaComputed = OPTION_PRICER.priceSensitivityModelParamsVolatility(OPTION, prov, VOL_SIMPLE_MONEY_PRICE);

            assertTrue(optionVegaExpected.compareKey(optionVegaComputed) == 0);
            assertEquals(optionVegaComputed.Sensitivity, optionVegaExpected.Sensitivity, TOLERANCE_PRICE_DELTA);
        }
        // ----------     present value normal vol sensitivity     ----------

        public virtual void presentvalue_normalVolSensitivity_from_env()
        {
            IborIndexRates      mockIbor = mock(typeof(IborIndexRates));
            SimpleRatesProvider prov     = new SimpleRatesProvider();

            prov.IborRates = mockIbor;
            when(mockIbor.rate(OPTION.UnderlyingFuture.IborRate.Observation)).thenReturn(RATE);

            IborFutureOptionSensitivity psProduct  = OPTION_PRODUCT_PRICER.priceSensitivityModelParamsVolatility(OPTION, prov, VOL_SIMPLE_MONEY_PRICE);
            IborFutureOptionSensitivity psExpected = psProduct.withSensitivity(psProduct.Sensitivity * OPTION_PRODUCT_PRICER.marginIndex(OPTION, 1) * OPTION_QUANTITY);
            IborFutureOptionSensitivity psComputed = OPTION_TRADE_PRICER.presentValueSensitivityModelParamsVolatility(FUTURE_OPTION_TRADE, prov, VOL_SIMPLE_MONEY_PRICE);

            assertTrue(psExpected.compareKey(psComputed) == 0);
            assertEquals(psComputed.Sensitivity, psExpected.Sensitivity, TOLERANCE_PV_DELTA);
        }