@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 2100884654: // volatilitiesName return ((BondFutureOptionSensitivity) bean).getVolatilitiesName(); case -1289159373: // expiry return ((BondFutureOptionSensitivity) bean).getExpiry(); case -1119821404: // futureExpiryDate return ((BondFutureOptionSensitivity) bean).getFutureExpiryDate(); case 50946231: // strikePrice return ((BondFutureOptionSensitivity) bean).getStrikePrice(); case -518499002: // futurePrice return ((BondFutureOptionSensitivity) bean).getFuturePrice(); case 575402001: // currency return ((BondFutureOptionSensitivity) bean).getCurrency(); case 564403871: // sensitivity return ((BondFutureOptionSensitivity) bean).getSensitivity(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_multipliedBy() { BondFutureOptionSensitivity base = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity expected = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY * 3.5d); BondFutureOptionSensitivity test = base.multipliedBy(3.5d); assertEquals(test, expected); }
@Override public BondFutureOptionSensitivity multipliedBy(double factor) { return new BondFutureOptionSensitivity( volatilitiesName, expiry, futureExpiryDate, strikePrice, futurePrice, currency, sensitivity * factor); }
private CurrencyParameterSensitivity parameterSensitivity(BondFutureOptionSensitivity pointSensitivity) { double logMoneyness = Math.log(pointSensitivity.getStrikePrice() / pointSensitivity.getFuturePrice()); double expiryTime = pointSensitivity.getExpiry(); UnitParameterSensitivity unitSens = surface.zValueParameterSensitivity(expiryTime, logMoneyness); return unitSens.multipliedBy(pointSensitivity.getCurrency(), pointSensitivity.getSensitivity()); }
public void test_serialization() { BondFutureOptionSensitivity test = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); assertSerialization(test); }
public void test_withSensitivity() { BondFutureOptionSensitivity base = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity expected = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, 20d); BondFutureOptionSensitivity test = base.withSensitivity(20d); assertEquals(test, expected); }
public void test_mapSensitivity() { BondFutureOptionSensitivity base = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity expected = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, 1 / SENSITIVITY); BondFutureOptionSensitivity test = base.mapSensitivity(s -> 1 / s); assertEquals(test, expected); }
public void test_withCurrency() { BondFutureOptionSensitivity base = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); assertSame(base.withCurrency(GBP), base); BondFutureOptionSensitivity expected = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, USD, SENSITIVITY); BondFutureOptionSensitivity test = base.withCurrency(USD); assertEquals(test, expected); }
public void test_convertedTo() { BondFutureOptionSensitivity base = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); double rate = 1.5d; FxMatrix matrix = FxMatrix.of(CurrencyPair.of(GBP, USD), rate); BondFutureOptionSensitivity test1 = (BondFutureOptionSensitivity) base.convertedTo(USD, matrix); BondFutureOptionSensitivity expected = BondFutureOptionSensitivity.of(NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, USD, SENSITIVITY * rate); assertEquals(test1, expected); BondFutureOptionSensitivity test2 = (BondFutureOptionSensitivity) base.convertedTo(GBP, matrix); assertEquals(test2, base); }
public void test_compareKey() { BondFutureOptionSensitivity a1 = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity a2 = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity b = BondFutureOptionSensitivity.of(BondFutureVolatilitiesName.of("FOO-BOND-FUT"), OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity c = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY + 1, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity d = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, date(2015, 9, 28), STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity e = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, 0.995, FUTURE_PRICE, GBP, SENSITIVITY); BondFutureOptionSensitivity f = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, 0.975, GBP, SENSITIVITY); BondFutureOptionSensitivity g = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, USD, SENSITIVITY); 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);
public void test_buildInto() { BondFutureOptionSensitivity base = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); MutablePointSensitivities combo = new MutablePointSensitivities(); MutablePointSensitivities test = base.buildInto(combo); assertSame(test, combo); assertEquals(test.getSensitivities(), ImmutableList.of(base)); }
/** * Computes the present value sensitivity to the Black volatility used in the pricing * based on the price of the underlying future. * <p> * The result is a single sensitivity to the volatility used. * The volatility is associated with the expiry/delay/strike/future price key combination. * * @param futureOptionTrade the trade * @param discountingProvider the discounting provider * @param volatilities the volatilities * @param futurePrice the price of the underlying future * @return the price sensitivity */ public BondFutureOptionSensitivity presentValueSensitivityModelParamsVolatility( ResolvedBondFutureOptionTrade futureOptionTrade, LegalEntityDiscountingProvider discountingProvider, BlackBondFutureVolatilities volatilities, double futurePrice) { ResolvedBondFutureOption product = futureOptionTrade.getProduct(); BondFutureOptionSensitivity priceSensitivity = productPricer.priceSensitivityModelParamsVolatility(product, discountingProvider, volatilities, futurePrice); double factor = productPricer.marginIndex(product, 1) * futureOptionTrade.getQuantity(); return priceSensitivity.multipliedBy(factor); }
@Override public CurrencyParameterSensitivities parameterSensitivity(PointSensitivities pointSensitivities) { CurrencyParameterSensitivities sens = CurrencyParameterSensitivities.empty(); for (PointSensitivity point : pointSensitivities.getSensitivities()) { if (point instanceof BondFutureOptionSensitivity) { BondFutureOptionSensitivity pt = (BondFutureOptionSensitivity) point; if (pt.getVolatilitiesName().equals(getName())) { sens = sens.combinedWith(parameterSensitivity(pt)); } } } return sens; }
public void coverage() { BondFutureOptionSensitivity test1 = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); coverImmutableBean(test1); BondFutureOptionSensitivity test2 = BondFutureOptionSensitivity.of( BondFutureVolatilitiesName.of("FOO-BOND-FUT"), OPTION_EXPIRY + 1, date(2015, 9, 28), 0.985, 0.995, USD, SENSITIVITY); coverBeanEquals(test1, test2); }
public void test_of() { BondFutureOptionSensitivity test = BondFutureOptionSensitivity.of( NAME, OPTION_EXPIRY, FUTURE_EXPIRY, STRIKE_PRICE, FUTURE_PRICE, GBP, SENSITIVITY); assertEquals(test.getVolatilitiesName(), NAME); assertEquals(test.getCurrency(), GBP); assertEquals(test.getExpiry(), OPTION_EXPIRY); assertEquals(test.getFutureExpiryDate(), FUTURE_EXPIRY); assertEquals(test.getStrikePrice(), STRIKE_PRICE); assertEquals(test.getFuturePrice(), FUTURE_PRICE); assertEquals(test.getSensitivity(), SENSITIVITY); }
/** * Calculates the price sensitivity to the Black volatility used for the pricing of the bond future option * based on the price of the underlying future. * * @param futureOption the option product * @param discountingProvider the discounting provider * @param volatilities the volatilities * @param futurePrice the underlying future price * @return the sensitivity */ public BondFutureOptionSensitivity priceSensitivityModelParamsVolatility( ResolvedBondFutureOption futureOption, LegalEntityDiscountingProvider discountingProvider, BlackBondFutureVolatilities volatilities, double futurePrice) { ArgChecker.isTrue(futureOption.getPremiumStyle().equals(FutureOptionPremiumStyle.DAILY_MARGIN), "Premium style should be DAILY_MARGIN"); double strike = futureOption.getStrikePrice(); ResolvedBondFuture future = futureOption.getUnderlyingFuture(); double volatility = volatilities.volatility(futureOption.getExpiry(), future.getLastTradeDate(), strike, futurePrice); double timeToExpiry = volatilities.relativeTime(futureOption.getExpiry()); double vega = BlackFormulaRepository.vega(futurePrice, strike, timeToExpiry, volatility); return BondFutureOptionSensitivity.of( volatilities.getName(), timeToExpiry, future.getLastTradeDate(), strike, futurePrice, future.getCurrency(), vega); }
@Override public BondFutureOptionSensitivity build() { return new BondFutureOptionSensitivity( volatilitiesName, expiry, futureExpiryDate, strikePrice, futurePrice, currency, sensitivity); }