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); }
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)); }