Beispiel #1
0
        public virtual void test_price_from_generic_provider()
        {
            BondFutureVolatilities vols = BlackBondFutureExpiryLogMoneynessVolatilities.of(VAL_DATE_TIME, SURFACE);
            double computed             = OPTION_PRICER.price(FUTURE_OPTION_PRODUCT, RATE_PROVIDER, vols);
            double expected             = OPTION_PRICER.price(FUTURE_OPTION_PRODUCT, RATE_PROVIDER, VOLS);

            assertEquals(computed, expected, TOL);
        }
Beispiel #2
0
        public virtual void test_priceSensitivity_from_generic_provider()
        {
            BondFutureVolatilities volProvider = BlackBondFutureExpiryLogMoneynessVolatilities.of(VAL_DATE_TIME, SURFACE);
            PointSensitivities     expected    = OPTION_PRICER.priceSensitivityRatesStickyStrike(FUTURE_OPTION_PRODUCT, RATE_PROVIDER, VOLS);
            PointSensitivities     computed    = OPTION_PRICER.priceSensitivity(FUTURE_OPTION_PRODUCT, RATE_PROVIDER, volProvider);

            assertEquals(computed, expected);
        }
 //-------------------------------------------------------------------------
 /// <summary>
 /// Calculates the price of the bond future option trade.
 /// <para>
 /// The price of the trade is the price on the valuation date.
 ///
 /// </para>
 /// </summary>
 /// <param name="trade">  the trade </param>
 /// <param name="discountingProvider">  the discounting provider </param>
 /// <param name="volatilities">  the volatilities </param>
 /// <returns> the price of the product, in decimal form </returns>
 public double price(ResolvedBondFutureOptionTrade trade, LegalEntityDiscountingProvider discountingProvider, BondFutureVolatilities volatilities)
 {
     return(productPricer.price(trade.Product, discountingProvider, volatilities));
 }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the currency exposure of the bond future option trade.
        /// <para>
        /// This method calculates based on the difference between the model price and the
        /// last settlement price, or the trade price if traded on the valuation date.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="discountingProvider">  the discounting provider </param>
        /// <param name="volatilities">  the volatilities </param>
        /// <param name="lastOptionSettlementPrice">  the last settlement price used for margining for the option, in decimal form </param>
        /// <returns> the currency exposure of the bond future option trade </returns>
        public MultiCurrencyAmount currencyExposure(ResolvedBondFutureOptionTrade trade, LegalEntityDiscountingProvider discountingProvider, BondFutureVolatilities volatilities, double lastOptionSettlementPrice)
        {
            double price = this.price(trade, discountingProvider, volatilities);

            return(currencyExposure(trade, discountingProvider.ValuationDate, price, lastOptionSettlementPrice));
        }
        //-------------------------------------------------------------------------
        /// <summary>
        /// Calculates the present value sensitivity of the bond future option trade.
        /// <para>
        /// The present value sensitivity of the trade is the sensitivity of the present value to
        /// the underlying curves.
        ///
        /// </para>
        /// </summary>
        /// <param name="trade">  the trade </param>
        /// <param name="discountingProvider">  the discounting provider </param>
        /// <param name="volatilities">  the volatilities </param>
        /// <returns> the present value curve sensitivity of the trade </returns>
        public PointSensitivities presentValueSensitivityRates(ResolvedBondFutureOptionTrade trade, LegalEntityDiscountingProvider discountingProvider, BondFutureVolatilities volatilities)
        {
            ResolvedBondFutureOption product          = trade.Product;
            PointSensitivities       priceSensi       = productPricer.priceSensitivity(product, discountingProvider, volatilities);
            PointSensitivities       marginIndexSensi = productPricer.marginIndexSensitivity(product, priceSensi);

            return(marginIndexSensi.multipliedBy(trade.Quantity));
        }
 internal PointSensitivities priceSensitivity(ResolvedBondFutureOption futureOption, LegalEntityDiscountingProvider discountingProvider, BondFutureVolatilities volatilities)
 {
     ArgChecker.isTrue(volatilities is BlackBondFutureVolatilities, "Provider must be of type BlackVolatilityBondFutureProvider");
     return(priceSensitivityRatesStickyStrike(futureOption, discountingProvider, (BlackBondFutureVolatilities)volatilities));
 }
 internal double price(ResolvedBondFutureOption futureOption, LegalEntityDiscountingProvider discountingProvider, BondFutureVolatilities volatilities)
 {
     ArgChecker.isTrue(volatilities is BlackBondFutureVolatilities, "Provider must be of type BlackVolatilityBondFutureProvider");
     return(price(futureOption, discountingProvider, (BlackBondFutureVolatilities)volatilities));
 }