Daniel Green

Cointegration and Mean Reversion: Can GBP/USD and EUR/USD Be Pair Traded?

Published at: Wed Dec 10 2025

Summary

In this post, we explore whether the Forex pairs GBP/USD and EUR/USD can be reliably pair traded. We begin by examining the concept of cointegration, a statistical relationship indicating a long-term equilibrium between two non-stationary assets. Our initial analysis, spanning 2014-2025, reveals that the spread between these pairs, while visually mean-reverting at times, fails the Augmented Dickey-Fuller (ADF) test for stationarity, making it unsuitable for a traditional pairs trading strategy.

However, recognizing significant macroeconomic shifts around 2016 (such as Brexit and European Central Bank actions), we hypothesized a regime shift. Re-evaluating the data from 2017-2025 shows a clearer cointegrating relationship and, crucially, a statistically stationary spread according to the ADF test. This positive result led us to a brief back test using a basic Bollinger Bands strategy. Despite generating a small profit, the strategy's high risk and low returns, as evidenced by a negative Sharpe ratio, ultimately lead us to conclude that it is not a deployable strategy for these specific pairs, even when ignoring trading fees and frequency constraints.

What is Pair Trading?

Pair trading is the idea that two correlated assets will move together, and if there is a spread between them, then they will revert back to a mean value, which can be used as a trading signal.

An Image

In this image, you can observe that if you can at least assume the series is mean reverting, then you know that if the series, has diverged, then it must converge again. So you can buy one symbol and sell the other as one will be too high in price and the other two low, and they will both move to reduce the spread between them, so you can then close your positions once the spread is close to the mean again. As you buy one symbol and sell the other, you have no net money in the market, as you can use the credit from selling one symbol to buy the other. Obviously, there is still risk if the two symbols do not revert to their mean, as then the trades may need to be ended at a loss.

A note on data & pre-processing

For the data, I decided to use https://www.histdata.com/ as the source and, and then re-sample the data from minutely data to hourly. Unfortunately, this sources data has no data on volume, but for our use case, the data should be sufficient. I have used data from 2014 to 2025, my decision on the range of data will be explained later. If you want to replicate this implementation, my code and pre-processed hourly price data is stored in the GitHub repository that goes alongside this post: https://github.com/dangreen07/eurusd-gbpusd-cointegration

How do we test for Pair Trading?

To test whether we can pair trade symbols, we will have to cointegrate the symbols. You may be wondering what that means, but to properly explain cointegration I am going to have to define a few terms. Time series like EUR/USD and GBP/USD often have means and variances that change over time, exhibiting what we call non-stationarity. For a pairs trading strategy to be viable, the spread between these assets must be stationary, meaning its statistical properties (like mean and variance) remain constant over time, and it tends to revert to a consistent average. This property, known as mean reversion, is key. You can see the difference between stationary and non-stationary time series in the images below.

An ImageAn Image

So the reason we want a stationary time series is that predicting the future action of a stationary time series with a known mean is quite simple and leads to a profitable trading strategy.

Now you understand why we want a stationary time series and what one is, you can now see that both the EUR/USD and GBP/USD are non-stationary, which you can see by looking at the data of the two symbols from 2014 to 2025 below:

An ImageAn Image

Cointegration allows you to take a combination of the two time series and produce a stationary time series. To actually test whether the two symbols can be cointegrated, we can use an approach called the Engle-Granger procedure. This approach starts by getting the two sets of data and using Ordinary Least Squares to produce a regression model, then calculating the difference between the actual values vs the predicted values from the model. These residuals will then be tested with a null hypothesis for a unit root (meaning they are non-stationary), so if we reject the hypothesis then they are stationary. If the residuals are stationary then we can potentially use it in a pair trading strategy.

Testing for Cointegration

Before testing for cointegration, I do a quick check of the correlation of the data to check whether they generally move in the same direction, as this is a quick check before doing the full test. If the correlation is low, then we can say that they aren’t likely to be able to be cointegrated. I plot the data against each other below, and get the r value of 0.752, indicating a reasonable positive correlation. Now we know that they are reasonably correlated, we can test for cointegration to develop a robust pairs trading strategy.

An Image

I then log the prices, and use Ordinary Least Squares to fit a model to the data. Next residuals are calculated using the following formula:

