I am looking for historical FX data. During the course of my research, I've found that various free providers don't seem to agree on the numbers.

For example, searching for USDGBP rates on Friday 30th December 2016,

investing.com gives:

  • Price: 0.8105
  • Open: 0.8155
  • High: 0.8168
  • Low: 0.8073

exchangerates.org gives:

  • Close: 0.81
  • Best: 0.81503
  • Worst: 0.80725

finance.yahoo.com gives:

  • Open: 0.8140
  • High: 0.8150
  • Low: 0.8073
  • Close: 0.8138

These numbers are similar yet different. I assume this is because the various providers are pulling data from different sources. Tourists spending on credit cards abroad will get their card scheme's spot rates outside of business hours. A card statement will show different exchange rates for transactions that are minutes apart, even on a Sunday.

I realise that forex trading is a global affair, when traders have gone home in London the ones in New York are still at work. The highs, lows and closing prices might depend on the location of the trading entity providing the data.

Comparing the yahoo and exchangerates.org data, the high and low prices are very close, the difference is less than 4 significant digits. This suggests the data is from the same session and the same time zone. Yet the Closing price is almost 0.5% out, a difference about 100 time greater than the high. Why is this? Why don't the two providers agree on this data point? Note that because the high & low are so close, I'm assuming the closing price is evaluated in the same way, they either all include spread or all ignore it, etc.

Suppose I have a portfolio containing assets priced in USD and GBP and I'd like to provide end of day valuations in a single currency. If there are assets worth 1 million being converted (sadly this isn't the case for me), the error could correspond to a difference of 4000 USD or GBP depending on which data source I pick. This is a non-trivial difference. Given that the sources I have listed above could all be wrong, how can I find out what the true historic prices are?

  • In general, free data providers are worth the money you spend on them. If you were actually trying to value a portfolio, you'd subscribe to a service that provided the data along with reams of metadata documentation that defined exactly what they mean by, say, closing price (bid vs. ask, last trade on X exchange before close of business, etc.). Free providers are wonderful if you're trying to get an approximate answer. Not so wonderful if you're trying to build a commercial service that needs to be accurate to the penny. Feb 20, 2022 at 23:57
  • Thank you for taking the time to comment on my question. I agree that you get what you pay for. If I were to look at historic share prices, the different (free) providers all seem to agree on high, low and closing prices. Suppose I were to pay for two different data providers, I'd get plenty of documentation, sure, but I suspect I'd still get slightly different data. I'm still genuinely curious to know why different providers supply different data and what the source of truth is. Feb 21, 2022 at 19:59
  • 1
    By the way, the paid for providers tend to also offer the data I've listed for free. They charge for richer data sets such as up to the second quote prices, very high rate limits on api calls and so on. I gave examples where you didn't have to sign up for a free developer account so that people answering my question could inspect the data themselves. Feb 21, 2022 at 20:01

1 Answer 1


What rates are you actually looking for? Bid? Ask? Midpoint? What time of day? "Close of Business", or midnight? What time zone?

FX markets are basically always open. You are recognizing this in the framing of your question, but perhaps being a bit evasive in acknowledging that it is the core root of the problem you are seeing.

There is not really any such thing as a singular 'fx exchange', there are various methods of aligning buyers and sellers for currency conversions, at least for most currency pairs. What is critical is that you maintain consistency in your data set, and compare apples to apples, going deep into the T&C's of a particular data feed and acknowledge in your research specifically what that data set is providing. In many cases, what you will find is probably some degree of averaging according to different methods, perhaps in a way not 100% published.

These issues actually have significant financial impact. Over the past decade, there have been some significant legal cases around collusion for fx rate listings (see example here: https://www.law.ox.ac.uk/business-law-blog/blog/2021/12/european-commission-fines-five-global-banks-eu344-million-collusion). Because contracts will often define particular data points in the future for resolution, on any given day, what is considered the "closing fx rate" will make someone somewhere in the world a winner, and someone a loser.

Basically, the chance for manipulation could work something like the following:

(1) Assume you were a bank, and had a pending contract to buy $100M USD at the relevant "closing GBP price" on a future day. The contract would contain some type of reference to how that data point is defined. For simplicity let's assume it is simply "the final trade made on such and such exchange, at exactly 4:29:59.99 pm, GMT".

(2) Now let's assume you happened to have an excess $10M USD sitting in your drawer on that future day, which you need to get rid of anyway, to reduce the risk of your exposure to USD.

(3) You look at your watch at 4:29:59.98 PM. GBP is trading at 0.74 -> 1 USD. You decide it would be a jolly good day for an extra bonus on your net commission for the year.

(4) You place the order to sell that excess $10M USD noted in step 2, and instead of extracting the maximum 7.4M GBP possible from the market, you 'foolishly' sell it for only 7.3, effectively losing 100k GBP.

(5) The clock strikes 4:29:59.99 PM - and the reference rate for the day is now listed as 0.73 GBP. Your contract in step 1 is calculated - great news, you bought your 100M USD for just 73M GBP, which saves you 1M GBP compared to what the market rate would have been, before your 'foolish' sale in step 4.

(6) Your net gain between step 4 & 5 is 900k GBP!

Normally, artificially buying/selling at worse rate than the market doesn't net you any gain, because if you bought stock 'more cheaply than possible', you would also have 'sold it more cheaply than possible'. In this case, however, because the large initial contract's reference rate was changed by a much smaller transaction, double-dealing allows you to actually create a net gain for yourself, particularly if you are able to collude with other parties. See the above link for more details on a particular set of instances.

As a result of the above, some parties have decided to remove themselves from being usable as a reference rate, to prevent possible manipulation, or the appearance of manipulation. As an example, after something like 2018, the Bank of Canada provides historical information only on the average rate for each day, and specifically goes a step further to indicate that this is for indicative purposes only:

"The Bank of Canada does not guarantee the accuracy or completeness of these exchange rates. They are indicative rates only, derived from aggregated price quotes from financial institutions. They do not necessarily reflect the rates at which actual market transactions have been or could be conducted, and they may differ from the rates provided by financial institutions and other market sources."

Where other entities provide specific rates for the purpose of financial benchmarking, it typically involves some type of averaging weighted to noon / close of business in a particular timezone. This is done so that manipulation of the type outlined above would become too costly to be effective [if you averaged the last 10 minutes of GBPUSD trading, you would incorporate possibly billions of dollars of transactions, which would be too expensive to realistically manipulate for purposes of setting a reference rate on a given contract]. See example here, from Bloomberg on their 'BFIX' rate methodology https://data.bloomberglp.com/notices/sites/3/2016/04/bfix_methodology.pdf

So, why is the data different?

(1) Difference in timezones; (2) Difference in specific data point requested [ask v buy v midpoint; noon rate vs close of business] (3) Difference in methodology [averaging trades 5 minutes before the noted time, final trade, listed-governmental rate for restricted currencies...]; (4) Purposeful obfuscation [like the Bank of Canada, attempting to avoid being caught in the middle of a collusion dispute].

What is the one source of the truth?

That depends entirely on how you define what you are looking for. Consistency + acknowledgment of your method is what matters most. For tax impact, look to your tax jurisdiction to see if they have a preferred / required rate table. For 3rd party contracts, as long as the data is clearly defined, many approaches will be acceptable. For personal naval gazing... none of this matters too much.

  • 1
    Thank you for taking the time to write such a comprehensive answer. I like the manipulation example you give, your answer to my first question does list possibilities I had not considered and your answer on the source of truth confirms what I suspected Mar 1, 2022 at 13:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .