Entering text into the input field will update the search result below

Trading Performance Of An ETF Pair Strategy-Quantitative Trading In Python

Dec. 06, 2020 4:48 PM ETiShares MSCI Australia ETF (EWA), EWC
rvarb profile picture
rvarb's Blog
Please Note: Blog posts are not selected, edited or screened by Seeking Alpha editors.

Seeking Alpha Analyst Since 2013

Trader and blogger at


In a previous post, we presented statistical tests for the Australia/Canada country ETF pair. Specifically, we calculated the return correlation and performed cointegration tests using a training set consisted of 8 years of data. The high correlation and the fact that the pair spread passed 2 cointegration tests made this pair a good candidate for trading. In this follow-up post, we are going to implement a trading strategy using this pair in Python. We utilize the remaining 2 years out-of-sample data to generate trading signals and calculate strategy performance.

To generate trading signals, we calculate the z-score of the spread.

In statistics, the standard score is the number of standard deviations by which the value of a raw score (i.e., an observed value or data point) is above or below the mean value of what is being observed or measured. Raw scores above the mean have positive standard scores, while those below the mean have negative standard scores.

It is calculated by subtracting the population mean from an individual raw score and then dividing the difference by the population standard deviation. This process of converting a raw score into a standard score is called standardizing or normalizing (however, “normalizing” can refer to many types of ratios; see normalization for more). Read more

We then use the z-score to enter and exit the trade. The picture below shows the cumulative return of the strategy from January 2019 to November 2020.

pair trading in Python

It’s interesting to observe that the strategy performed well in general, but experienced a large PnL swing during the pandemic.

The table below summarizes the performance of each ETF along with the pair strategy.

Quantitative trading in python

We note that although in terms of annualized return, the pair strategy (0.058 p.a.) did not outperform the Buy and Hold, but in terms of risk-adjusted return, it outperformed (Sharpe ratio of 0.647) the Buy and Hold by a large margin.

To obtain the Python program that performs statistical tests, follow the link below.

Originally Published Here: Trading Performance of an ETF Pair Strategy-Quantitative Trading In Python

Analyst's Disclosure: I/we have no positions in any stocks mentioned, and no plans to initiate any positions within the next 72 hours.

Seeking Alpha's Disclosure: Past performance is no guarantee of future results. No recommendation or advice is being given as to whether any investment is suitable for a particular investor. Any views or opinions expressed above may not reflect those of Seeking Alpha as a whole. Seeking Alpha is not a licensed securities dealer, broker or US investment adviser or investment bank. Our analysts are third party authors that include both professional investors and individual investors who may not be licensed or certified by any institute or regulatory body.

Recommended For You

To ensure this doesn’t happen in the future, please enable Javascript and cookies in your browser.
Is this happening to you frequently? Please report it on our feedback forum.
If you have an ad-blocker enabled you may be blocked from proceeding. Please disable your ad-blocker and refresh.