/** * Converts this sensitivity to an {@code FxForwardSensitivity}. * <p> * The time series, fixing date and FX index are lost by this conversion. * Instead, maturity date and currency pair are contained in {@link FxForwardSensitivity}. * * @return the FX forward sensitivity */ public FxForwardSensitivity toFxForwardSensitivity() { return FxForwardSensitivity.of( observation.getCurrencyPair(), referenceCurrency, observation.getMaturityDate(), currency, sensitivity); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 100346066: // index return ((FxIndexObservation) bean).getIndex(); case 1255202043: // fixingDate return ((FxIndexObservation) bean).getFixingDate(); case -414641441: // maturityDate return ((FxIndexObservation) bean).getMaturityDate(); } return super.propertyGet(bean, propertyName, quiet); }
private double forwardRate(FxIndexObservation observation) { return fxForwardRates.rate(index.getCurrencyPair().getBase(), observation.getMaturityDate()); }
public void test_of() { FxIndexObservation test = FxIndexObservation.of(GBP_USD_WM, FIXING_DATE, REF_DATA); assertEquals(test.getIndex(), GBP_USD_WM); assertEquals(test.getFixingDate(), FIXING_DATE); assertEquals(test.getMaturityDate(), MATURITY_DATE); assertEquals(test.getCurrencyPair(), GBP_USD_WM.getCurrencyPair()); assertEquals(test.toString(), "FxIndexObservation[GBP/USD-WM on 2016-02-22]"); }
@Override public MultiCurrencyAmount currencyExposure(RatePaymentPeriod period, RatesProvider provider) { double df = provider.discountFactor(period.getCurrency(), period.getPaymentDate()); if (period.getFxReset().isPresent()) { FxReset fxReset = period.getFxReset().get(); LocalDate fixingDate = fxReset.getObservation().getFixingDate(); FxIndexRates rates = provider.fxIndexRates(fxReset.getObservation().getIndex()); if (!fixingDate.isAfter(provider.getValuationDate()) && rates.getFixings().get(fixingDate).isPresent()) { double fxRate = rates.rate(fxReset.getObservation(), fxReset.getReferenceCurrency()); return MultiCurrencyAmount.of(period.getCurrency(), accrualWithNotional(period, period.getNotional() * fxRate * df, provider)); } double fxRateSpotSensitivity = rates.getFxForwardRates() .rateFxSpotSensitivity(fxReset.getReferenceCurrency(), fxReset.getObservation().getMaturityDate()); return MultiCurrencyAmount.of(fxReset.getReferenceCurrency(), accrualWithNotional(period, period.getNotional() * fxRateSpotSensitivity * df, provider)); } return MultiCurrencyAmount.of(period.getCurrency(), accrualWithNotional(period, period.getNotional() * df, provider)); }
@Override public MultiCurrencyAmount currencyExposure(FxResetNotionalExchange event, RatesProvider provider) { LocalDate fixingDate = event.getObservation().getFixingDate(); FxIndexRates rates = provider.fxIndexRates(event.getObservation().getIndex()); double df = provider.discountFactor(event.getCurrency(), event.getPaymentDate()); if (!fixingDate.isAfter(provider.getValuationDate()) && rates.getFixings().get(fixingDate).isPresent()) { double fxRate = rates.rate(event.getObservation(), event.getReferenceCurrency()); return MultiCurrencyAmount.of(CurrencyAmount.of(event.getCurrency(), event.getNotional() * df * fxRate)); } LocalDate maturityDate = event.getObservation().getMaturityDate(); double fxRateSpotSensitivity = rates.getFxForwardRates().rateFxSpotSensitivity(event.getReferenceCurrency(), maturityDate); return MultiCurrencyAmount.of( CurrencyAmount.of(event.getReferenceCurrency(), event.getNotional() * df * fxRateSpotSensitivity)); }