/** * Constructor of the future option transaction from details. * * @param underlyingOption The underlying option future security. * @param quantity The quantity of the transaction. Can be positive or negative. * @param premiumDate The transaction date. * @param tradePrice The transaction price. */ public InterestRateFutureOptionPremiumTransactionDefinition( final InterestRateFutureOptionPremiumSecurityDefinition underlyingOption, final int quantity, final ZonedDateTime premiumDate, final double tradePrice) { ArgChecker.notNull(underlyingOption, "underlying option"); ArgChecker.notNull(premiumDate, "premium date"); _underlyingOption = underlyingOption; _quantity = quantity; _tradePrice = tradePrice; final double premiumAmount = _tradePrice * _underlyingOption.getUnderlyingFuture().getNotional() * _underlyingOption.getUnderlyingFuture().getPaymentAccrualFactor(); _premium = new PaymentFixedDefinition(underlyingOption.getCurrency(), premiumDate, premiumAmount); }
@Override public InterestRateFutureOptionPremiumTransaction toDerivative(final ZonedDateTime date) { final InterestRateFutureOptionPremiumSecurity option = _underlyingOption.toDerivative(date); final double premiumTime = TimeCalculator.getTimeBetween(date, _premium.getPaymentDate()); if (premiumTime < 0) { // Premium payment in the past. // The premium payment is in the past and is represented by a 0 payment today. return new InterestRateFutureOptionPremiumTransaction(option, _quantity, 0.0, 0.0); } return new InterestRateFutureOptionPremiumTransaction( option, _quantity, premiumTime, _tradePrice); }
@Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + _premium.hashCode(); result = prime * result + _quantity; long temp; temp = Double.doubleToLongBits(_tradePrice); result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + _underlyingOption.hashCode(); return result; }
@Test /** Tests the toDerivative method when the reference date is before the premium settlement. */ public void toDerivativeBeforeSettlement() { final InterestRateFutureOptionPremiumTransaction transactionConverted = OPTION_TRANSACTION.toDerivative(REFERENCE_DATE); final InterestRateFutureOptionPremiumSecurity security = OPTION_EDU2.toDerivative(REFERENCE_DATE); final double premiumTime = TimeCalculator.getTimeBetween(REFERENCE_DATE, PREMIUM_DATE); final InterestRateFutureOptionPremiumTransaction transaction = new InterestRateFutureOptionPremiumTransaction( security, QUANTITY, premiumTime, TRADE_PRICE); assertEquals("Option on future: to derivative", transaction, transactionConverted); }
@Test /** Tests the toDerivative method when the reference date is after the premium settlement. */ public void toDerivativeAfterSettlement() { final ZonedDateTime referenceDate = PREMIUM_DATE.plusDays(1); final InterestRateFutureOptionPremiumTransaction transactionConverted = OPTION_TRANSACTION.toDerivative(referenceDate); final InterestRateFutureOptionPremiumSecurity security = OPTION_EDU2.toDerivative(referenceDate); final double premiumTime = 0.0; final double price = 0.0; // The payment is in the past and is represented by a 0 payment today. final InterestRateFutureOptionPremiumTransaction transaction = new InterestRateFutureOptionPremiumTransaction(security, QUANTITY, premiumTime, price); assertEquals("Option on future: to derivative", transaction, transactionConverted); }
@Test /** Tests the toDerivative method when the reference date is on the premium settlement. */ public void toDerivativeOnSettlement() { final ZonedDateTime referenceDate = PREMIUM_DATE; final InterestRateFutureOptionPremiumTransaction transactionConverted = OPTION_TRANSACTION.toDerivative(referenceDate); final InterestRateFutureOptionPremiumSecurity security = OPTION_EDU2.toDerivative(referenceDate); final double premiumTime = 0.0; final InterestRateFutureOptionPremiumTransaction transaction = new InterestRateFutureOptionPremiumTransaction( security, QUANTITY, premiumTime, TRADE_PRICE); assertEquals("Option on future: to derivative", transaction, transactionConverted); }