/// <summary> /// Calculates the delta of the Ibor future option product /// based on the price of the underlying future. /// <para> /// The delta of the product is the sensitivity of the option price to the future price. /// The volatility is unchanged for a fixed strike in the sensitivity computation, hence the "StickyStrike" name. /// /// </para> /// </summary> /// <param name="futureOption"> the option product </param> /// <param name="ratesProvider"> the rates provider </param> /// <param name="volatilities"> the volatilities </param> /// <param name="futurePrice"> the price of the underlying future, in decimal form </param> /// <returns> the price curve sensitivity of the product </returns> public virtual double deltaStickyStrike(ResolvedIborFutureOption futureOption, RatesProvider ratesProvider, NormalIborFutureOptionVolatilities volatilities, double futurePrice) { ArgChecker.isTrue(futureOption.PremiumStyle.Equals(FutureOptionPremiumStyle.DAILY_MARGIN), "Premium style should be DAILY_MARGIN"); double timeToExpiry = volatilities.relativeTime(futureOption.Expiry); double strike = futureOption.StrikePrice; ResolvedIborFuture future = futureOption.UnderlyingFuture; double volatility = volatilities.volatility(timeToExpiry, future.LastTradeDate, strike, futurePrice); return(NormalFormulaRepository.delta(futurePrice, strike, timeToExpiry, volatility, futureOption.PutCall)); }
/// <summary> /// Calculates the price sensitivity to the normal volatility used for the pricing of the Ibor future option /// based on the price of the underlying future. /// <para> /// This sensitivity is also called the <i>price normal vega</i>. /// /// </para> /// </summary> /// <param name="futureOption"> the option product </param> /// <param name="ratesProvider"> the rates provider </param> /// <param name="volatilities"> the volatilities </param> /// <param name="futurePrice"> the underlying future price, in decimal form </param> /// <returns> the sensitivity </returns> public virtual IborFutureOptionSensitivity priceSensitivityModelParamsVolatility(ResolvedIborFutureOption futureOption, RatesProvider ratesProvider, NormalIborFutureOptionVolatilities volatilities, double futurePrice) { ArgChecker.isTrue(futureOption.PremiumStyle.Equals(FutureOptionPremiumStyle.DAILY_MARGIN), "Premium style should be DAILY_MARGIN"); double timeToExpiry = volatilities.relativeTime(futureOption.Expiry); double strike = futureOption.StrikePrice; ResolvedIborFuture future = futureOption.UnderlyingFuture; double volatility = volatilities.volatility(timeToExpiry, future.LastTradeDate, strike, futurePrice); double vega = NormalFormulaRepository.vega(futurePrice, strike, timeToExpiry, volatility, futureOption.PutCall); return(IborFutureOptionSensitivity.of(volatilities.Name, timeToExpiry, future.LastTradeDate, strike, futurePrice, future.Currency, vega)); }