Class FxMatrix
- java.lang.Object
-
- com.opengamma.strata.basics.currency.FxMatrix
-
- All Implemented Interfaces:
FxRateProvider
,Serializable
,org.joda.beans.Bean
,org.joda.beans.ImmutableBean
public final class FxMatrix extends Object implements FxRateProvider, org.joda.beans.ImmutableBean, Serializable
A matrix of foreign exchange rates.This provides a matrix of foreign exchange rates, such that the rate can be queried for any available pair. For example, if the matrix contains the currencies 'USD', 'EUR' and 'GBP', then six rates can be queried, 'EUR/USD', 'GBP/USD', 'EUR/GBP' and the three inverse rates.
This class is immutable and thread-safe.
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FxMatrix.Meta
The meta-bean forFxMatrix
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static FxMatrixBuilder
builder()
Creates a builder that can be used to build instances ofFxMatrix
.CurrencyAmount
convert(CurrencyAmount amount, Currency targetCurrency)
Converts aCurrencyAmount
into an amount in the specified currency using the rates in this matrix.CurrencyAmount
convert(MultiCurrencyAmount amount, Currency targetCurrency)
Converts aMultipleCurrencyAmount
into an amount in the specified currency using the rates in this matrix.static FxMatrix
empty()
Obtains an empty FX matrix.static Collector<? super Map.Entry<CurrencyPair,Double>,FxMatrixBuilder,FxMatrix>
entriesToFxMatrix()
Creates aCollector
that allows aMap.Entry
of currency pair to rate to be streamed and collected into a newFxMatrix
.boolean
equals(Object obj)
double
fxRate(Currency baseCurrency, Currency counterCurrency)
Gets the FX rate for the specified currency pair.ImmutableSet<Currency>
getCurrencies()
Returns the set of currencies held within this matrix.DoubleMatrix
getRates()
Gets the matrix with all the exchange rates.int
hashCode()
FxMatrix
merge(FxMatrix other)
Merges the entries from the other matrix into this one.static FxMatrix.Meta
meta()
The meta-bean forFxMatrix
.FxMatrix.Meta
metaBean()
static FxMatrix
of(CurrencyPair currencyPair, double rate)
Obtains an instance containing a single FX rate.static FxMatrix
of(Currency ccy1, Currency ccy2, double rate)
Obtains an instance containing a single FX rate.static Collector<? super Pair<CurrencyPair,Double>,FxMatrixBuilder,FxMatrix>
pairsToFxMatrix()
Creates aCollector
that allows a collection of pairs each containing a currency pair and a rate to be streamed and collected into a newFxMatrix
.FxMatrixBuilder
toBuilder()
Creates a new builder using the data from this matrix to create a set of initial entries.String
toString()
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.opengamma.strata.basics.currency.FxRateProvider
convert, convert, fxRate
-
-
-
-
Method Detail
-
empty
public static FxMatrix empty()
Obtains an empty FX matrix.The result contains no currencies or rates.
- Returns:
- an empty matrix
-
of
public static FxMatrix of(CurrencyPair currencyPair, double rate)
Obtains an instance containing a single FX rate.This is most likely to be used in testing.
An invocation of the method with
FxMatrix.of(CurrencyPair.of(GBP, USD), 1.6)
indicates that 1 pound sterling is worth 1.6 US dollars. The matrix can also be queried for the reverse rate, from USD to GBP.- Parameters:
currencyPair
- the currency pair to be addedrate
- the FX rate between the base currency of the pair and the counter currency. The rate indicates the value of one unit of the base currency in terms of the counter currency.- Returns:
- a matrix containing the single FX rate
-
of
public static FxMatrix of(Currency ccy1, Currency ccy2, double rate)
Obtains an instance containing a single FX rate.This is most likely to be used in testing.
An invocation of the method with
FxMatrix.of(GBP, USD, 1.6)
indicates that 1 pound sterling is worth 1.6 US dollars. The matrix can also be queried for the reverse rate, from USD to GBP.- Parameters:
ccy1
- the first currency of the pairccy2
- the second currency of the pairrate
- the FX rate between the first currency and the second currency. The rate indicates the value of one unit of the first currency in terms of the second currency.- Returns:
- a matrix containing the single FX rate
-
builder
public static FxMatrixBuilder builder()
Creates a builder that can be used to build instances ofFxMatrix
.- Returns:
- a new builder
-
entriesToFxMatrix
public static Collector<? super Map.Entry<CurrencyPair,Double>,FxMatrixBuilder,FxMatrix> entriesToFxMatrix()
Creates aCollector
that allows aMap.Entry
of currency pair to rate to be streamed and collected into a newFxMatrix
.- Returns:
- a collector for creating an
FxMatrix
from a stream
-
pairsToFxMatrix
public static Collector<? super Pair<CurrencyPair,Double>,FxMatrixBuilder,FxMatrix> pairsToFxMatrix()
Creates aCollector
that allows a collection of pairs each containing a currency pair and a rate to be streamed and collected into a newFxMatrix
.- Returns:
- a collector for creating an
FxMatrix
from a stream
-
getCurrencies
public ImmutableSet<Currency> getCurrencies()
Returns the set of currencies held within this matrix.- Returns:
- the currencies in this matrix
-
fxRate
public double fxRate(Currency baseCurrency, Currency counterCurrency)
Gets the FX rate for the specified currency pair.The rate returned is the rate from the base currency to the counter currency as defined by this formula:
(1 * baseCurrency = fxRate * counterCurrency)
.- Specified by:
fxRate
in interfaceFxRateProvider
- Parameters:
baseCurrency
- the base currency, to convert fromcounterCurrency
- the counter currency, to convert to- Returns:
- the FX rate for the currency pair
- Throws:
IllegalArgumentException
- if no FX rate could be found
-
convert
public CurrencyAmount convert(CurrencyAmount amount, Currency targetCurrency)
Converts aCurrencyAmount
into an amount in the specified currency using the rates in this matrix.- Parameters:
amount
- theCurrencyAmount
to be convertedtargetCurrency
- the currency to convert theCurrencyAmount
to- Returns:
- the amount converted to the requested currency
-
convert
public CurrencyAmount convert(MultiCurrencyAmount amount, Currency targetCurrency)
Converts aMultipleCurrencyAmount
into an amount in the specified currency using the rates in this matrix.- Parameters:
amount
- theMultipleCurrencyAmount
to be convertedtargetCurrency
- the currency to convert all entries to- Returns:
- the total amount in the requested currency
-
merge
public FxMatrix merge(FxMatrix other)
Merges the entries from the other matrix into this one.The other matrix should have at least one currency in common with this one. The additional currencies from the other matrix are added one by one and the exchange rate data created is coherent with some data in this matrix.
Note that if the other matrix has more than one currency in common with this one, and the rates for pairs of those currencies are different to the equivalents in this matrix, then the rates between the additional currencies is this matrix will differ from those in the original.
- Parameters:
other
- the matrix to be merged into this one- Returns:
- a new matrix containing the rates from this matrix plus any rates for additional currencies from the other matrix
-
toBuilder
public FxMatrixBuilder toBuilder()
Creates a new builder using the data from this matrix to create a set of initial entries.- Returns:
- a new builder containing the data from this matrix
-
meta
public static FxMatrix.Meta meta()
The meta-bean forFxMatrix
.- Returns:
- the meta-bean, not null
-
metaBean
public FxMatrix.Meta metaBean()
- Specified by:
metaBean
in interfaceorg.joda.beans.Bean
-
getRates
public DoubleMatrix getRates()
Gets the matrix with all the exchange rates. Each row represents the rates required to convert a unit of particular currency to all other currencies in the matrix.If currencies c1 and c2 are assigned indexes i and j respectively in the
currencies
map, then the entry [i][j] is such that 1 unit of currency c1 is worthrates[i][j]
units of currency c2.If
currencies.get(EUR)
= 0 andcurrencies.get(USD)
= 1, then the elementrates[0][1]
is likely to be around 1.40 andrates[1][0]
around 0.7142. The raterates[1][0]
will be computed from fxRate[0][1] when the object is constructed by the builder. All the element of the matrix are meaningful and coherent.- Returns:
- the value of the property, not null
-
-