public virtual void test_resolve_beforeEnd_weekend() { FxResetCalculation @base = FxResetCalculation.builder().index(EUR_GBP_ECB).referenceCurrency(GBP).fixingDateOffset(MINUS_TWO_DAYS).fixingRelativeTo(FxResetFixingRelativeTo.PERIOD_END).build(); Optional <FxReset> test = @base.resolve(REF_DATA).apply(0, SchedulePeriod.of(DATE_2014_03_31, DATE_2014_06_30)); assertEquals(test, FxReset.of(FxIndexObservation.of(EUR_GBP_ECB, date(2014, 6, 26), REF_DATA), GBP)); }
public override Builder set(string propertyName, object newValue) { switch (propertyName.GetHashCode()) { case 575402001: // currency this.currency_Renamed = (Currency)newValue; break; case -449555555: // fxReset this.fxReset_Renamed = (FxResetCalculation)newValue; break; case -1413853096: // amount this.amount_Renamed = (ValueSchedule)newValue; break; case -511982201: // initialExchange this.initialExchange_Renamed = (bool?)newValue.Value; break; case -2147112388: // intermediateExchange this.intermediateExchange_Renamed = (bool?)newValue.Value; break; case -1048781383: // finalExchange this.finalExchange_Renamed = (bool?)newValue.Value; break; default: throw new NoSuchElementException("Unknown property: " + propertyName); } return(this); }
public virtual void test_resolve_beforeStart_threeDays() { FxResetCalculation @base = FxResetCalculation.builder().index(EUR_GBP_ECB).referenceCurrency(GBP).fixingDateOffset(MINUS_THREE_DAYS).build(); Optional <FxReset> test = @base.resolve(REF_DATA).apply(0, SchedulePeriod.of(DATE_2014_03_31, DATE_2014_06_30)); assertEquals(test, FxReset.of(FxIndexObservation.of(EUR_GBP_ECB, date(2014, 3, 26), REF_DATA), GBP)); }
/// <summary> /// Restricted copy constructor. </summary> /// <param name="beanToCopy"> the bean to copy from, not null </param> internal Builder(NotionalSchedule beanToCopy) { this.currency_Renamed = beanToCopy.Currency; this.fxReset_Renamed = beanToCopy.fxReset; this.amount_Renamed = beanToCopy.Amount; this.initialExchange_Renamed = beanToCopy.InitialExchange; this.intermediateExchange_Renamed = beanToCopy.IntermediateExchange; this.finalExchange_Renamed = beanToCopy.FinalExchange; }
public virtual void test_builder_defaults() { FxResetCalculation test = FxResetCalculation.builder().index(EUR_GBP_ECB).referenceCurrency(GBP).build(); assertEquals(test.Index, EUR_GBP_ECB); assertEquals(test.ReferenceCurrency, GBP); assertEquals(test.FixingDateOffset, EUR_GBP_ECB.FixingDateOffset); assertEquals(test.FixingRelativeTo, FxResetFixingRelativeTo.PERIOD_START); }
//------------------------------------------------------------------------- public virtual void coverage() { FxResetCalculation test = FxResetCalculation.builder().index(EUR_GBP_ECB).referenceCurrency(GBP).fixingDateOffset(MINUS_TWO_DAYS).build(); coverImmutableBean(test); FxResetCalculation test2 = FxResetCalculation.builder().index(EUR_USD_ECB).referenceCurrency(Currency.EUR).fixingDateOffset(MINUS_THREE_DAYS).fixingRelativeTo(FxResetFixingRelativeTo.PERIOD_END).build(); coverBeanEquals(test, test2); }
public virtual void test_resolve_initial_notional_override() { FxResetCalculation @base = FxResetCalculation.builder().index(EUR_GBP_ECB).referenceCurrency(GBP).fixingDateOffset(MINUS_TWO_DAYS).initialNotionalValue(100000d).build(); Optional <FxReset> fxResetFirstPeriod = @base.resolve(REF_DATA).apply(0, SchedulePeriod.of(DATE_2014_03_31, DATE_2014_06_30)); assertFalse(fxResetFirstPeriod.Present); Optional <FxReset> fxResetSecondPeriod = @base.resolve(REF_DATA).apply(1, SchedulePeriod.of(DATE_2014_03_31, DATE_2014_06_30)); assertTrue(fxResetSecondPeriod.Present); }
private NotionalSchedule(Currency currency, FxResetCalculation fxReset, ValueSchedule amount, bool initialExchange, bool intermediateExchange, bool finalExchange) { JodaBeanUtils.notNull(currency, "currency"); JodaBeanUtils.notNull(amount, "amount"); this.currency = currency; this.fxReset = fxReset; this.amount = amount; this.initialExchange = initialExchange; this.intermediateExchange = intermediateExchange; this.finalExchange = finalExchange; validate(); }
public virtual void test_builder_FxResetSetsFlags() { FxResetCalculation fxReset = FxResetCalculation.builder().referenceCurrency(GBP).index(GBP_USD_WM).fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, GBLO)).build(); NotionalSchedule test = NotionalSchedule.builder().currency(USD).amount(ValueSchedule.of(2000d)).intermediateExchange(true).finalExchange(true).fxReset(fxReset).build(); assertEquals(test.Currency, USD); assertEquals(test.Amount, ValueSchedule.of(2000d)); assertEquals(test.FxReset, fxReset); assertEquals(test.InitialExchange, false); assertEquals(test.IntermediateExchange, true); assertEquals(test.FinalExchange, true); }
public override bool Equals(object obj) { if (obj == this) { return(true); } if (obj != null && obj.GetType() == this.GetType()) { FxResetCalculation other = (FxResetCalculation)obj; return(JodaBeanUtils.equal(index, other.index) && JodaBeanUtils.equal(referenceCurrency, other.referenceCurrency) && JodaBeanUtils.equal(fixingRelativeTo, other.fixingRelativeTo) && JodaBeanUtils.equal(fixingDateOffset, other.fixingDateOffset) && JodaBeanUtils.equal(initialNotionalValue, other.initialNotionalValue)); } return(false); }
//------------------------------------------------------------------------- public virtual void coverage() { NotionalSchedule test = NotionalSchedule.of(GBP, 1000d); coverImmutableBean(test); NotionalSchedule test2 = NotionalSchedule.builder().currency(USD).amount(ValueSchedule.of(2000d)).fxReset(FxResetCalculation.builder().referenceCurrency(GBP).index(GBP_USD_WM).fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, GBLO)).build()).initialExchange(true).intermediateExchange(true).finalExchange(true).build(); coverBeanEquals(test, test2); }
/// <summary> /// Sets the FX reset definition, optional. /// <para> /// This property is used when the defined amount of the notional is specified in /// a currency other than the currency of the swap leg. When this occurs, the notional /// amount has to be converted using an FX rate to the swap leg currency. This conversion /// occurs at each payment period boundary and usually corresponds to an actual /// exchange of money between the counterparties. /// </para> /// <para> /// When building the notional schedule, if an {@code FxResetCalculation} is present, /// then at least one of the notional exchange flags should be set to true. If all notional /// exchange flags are false then an IllegalArgumentException is thrown. /// </para> /// </summary> /// <param name="fxReset"> the new value </param> /// <returns> this, for chaining, not null </returns> public Builder fxReset(FxResetCalculation fxReset) { this.fxReset_Renamed = fxReset; return(this); }
//------------------------------------------------------------------------- public virtual void test_resolve_oneAccrualPerPayment_fxReset() { // test case RateCalculationSwapLeg test = RateCalculationSwapLeg.builder().payReceive(PAY).accrualSchedule(PeriodicSchedule.builder().startDate(DATE_01_05).endDate(DATE_04_05).frequency(P1M).businessDayAdjustment(BusinessDayAdjustment.of(FOLLOWING, GBLO)).build()).paymentSchedule(PaymentSchedule.builder().paymentFrequency(P1M).paymentDateOffset(PLUS_TWO_DAYS).build()).notionalSchedule(NotionalSchedule.builder().currency(GBP).amount(ValueSchedule.of(1000d)).fxReset(FxResetCalculation.builder().referenceCurrency(EUR).index(EUR_GBP_ECB).fixingDateOffset(MINUS_TWO_DAYS).build()).initialExchange(true).intermediateExchange(true).finalExchange(true).build()).calculation(FixedRateCalculation.builder().dayCount(ACT_365F).rate(ValueSchedule.of(0.025d)).build()).build(); // expected RatePaymentPeriod rpp1 = RatePaymentPeriod.builder().paymentDate(DATE_02_07).accrualPeriods(RateAccrualPeriod.builder().startDate(DATE_01_06).endDate(DATE_02_05).unadjustedStartDate(DATE_01_05).yearFraction(ACT_365F.yearFraction(DATE_01_06, DATE_02_05)).rateComputation(FixedRateComputation.of(0.025d)).build()).dayCount(ACT_365F).currency(GBP).notional(-1000d).fxReset(FxReset.of(FxIndexObservation.of(EUR_GBP_ECB, DATE_01_02, REF_DATA), EUR)).build(); RatePaymentPeriod rpp2 = RatePaymentPeriod.builder().paymentDate(DATE_03_07).accrualPeriods(RateAccrualPeriod.builder().startDate(DATE_02_05).endDate(DATE_03_05).yearFraction(ACT_365F.yearFraction(DATE_02_05, DATE_03_05)).rateComputation(FixedRateComputation.of(0.025d)).build()).dayCount(ACT_365F).currency(GBP).notional(-1000d).fxReset(FxReset.of(FxIndexObservation.of(EUR_GBP_ECB, DATE_02_03, REF_DATA), EUR)).build(); RatePaymentPeriod rpp3 = RatePaymentPeriod.builder().paymentDate(DATE_04_09).accrualPeriods(RateAccrualPeriod.builder().startDate(DATE_03_05).endDate(DATE_04_07).unadjustedEndDate(DATE_04_05).yearFraction(ACT_365F.yearFraction(DATE_03_05, DATE_04_07)).rateComputation(FixedRateComputation.of(0.025d)).build()).dayCount(ACT_365F).currency(GBP).notional(-1000d).fxReset(FxReset.of(FxIndexObservation.of(EUR_GBP_ECB, DATE_03_03, REF_DATA), EUR)).build(); FxResetNotionalExchange ne1a = FxResetNotionalExchange.of(CurrencyAmount.of(EUR, 1000d), DATE_01_06, FxIndexObservation.of(EUR_GBP_ECB, DATE_01_02, REF_DATA)); FxResetNotionalExchange ne1b = FxResetNotionalExchange.of(CurrencyAmount.of(EUR, -1000d), DATE_02_07, FxIndexObservation.of(EUR_GBP_ECB, DATE_01_02, REF_DATA)); FxResetNotionalExchange ne2a = FxResetNotionalExchange.of(CurrencyAmount.of(EUR, 1000d), DATE_02_07, FxIndexObservation.of(EUR_GBP_ECB, DATE_02_03, REF_DATA)); FxResetNotionalExchange ne2b = FxResetNotionalExchange.of(CurrencyAmount.of(EUR, -1000d), DATE_03_07, FxIndexObservation.of(EUR_GBP_ECB, DATE_02_03, REF_DATA)); FxResetNotionalExchange ne3a = FxResetNotionalExchange.of(CurrencyAmount.of(EUR, 1000d), DATE_03_07, FxIndexObservation.of(EUR_GBP_ECB, DATE_03_03, REF_DATA)); FxResetNotionalExchange ne3b = FxResetNotionalExchange.of(CurrencyAmount.of(EUR, -1000d), DATE_04_09, FxIndexObservation.of(EUR_GBP_ECB, DATE_03_03, REF_DATA)); // assertion assertEquals(test.resolve(REF_DATA), ResolvedSwapLeg.builder().type(FIXED).payReceive(PAY).paymentPeriods(rpp1, rpp2, rpp3).paymentEvents(ne1a, ne1b, ne2a, ne2b, ne3a, ne3b).build()); }
public virtual void test_invalidCurrency() { assertThrowsIllegalArg(() => FxResetCalculation.builder().index(EUR_USD_ECB).referenceCurrency(GBP).fixingDateOffset(MINUS_TWO_DAYS).build()); }
public virtual void test_serialization() { FxResetCalculation test = FxResetCalculation.builder().index(EUR_GBP_ECB).referenceCurrency(GBP).fixingDateOffset(MINUS_TWO_DAYS).build(); assertSerialization(test); }
public virtual void test_builder_invalidCurrencyFxReset() { assertThrowsIllegalArg(() => NotionalSchedule.builder().currency(USD).amount(ValueSchedule.of(2000d)).fxReset(FxResetCalculation.builder().referenceCurrency(USD).index(GBP_USD_WM).fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, GBLO)).build()).build()); assertThrowsIllegalArg(() => NotionalSchedule.builder().currency(EUR).amount(ValueSchedule.of(2000d)).fxReset(FxResetCalculation.builder().referenceCurrency(USD).index(GBP_USD_WM).fixingDateOffset(DaysAdjustment.ofBusinessDays(-2, GBLO)).build()).build()); }
public virtual void test_collectIndices_fxReset() { RateCalculationSwapLeg test = RateCalculationSwapLeg.builder().payReceive(PAY).accrualSchedule(PeriodicSchedule.builder().startDate(DATE_01_05).endDate(DATE_04_05).frequency(P1M).businessDayAdjustment(BusinessDayAdjustment.of(FOLLOWING, GBLO)).build()).paymentSchedule(PaymentSchedule.builder().paymentFrequency(P1M).paymentDateOffset(PLUS_TWO_DAYS).build()).notionalSchedule(NotionalSchedule.builder().currency(GBP).amount(ValueSchedule.of(1000d)).finalExchange(true).fxReset(FxResetCalculation.builder().referenceCurrency(EUR).index(EUR_GBP_ECB).fixingDateOffset(MINUS_TWO_DAYS).build()).build()).calculation(IborRateCalculation.builder().dayCount(DayCounts.ACT_365F).index(GBP_LIBOR_3M).fixingDateOffset(MINUS_TWO_DAYS).build()).build(); ImmutableSet.Builder <Index> builder = ImmutableSet.builder(); test.collectIndices(builder); assertEquals(builder.build(), ImmutableSet.of(GBP_LIBOR_3M, EUR_GBP_ECB)); assertEquals(test.allIndices(), ImmutableSet.of(GBP_LIBOR_3M, EUR_GBP_ECB)); assertEquals(test.allCurrencies(), ImmutableSet.of(GBP, EUR)); }