Back-testing helps investors test their ideas before they invest. When combined with a portfolio tracker, it offers investors the ability to control risk as well as determine how ‘active’ or ‘passive’ they want to be, as such it is an invaluable tool.
However, care needs to be taken when handling financial data, as the way in which it is treated can have a large impact on results. This document describes how our engine handles the data we source from S&P Global Capital IQ, particular attention is given to the following corporate events:
- Stock splits/consolidations
- Cash dividends
- Stock dividends
- Spin-offs
- Reverse takeovers
Introduction
The database we use is a point-in-time fundamental database from S&P Global Capital IQ. A point-in-time database is financial market data that was known to investors at that point in time.
It contains companies which have failed, merged or have been acquired. Afterall, the companies on the market today are the ones which have survived. Using a point-in-time database mitigates the risk of survivorship bias.
In addition, the majority of financial data investors use has been retrospectively adjusted. This is to make it easier to analyse. However, when it comes to back-testing, care must be taken if it is to use restated and/or adjusted financial data as it can introduce lookahead bias.
To mitigate the risk of lookahead bias we use ‘as reported’ financial data. However, adjustments have been made to price, dividends and share count to ensure consistency for certain corporate events. This document explains how those corporate events are handled by our engine, the assumptions we’ve made, and what would have happened in reality.
Stock splits
Our engine uses ‘split-adjusted’ price and share count data. You can see below what would have happened in reality versus the calculations our engine makes; while the price differs, the value and return to the investor remains the same.
On June 4, 2014, Apple conducted a seven for one stock split. An investor who held 3 shares the day before the split, holds 21 shares the day after the split and as a result the price is also divided by seven. However, you’ll see that our engine continuously holds 21 shares at the split-adjusted price.
What would have occurred:
Date | Action | Shares | Price | Value |
4/06/2014 | BUY | 3 | $644.84 | $1,934.52 |
8/06/2014 | Apple conducts a seven for one stock split | |||
10/06/2014 | SELL | 21 | $94.25 | $1,979.25 |
What our engine does:
Date | Action | Shares | Price | Value |
4/06/2014 | BUY | 21 | $92.12 | $1,934.52 |
8/06/2014 | Apple conducts a seven for one stock split | |||
10/06/2014 | SELL | 21 | $94.25 | $1,979.25 |
Cash dividends
We handle cash dividends separately from price. Dividends are paid when the dividend payment actually happened on a split-adjusted cents per share basis according to the number of shares that portfolio holds.
The table below highlights the difference between what would have actually happened and what our engine does. You can see below that while the share count and dividend payment differs, the dividend payment remains the same.
Scenario | Date | Dividend | Shares | Payment |
Engine | 15/05/2014 | 0.47 | 21 | $9.87 |
Actual | 15/05/2014 | 3.29 | 3 | $9.87 |
Stock dividends
The following table describes a 1-for-200 stock dividend payment along with a 2-for-1 stock split. The result of the trade is the same in our engine because the share price has been adjusted to include both the split and dividend share payment.
Looking at the example below, we have a company trading at $54 and an investor purchasing 200 shares. The value of this trade is $10,800. The company then issues a 2:1 split while at the same time it offers a stock dividend of 1 share for every 200 shares held.
Our engine uses split-adjusted prices and share count data, which means the value of the dividend is factored into the price but the overall value of the trade remains the same.
What would have occurred:
Timeline | Actions | Shares | Price | Value |
Buy date | Buy | 200 | $54.00 | $10,800 |
A 2:1 split/a 1:200 stock dividend | 1 | |||
Sell date | Sell | 402 | $27.00 | $10,854 |
What our engine does:
Timeline | Actions | Shares | price | Value |
Buy date | Buy | 402 | $26.87 | $10,800 |
A 2:1 stock/a 1:200 stock dividend | n/a | |||
Sell date | Sell | 402 | $27.00 | $10,854 |
Spin-offs
Our engine treats spin-offs as special dividends. We assume the investor sells the shares in the spun-out company and looks to reinvest the proceeds elsewhere.
The table below describes how our engine handles this situation. On the 1st of August 2013, Amcor Limited (ASX:AMC) announced the spin-off of their Packaging Distribution business. The new company (Orora Limited) was then listed on the ASX. The transaction was a one for one share issuance.
On the spin-off date, our engine records a special dividend of $1.16. This is the price per share of the spun-out company (Orora Ltd) and as it was a 1:1 spin-out that was the value of the dividend.
Spin-off events | Date | Shares | Price | Dividend | Value |
Special dividend | 3/01/2014 | 1000 | $1.16 | $1,160 | |
Holdings | 3/01/2014 | 1000 | $10.60 | $10,600 | |
Holdings | 2/01/2014 | 1000 | $10.59 | $10,590 |
Reverse takeovers
Our engine will sell its holdings on a reverse takeover. This is because the company which is listed immediately after this event is completely different to the company before the event. The engine will consider the financial metrics of the new company. If this new company meets the buy criteria of the strategy, it will purchase shares in the new company. If it doesn’t, it won’t.
An example of a reverse takeover
On November 3, 2016, prior to the closing of the share exchange, Biodel Inc (listed on the NASDAQ Capital Market) completed a one-for-thirty reverse stock split. This transaction meant that Biodel was acquired by Albireo Pharma, a private company who wanted to list (and take advantage of the intellectual property Biodel held).
As a result of the reverse stock split, every 30 shares of Biodel common stock outstanding immediately prior to the share exchange was combined and reclassified into one share of Albireo common stock.
Our engine sells the stock it holds on the day of the reverse takeover, like this:
Date | Action | Price | Shares | Value |
31/10/2016 | Buy | $0.61 | 3,278 | $1,999.58 |
3/11/2016 | Sold (due to reverse takeover) | $0.65 | 3,278 | $2,130.70 |
It will look at the new company’s financial criteria on the 4th of November (i.e. Albireo Pharma, Inc). And check to see if this new company triggers a “buy” trade. If it doesn’t, the engine will look reinvest the proceeds in another company which meets the criteria of the strategy.