How much does the exchange rate you pick change your capital gain?
HMRC's manual says the rate is the one in force on the day, and then says HMRC does not prescribe which reference point to use. So what is that choice worth? Over 139 months and 17,550 paired observations, the typical gap is 1.26%. The worst single day in the window is 16.53%.
Which rate, and why nobody agrees
A disposal in dollars has to be turned into pounds before it can be a gain. What nobody agrees on is which dollar rate. Ask on a tax forum and you will get the monthly rate, the daily rate, and someone insisting HMRC "requires" whichever one they used last year. The threads do not resolve, because the manual does not resolve them.
What it says, in CG78310:
"the measure of the consideration is the sterling worth, at the date of the acquisition or disposal, of what is given or received" HMRC Capital Gains Manual, CG78310
That is the day. Three paragraphs later, after citing Bentley v Pike [1981] 53TC590 and Capcount Trading v Evans [1992] 65TC545 for the proposition that a foreign amount "must be converted into its sterling value at the time the amount is incurred/received", the same page says this:
"HMRC does not prescribe what reference point should be used for the exchange rate. It is, however, expected that a reasonable and consistent method is used." HMRC Capital Gains Manual, CG78310
So the choice is yours, and it is not free. This piece measures the size of it. It does not tell you which rate to pick: the sentence above is HMRC's answer, and it is the only one there is.
What the gap looks like, currency by currency
Show every currency as a table
| Currency | Months | Days compared | Typical gap (median) | 9 days in 10 below | Worst day | On which day |
|---|---|---|---|---|---|---|
| USD | 139 | 2925 | 1.32% | 3.33% | 12.18% | 6 July 2016 |
| EUR | 139 | 2925 | 0.98% | 2.99% | 10.99% | 23 March 2020 |
| JPY | 139 | 2925 | 1.69% | 4.45% | 16.53% | 27 June 2016 |
| CHF | 139 | 2925 | 1.25% | 3.39% | 13.34% | 25 February 2015 |
| CAD | 139 | 2925 | 1.18% | 3.20% | 11.02% | 7 July 2016 |
| AUD | 139 | 2925 | 1.26% | 3.78% | 12.77% | 8 July 2016 |
The median is the number to carry away: on a normal day in a normal month the rate you pick moves your sterling figure by roughly 1.3%. On a £10,000 disposal that is about £126 of proceeds. Real money, though rarely the difference between a return being right and being wrong.
The tail is where it matters. JPY on 27 June 2016: HMRC's rate for the month was 160.22, the spot rate that day was 133.7295. A disposal worth £10,000 at the spot rate is £8,346.62 at HMRC's, a difference of £1,653 on a single trade.
Month by month, over eleven years
Show every month where the dollar gap passed 5% (14 of 139)
| Month | HMRC USD rate | Days | Smallest gap | Largest gap |
|---|---|---|---|---|
| July 2016 | 1.4672 | 21 | -12.18% | -9.19% |
| March 2020 | 1.2952 | 22 | -11.27% | 1.22% |
| June 2016 | 1.4619 | 22 | -10.03% | 1.22% |
| September 2022 | 1.1821 | 21 | -9.10% | -0.99% |
| November 2022 | 1.1259 | 22 | -0.71% | 7.84% |
| April 2020 | 1.1763 | 20 | 4.18% | 7.23% |
| May 2018 | 1.4234 | 21 | -6.78% | -4.46% |
| January 2018 | 1.3406 | 22 | 0.81% | 6.68% |
| October 2016 | 1.2961 | 21 | -6.39% | -0.98% |
| May 2022 | 1.3048 | 21 | -6.35% | -3.07% |
| September 2017 | 1.2795 | 21 | 1.27% | 6.26% |
| April 2022 | 1.3212 | 19 | -5.85% | -0.73% |
| January 2016 | 1.5003 | 20 | -5.79% | -2.09% |
| April 2015 | 1.4686 | 20 | -0.30% | 5.23% |
Three months in detail
Show the three months as a table
| Month | HMRC rate | Spot range that month | Worst day's gap | On £10,000 |
|---|---|---|---|---|
| July 2016: the month after the EU referendum | 1.4672 | 1.2885 on 6 July 2016 | 12.18% | £1,218 |
| March 2020: the first Covid weeks | 1.2952 | 1.1492 on 23 March 2020 | 11.27% | £1,127 |
| September 2022: the September 2022 fiscal event | 1.1821 | 1.0745 on 28 September 2022 | 9.10% | £910 |
Why the gap is shaped like that
A monthly rate is not a monthly average. It is a single number fixed before the month begins, and two measurements show that without HMRC having to publish their method:
- For each month, is HMRC's rate closer to the mean of that month's daily rates, or to the mean of the month before? Across 828 consecutive month-pairs, the previous month wins 628 times (75.8%).
- Searching a 75-day window for the single daily observation numerically closest to HMRC's monthly rate: the median match sits 12 days before the first of the month, which is around the middle of the preceding month.
That is the whole mechanism. When the market is quiet a fortnight-old snapshot is a fine approximation. When it is not, after a referendum result or a fiscal event, the monthly rate is describing a world that has already gone, and it keeps describing it for up to six weeks.
HMRC used to issue mid-month corrections. Their own archive offers "weekly amendments to rates in XML format up to Tuesday 3 May 2016". The window in this analysis begins before that date and runs long after it.
What this cannot tell you
- One leg, not a whole gain. A gain has two conversions, an acquisition and a disposal, and the errors can cancel or compound. Everything above is the effect on one sterling figure. Modelling the gain would need an assumed holding period, and an assumption is not a measurement.
- Six currencies, not 140. HMRC publish around 140 currencies a month. These six are the ones with a Bank of England daily spot series covering the whole window. A currency with no daily series cannot be compared and is not guessed at.
- The Bank's series is a 4pm London rate, not the rate any broker gave you. It is used here as a public benchmark for what the market was doing that day, and for nothing else. TaxBull never values a trade with it. The calculator uses HMRC's monthly rate; a broker's rate and a market feed are both refused, which is the point of the rule.
- No annual average. HMRC also publish a yearly average rate. It is not compared here because the yearly file is a different series and pairing it properly needs its own piece.
Method
HMRC monthly rates were read from HMRC, through the same two-source chain this
calculator uses at runtime: the Online Trade Tariff monthly CSV
(trade-tariff.service.gov.uk/api/v2/exchange_rates/files/monthly_csv_YYYY-M.csv) from
January 2021, and HMRC's own XML archive
(hmrc.gov.uk/softwaredevelopers/rates/exrates-monthly-MMYY.XML) for
February 2015 to December 2020. Every XML
file's Period attribute was checked against the month requested before a single rate was
kept, because a wrong-month URL returns 200 with a complete, valid-looking file. Nothing was taken
from a mirror or any third party. All 139 months in the window resolved.
Daily rates are the Bank of England's Statistical Interactive Database spot
series: USD XUDLUSS, EUR XUDLERS, JPY XUDLJYS, CHF XUDLSFS, CAD XUDLCDS, AUD XUDLADS. Both series quote
units of foreign currency per £1, so no inversion was needed.
The gap for one business day is daily ÷ monthly − 1. Sterling for a
foreign amount is amount ÷ rate, so that factor is exactly the proportional difference between the
sterling figure at HMRC's rate and the sterling figure at the day's rate:
sterlingAtHmrc = sterlingAtSpot × (1 + gap). Medians and the 90th percentile use linear
interpolation between order statistics. A month is included only where both an HMRC rate and at least
five daily observations exist; USD 139, EUR 139, JPY 139, CHF 139, CAD 139, AUD 139 months
qualified. Nothing was excluded as an outlier.
The generator is scripts/fx-divergence.mjs in this repository, and
test/research-pages.test.mjs recomputes the figures above from its output on every run.
Data assembled 2026-09-21.
If you are converting a foreign trade yourself, the guide explains the mechanics and the calculator applies HMRC's monthly rate for the month of each leg, naming the rate it used on the report.