R=log(EUR/USD)(α+βlog(GBP/USD)R = \log(EUR/USD) - (\alpha + \beta \log(GBP/USD)

Where α\alpha is the intercept and β\beta is the hedge ratio.

I then calculate the z-score for the residuals data using this formula:

ZScore=RRˉσRZ_{Score} = \frac{R - \bar{R}}{\sigma_R}

You should see a stationary series if this can be cointegrated. I have put lines on the graph at 1 and 2 standard deviations.

An Image

Now this data does look mean reverting at first site, except in that period of 2015-2016, which was most likely because of the events in Greece, and the actions of the European Central Bank in their buying of bonds, causing the price of euro to fall dramatically at a faster rate compared with the pound. Here’s an article from 2015 on this: https://www.bbc.co.uk/news/business-31833200

Running an augmented Dickey-Fuller test on these residual data, gives me the following result:

(np.float64(-2.5861093446733032),
np.float64(0.09590230312216153),
62,
66789,
{'1%': np.float64(-3.4304479135987456),
'10%': np.float64(-2.566793034362812),
'5%': np.float64(-2.8615832760395072)},
np.float64(-675030.413413591))

Where the first value is the test statistic, and each test statistic level is given with the corresponding percentage. As you can see, the test statistic is larger than the value for the 5% level so the null hypothesis cannot be rejected, meaning that the residuals data is non-stationary at the 5% level.

Based on this we can say that you can’t cointegrate the two time series, and therefore can’t pair trade them.

Is that it?

You may be thinking, well that’s a bit depressing. This is the outcome for most pairs you will test, if you end up testing different pairs though, ensure that there is some economic reason for it. You don’t want to just stumble on coincidence, so come up with some explanation for why you are doing something before brute force testing everything and finding that you can pair trade some random symbols.

One thing that we can do to help ourselves a bit is by looking for regime shifts, which you can quite clearly see that there was a regime shift between 2016 and 2017. But after this point the data is seemingly stationary, so let’s go test that hypothesis.

Testing again for cointegration

To see whether we’ve gone mad, let’s run a simple correlation test once again to see if we get a better correlation in the period of 2017-2025, which leads to a graph that has data with a more consistent variance by eye. This also leads to an r value of 0.870, which is a better correlation than in the previous period; so far this is looking good.

An Image

Fitting and Plotting Residuals

Fitting the data was once again done using Ordinary Least Squares, and then residuals calculated again and the z-scores calculated. The plot of this data is shown below:

An Image

This plot looks much better than the previous one, with only minor extreme events of 3 standard deviations instead of large periods of it; it looks promising.

Testing for stationarity

Now for the augmented Dickey-Fuller test, which gives this result:

(np.float64(-3.908966124653018),
np.float64(0.0019698433436324174),
57,
48257,
{'1%': np.float64(-3.4304855170831177),
'10%': np.float64(-2.5668018805190784),
'5%': np.float64(-2.8615998957199116)},
np.float64(-479416.41889091954))

We can immediately see that this test gives a rejection of the null hypothesis at both the 5% and the 1% level, meaning that is highly probable that this data is stationary, so we could base a strategy off of this.

Back testing the Pairs Trading Strategy

Back testing this strategy with a basic Bollinger bands, entry at a certain z-score and exit at a lower z-score, then optimizing; resulted in a Sharpe ratio of -0.70 and the following equity curve and drawdown graph:

An Image

So this strategy does generate a profit of about 1.14%, but sadly does not have a good Sharpe ratio, even after optimization. So this is not a strategy that I would deploy.

Conclusion

So, what have we learned from our journey into the world of GBP/USD and EUR/USD pair trading? The initial answer to "Can these pairs be traded?" was a resounding 'no' when looking at the full sample. The lack of overall spread stationarity meant any apparent mean reversion was likely just a fluke.

However, by critically analysing the data and hypothesizing a regime shift post-2016, we found statistical evidence of cointegration and stationary (mean-reverting) in the spread data.

But even with a statistically sound mean-reverting spread, our basic back test painted a practical picture: the strategy yielded a modest 1.14% profit but suffered from a deeply negative Sharpe ratio of -0.70. This tells us that while the spread does revert to its mean, the signals are either too weak, too slow, or too frequently overshadowed by adverse movements to generate a favourable risk-adjusted return. In essence, the risk taken far outweighs the reward.

Therefore, for EUR/USD and GBP/USD, while you can find periods where they are cointegrated and the spread is mean-reverting, the practical implications for a tradable strategy (even one ignoring fees for simplicity) are currently unfavourable. Sometimes, the most profitable move is to simply let your money stay in the bank!