public void test_of_pairAndSource() { FxRateId test = FxRateId.of(PAIR, OBS_SOURCE); FxRateId inverse = FxRateId.of(INVERSE); assertEquals(test.getPair(), PAIR); assertEquals(inverse.getPair(), PAIR); assertEquals(test.getObservableSource(), OBS_SOURCE); assertEquals(test.getMarketDataType(), FxRate.class); }
/** * Obtains an instance representing the FX rate for a currency pair, specifying the source. * * @param currencyPair a currency pair * @param observableSource the source of the observable market data used to create the rate * @return an ID for the FX rate for the currency pair */ public static FxRateId of(CurrencyPair currencyPair, ObservableSource observableSource) { return new FxRateId(currencyPair, observableSource); }
/** * Returns a curve node for a cross-currency Ibor-Ibor interest rate swap using the * specified instrument template, rate key, spread and label. * * @param template the template defining the node instrument * @param spreadId the identifier of the market spread used when building the instrument for the node * @param additionalSpread the additional spread amount added to the market quote * @param label the label to use for the node, if null or empty an appropriate default label will be used * @return a node whose instrument is built from the template using a market rate */ public static XCcyIborIborSwapCurveNode of( XCcyIborIborSwapTemplate template, ObservableId spreadId, double additionalSpread, String label) { FxRateId fxRateId = FxRateId.of(template.getCurrencyPair()); return new XCcyIborIborSwapCurveNode( template, fxRateId, spreadId, additionalSpread, label, CurveNodeDate.END, CurveNodeDateOrder.DEFAULT); }
@ImmutablePreBuild private static void preBuild(Builder builder) { if (builder.template != null) { if (builder.label == null) { builder.label = builder.template.getTenor().toString(); } if (builder.fxRateId == null) { builder.fxRateId = FxRateId.of(builder.template.getCurrencyPair()); } else { ArgChecker.isTrue( builder.fxRateId.getPair().toConventional().equals(builder.template.getCurrencyPair().toConventional()), "FxRateId currency pair '{}' must match that of the template '{}'", builder.fxRateId.getPair(), builder.template.getCurrencyPair()); } } }
@ImmutablePreBuild private static void preBuild(Builder builder) { if (builder.template != null) { if (builder.label == null) { builder.label = Tenor.of(builder.template.getPeriodToFar()).toString(); } if (builder.fxRateId == null) { builder.fxRateId = FxRateId.of(builder.template.getCurrencyPair()); } else { ArgChecker.isTrue( builder.fxRateId.getPair().toConventional().equals(builder.template.getCurrencyPair().toConventional()), "FxRateId currency pair '{}' must match that of the template '{}'", builder.fxRateId.getPair(), builder.template.getCurrencyPair()); } } }
public void test_serialization() { FxRateId test = FxRateId.of(GBP, USD); assertSerialization(test); }
public void test_of_currencies() { FxRateId test = FxRateId.of(GBP, USD); FxRateId inverse = FxRateId.of(USD, GBP); assertEquals(test.getPair(), PAIR); assertEquals(inverse.getPair(), PAIR); assertEquals(test.getObservableSource(), ObservableSource.NONE); assertEquals(test.getMarketDataType(), FxRate.class); }
/** * Obtains an instance representing the FX rate for a currency pair. * * @param currencyPair a currency pair * @return an ID for the FX rate for the currency pair */ public static FxRateId of(CurrencyPair currencyPair) { return new FxRateId(currencyPair, ObservableSource.NONE); }
Optional<FxRate> rate = marketData.findValue(FxRateId.of(baseCurrency, counterCurrency, fxRatesSource)); if (rate.isPresent()) { return rate.get().fxRate(baseCurrency, counterCurrency); Optional<FxRate> rateBase1 = marketData.findValue(FxRateId.of(baseCurrency, triangulationCurrency, fxRatesSource)); Optional<FxRate> rateBase2 = marketData.findValue(FxRateId.of(triangulationCurrency, counterCurrency, fxRatesSource)); if (rateBase1.isPresent() && rateBase2.isPresent()) { return rateBase1.get().crossRate(rateBase2.get()).fxRate(baseCurrency, counterCurrency); Optional<FxRate> rateBase1 = marketData.findValue(FxRateId.of(baseCurrency, triangularBaseCcy, fxRatesSource)); Optional<FxRate> rateBase2 = marketData.findValue(FxRateId.of(triangularBaseCcy, counterCurrency, fxRatesSource)); if (rateBase1.isPresent() && rateBase2.isPresent()) { return rateBase1.get().crossRate(rateBase2.get()).fxRate(baseCurrency, counterCurrency); Optional<FxRate> rateCounter1 = marketData.findValue(FxRateId.of(baseCurrency, triangularCounterCcy, fxRatesSource)); Optional<FxRate> rateCounter2 = marketData.findValue(FxRateId.of(triangularCounterCcy, counterCurrency, fxRatesSource)); if (rateCounter1.isPresent() && rateCounter2.isPresent()) { return rateCounter1.get().crossRate(rateCounter2.get()).fxRate(baseCurrency, counterCurrency); marketData.findValue(FxRateId.of(triangularBaseCcy, triangularCounterCcy, fxRatesSource)); if (rateTriangular2.isPresent()) { return rateBase1.get().crossRate(rateTriangular2.get()).crossRate(rateCounter2.get())
public void test_of_currenciesAndSource() { FxRateId test = FxRateId.of(GBP, USD, OBS_SOURCE); FxRateId inverse = FxRateId.of(USD, GBP); assertEquals(test.getPair(), PAIR); assertEquals(inverse.getPair(), PAIR); assertEquals(test.getObservableSource(), OBS_SOURCE); assertEquals(test.getMarketDataType(), FxRate.class); }
/** * Obtains an instance representing the FX rate for a currency pair, specifying the source. * * @param base the base currency of the pair * @param counter the counter currency of the pair * @param observableSource the source of the observable market data used to create the rate * @return an ID for the FX rate for the currency pair */ public static FxRateId of(Currency base, Currency counter, ObservableSource observableSource) { return new FxRateId(CurrencyPair.of(base, counter), observableSource); }
private static MarketDataFxRateProvider provider2() { Map<FxRateId, FxRate> marketDataMap = ImmutableMap.of(FxRateId.of(EUR, USD), FxRate.of(EUR, USD, EUR_USD), FxRateId.of(EUR, BEF), FxRate.of(EUR, BEF, EUR_BEF), FxRateId.of(GBP, USD), FxRate.of(GBP, USD, GBP_USD)); MarketData marketData = ImmutableMarketData.of(VAL_DATE, marketDataMap); return MarketDataFxRateProvider.of(marketData, ObservableSource.NONE, GBP); }
public void test_of_pair() { FxRateId test = FxRateId.of(PAIR); FxRateId inverse = FxRateId.of(INVERSE); assertEquals(test.getPair(), PAIR); assertEquals(inverse.getPair(), PAIR); assertEquals(test.getObservableSource(), ObservableSource.NONE); assertEquals(test.getMarketDataType(), FxRate.class); assertEquals(test.toString(), "FxRateId:GBP/USD"); }
/** * Obtains an instance representing the FX rate for a currency pair. * * @param base the base currency of the pair * @param counter the counter currency of the pair * @return an ID for the FX rate for the currency pair */ public static FxRateId of(Currency base, Currency counter) { return new FxRateId(CurrencyPair.of(base, counter), ObservableSource.NONE); }
private static void parseSingle( Predicate<LocalDate> datePredicate, CharSource resource, Map<LocalDate, ImmutableMap.Builder<FxRateId, FxRate>> mutableMap) { try { CsvFile csv = CsvFile.of(resource, true); for (CsvRow row : csv.rows()) { String dateText = row.getField(DATE_FIELD); LocalDate date = LoaderUtils.parseDate(dateText); if (datePredicate.test(date)) { String currencyPairStr = row.getField(CURRENCY_PAIR_FIELD); String valueStr = row.getField(VALUE_FIELD); CurrencyPair currencyPair = CurrencyPair.parse(currencyPairStr); double value = Double.valueOf(valueStr); ImmutableMap.Builder<FxRateId, FxRate> builderForDate = mutableMap.computeIfAbsent(date, k -> ImmutableMap.builder()); builderForDate.put(FxRateId.of(currencyPair), FxRate.of(currencyPair, value)); } } } catch (RuntimeException ex) { throw new IllegalArgumentException( Messages.format("Error processing resource as CSV file: {}", resource), ex); } }
public void cross_double_triangle() { Map<FxRateId, FxRate> marketDataMap = ImmutableMap.of(FxRateId.of(EUR, USD), FxRate.of(EUR, USD, EUR_USD), FxRateId.of(EUR, BEF), FxRate.of(EUR, BEF, EUR_BEF), FxRateId.of(GBP, USD), FxRate.of(GBP, USD, GBP_USD)); MarketData marketData = ImmutableMarketData.of(VAL_DATE, marketDataMap); FxRateProvider fx = MarketDataFxRateProvider.of(marketData); assertEquals(fx.fxRate(GBP, BEF), GBP_USD * EUR_BEF / EUR_USD, 1.0E-10); assertEquals(fx.fxRate(BEF, GBP), EUR_USD / EUR_BEF / GBP_USD, 1.0E-10); }
public void cross_counter() { Map<FxRateId, FxRate> marketDataMap = ImmutableMap.of(FxRateId.of(EUR, USD), FxRate.of(EUR, USD, EUR_USD), FxRateId.of(EUR, BEF), FxRate.of(EUR, BEF, EUR_BEF)); MarketData marketData = ImmutableMarketData.of(VAL_DATE, marketDataMap); FxRateProvider fx = MarketDataFxRateProvider.of(marketData); assertEquals(fx.fxRate(USD, BEF), EUR_BEF / EUR_USD, 1.0E-10); assertEquals(fx.fxRate(BEF, USD), EUR_USD / EUR_BEF, 1.0E-10); }
public void cross_base() { Map<FxRateId, FxRate> marketDataMap = ImmutableMap.of(FxRateId.of(EUR, USD), FxRate.of(EUR, USD, EUR_USD), FxRateId.of(GBP, USD), FxRate.of(GBP, USD, GBP_USD)); MarketData marketData = ImmutableMarketData.of(VAL_DATE, marketDataMap); FxRateProvider fx = MarketDataFxRateProvider.of(marketData); assertEquals(fx.fxRate(GBP, EUR), GBP_USD / EUR_USD, 1.0E-10); assertEquals(fx.fxRate(EUR, GBP), EUR_USD / GBP_USD, 1.0E-10); }
private static MarketDataFxRateProvider provider() { Map<FxRateId, FxRate> marketDataMap = ImmutableMap.of(FxRateId.of(EUR, USD, OBS_SOURCE), FxRate.of(EUR, USD, EUR_USD)); MarketData marketData = ImmutableMarketData.of(VAL_DATE, marketDataMap); return MarketDataFxRateProvider.of(marketData, OBS_SOURCE, GBP); }