Skip to content
All library documents

Detecting Stock Splits and Adjusting Historical Equity Data

Article Quant Q&A · Author: Alex

Summary

The document discusses ways to identify stock splits in multi-year equity price panels and adjust historical observations. One suggestion is to compare adjusted close with close over time and flag large changes in their ratio as possible splits. Another is to use a vendor’s reported split date and split factor, though that information may cover only the latest event.

A warning explains that adjusted-close ratios also reflect accumulated dividends, so they cannot reliably isolate split adjustments. An R example demonstrates the ratio, but the answer is later corrected: for Yahoo data, use a method that retrieves split and dividend records separately and constructs adjustment ratios from those events. The discussion offers practical data-cleaning guidance, but its thresholds and vendor sources are not established as universal, and the cited feed and functions may change over time.

Key ideas

  • A sudden change in the adjusted-close-to-close ratio can indicate a possible split.
  • Vendor metadata may provide a recent split date and ratio for a security.
  • Adjusted-close ratios incorporate dividends as well as splits, so they can create false split signals.
  • Historical adjustments are more reliable when split and dividend events are handled separately.
  • The proposed ratio threshold is a heuristic rather than a validated universal rule.

Tags

Full text
# How to detect and adjust for stock splits?


# How to detect and adjust for stock splits?












I am using a large daily data panel for over 250 companies and over several years. I am concerned about adjusting for stock splits. Is there any program in SAS to detect stock splits? How do I adjust the stock splits?

## Answer by nitin (score 2)

https://quant.stackexchange.com/a/7550

yahoo provides adjusted_close. You could use this to detect splits

adjustment_factor = adjusted_close/close

change in adjustment_factor = adjustment_factor (yesterday's)/adjustment_factor(today)

if this number is less than 0.9 or greater than 1, you have a split

## Answer by Peter (score 1)

https://quant.stackexchange.com/a/9840

It will only work for the latest data, but you can get latest dividend information and latest split date/ratio from yahoo, it comes with the other company stats (here is a sample of the output):

```
<ForwardAnnualDividendRate>0.36</ForwardAnnualDividendRate>
<ForwardAnnualDividendYield>1.10%</ForwardAnnualDividendYield>
<TrailingAnnualDividendYield>0.33</TrailingAnnualDividendYield>
<TrailingAnnualDividendYield>1.00%</TrailingAnnualDividendYield>
<p_5YearAverageDividendYield>1.40%</p_5YearAverageDividendYield>
<PayoutRatio>32.00%</PayoutRatio>
<DividendDate>Sep 10, 2013</DividendDate>
<Ex_DividendDate>Nov 13, 2013</Ex_DividendDate>
<LastSplitFactor term="new per old">5:4</LastSplitFactor>
<LastSplitDate>Dec 11, 2013</LastSplitDate>
```

Replace "GRC" with your stock symbol in the following URL:

http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20yahoo.finance.keystats%20WHERE%20symbol%3D'GRC'&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys

This is an automated scrape of http://finance.yahoo.com/q/ks?s=GRC.

## Answer by Contango (score -2)

https://quant.stackexchange.com/a/7716

Here is R code which calculates the "Split Ratio" for historical data:

```
library(TTR)
s <- getSymbols("GILD", auto.assign=FALSE)

splitRatio <- s$GILD.Adjusted  / s$GILD.Close
names(splitRatio) <- c("SplitRatio")

head(splitRatio)
tail(splitRatio)
```

However (and this is a big however): the cumulated amount of dividends paid will slowly distort this ratio. For example, IBM hasn't had a stock split since 1999, yet the "SplitRatio" at 2007-01-03 is 0.897. This means that IBM has paid out a total of (1/0.897)-1 = 11% dividends since 2007-01-03.

In addition, I'm not 100% sure that this is the complete story, so I've made this a community Wiki so any correct inassumptions can be addressed.

Update

This answer is wrong, according to the comment below from Joshua Ullrich:

> Don't do this. It's much better to use quantmod::adjustOHLC with Yahoo data. When use.Adjusted=FALSE (the default), the function pulls the split and dividend data from Yahoo and calculates the ratios manually.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.