Sources and Conventions for End-of-Day FX Prices
Summary
The document collects possible sources for historical end-of-day foreign exchange prices, including broker quote archives, a free exchange-rate service, central-bank publications, and a commercial historical-price provider. It emphasizes that a daily FX close is not self-defining: because the market trades across time zones and centers, users should specify the reference time, such as the New York close. A cited provider example uses a particular daily delivery time, while another answer gives a historical gold-dollar quote as an illustration.
For rates unavailable as a direct currency pair, the document explains that cross rates can be derived from two currencies quoted against a common major currency. It describes central-bank data as a potentially reliable source but notes that each bank may publish only rates against its own currency. Some sources require registration or have terms of use that users should check. The suggestions are anecdotal rather than a comparative assessment of accuracy, coverage, licensing, or continuity, and the quoted historical value depends on the provider and its end-of-day convention.
Key ideas
- Define the end-of-day cutoff because FX trades across global centers and time zones.
- Historical quotes may be available from brokers, central banks, exchange-rate services, or commercial providers.
- A cross rate can be calculated from two exchange rates that share a common quoted currency.
- Central banks may publish rates only against their own currency, requiring cross-rate calculation for other pairs.
- Check source coverage, terms of use, and the exact price convention before relying on a dataset.
Tags
Full text
# Where can I retreive the end of day fx prices?
# Where can I retreive the end of day fx prices?
I'm developing a reporting tool and I need a data source for end of day price data. For example, it should give me the XAUUSD price at a specific date, say 2019-12-05. Do you know such a data source?
Thanks
## Answer by mde (score 1)
https://quant.stackexchange.com/a/51349
Some brokerage does provide such info. For instance FXCM or DukasCopy (I believe some others too) provide access to it's historical quotes. See for example here https://www.dukascopy.com/swiss/english/marketwatch/historical/.
## Answer by Enrico Schumann (score 1)
https://quant.stackexchange.com/a/51369
You may want to check out W. Antweiler's Pacifix Exchange Rate Service. It's free, but you should check whether your application is in line with its terms of use. Some time ago I wrote a small R package for downloading data from the site, but I have not used the package for years.
## Answer by Martin (score 1)
https://quant.stackexchange.com/a/53122
From experience, the most reliable data sources are from central banks. The problem is that they often only report the exchange rate to their own currency. For example, the European Central Bank reports every currency against the EUR (ECB), the US Fed against the USD (Fed) and the Swiss national Bank all currencies against the CHF (SNB).
But it's easy to compute the rates from any pair given you have official rates against a major currency (EUR, USD, CHF etc.)
$$ \frac{C_1}{C_2} = \frac{1}{\frac{C_3}{C_1}} * \frac{C_3}{C_2} $$
$C_1$ being your first currency (e.g. AUD), $C_2$ the second (USD) and $C_3$ a major currency you got common exchange rate information for (e.g. EUR).
Data from the ECB (end of day exchange rates against EUR) is also available for free on Quandl. There's also a API for which you need to register to get a free API key.
In R this is how I calculate:
```
library(tidyverse)
library(Quandl)
Quandl.api_key(KEY) # get your personal API key on Quandl.com
get_exchange <- function(currency1, currency2) {
if (currency1 == "EUR") {
out <- Quandl(paste0("ECB/", currency1, currency2))
return(out %>% rename(!!paste0(currency1, currency2) := 2))
}
if (currency2 == "EUR") {
out <- Quandl(paste0("ECB/", currency1, currency2))
out <- out %>%
mutate(Value = 1/Value)
return(out %>% rename(!!paste0(currency2, currency1) := 2))
}
EURcur1 <- Quandl(paste0("ECB/EUR", currency1))
EURcur2 <- Quandl(paste0("ECB/EUR", currency2))
currencies <- left_join(EURcur1 %>% rename(EURcur1 = 2),
EURcur2 %>% rename(EURcur2 = 2),
by = "Date")
currencies %>%
mutate(!!paste0(currency1, currency2) := 1/EURcur1 * EURcur2) %>%
select(-EURcur1, -EURcur2)
}
AUDUSD <- get_exchange("AUD", "USD")
AUDUSD %>% as_tibble()
```
## Answer by nbbo2 (score 0)
https://quant.stackexchange.com/a/51368
End of day is tricky in Foreign Exchange, which trades around the world in multiple centers (multiple time zones). By 'end of day price data' I assume you mean the 5pm New York price. (Could also be London, where XAU is heavily traded, etc.).
My favorite is https://barchart.com/forex/quotes/%5EXAUUSD/price-history/historical
I signed up to receive the data every day in an Email that is sent to me from Barchart.Com at 5:45pm NY Time every day. It is convenient and it is free.
(For 2019-12-05, the date that you mentioned, they give a price of 1,475.64).Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.