# Asset Pricing and Negative Prices

I am running an asset pricing study. The data is from 1990 to 2020. When the data is adjusted for dividends and splits, stock prices of several firms become negative.

How does one handle negative prices and returns and the results downstream?

Sample Example

If you run this query - you shall be able to download data for SHANTIGEAR listedn on BSE - The adjusted price is negative (Obviously Adjusted close is the closing price after adjustments for all applicable splits and dividend distributions. Data is adjusted using appropriate split and dividend multipliers, adhering to Center for Research in Security Prices (CRSP) standards.) - https://in.finance.yahoo.com/quote/SHANTIGEAR.BO/history?period1=1026000000&period2=1624665600&interval=1d&filter=history&frequency=1d&includeAdjustedClose=true

• Is it possible your data was already adjusted for dividends and/or splits? Jun 26 at 6:54
• I adjusted it myself applying the splits and dividends - but over 30 years - spilts and dividends end up being high Jun 26 at 7:02
• ... so is it possible your data was already adjusted for dividends and/or splits? Or you did the adjustment incorrectly? Jun 26 at 7:04
• No - i have verified the data - original data was nominal price - it had to be adjusted for dividends and splits Jun 26 at 7:11
• Did you employ CRSP adjustments methodology? As I understand it, there can be no negative prices as you always multiply prices by adjustment factors. This operation cannot yield negative prices AFAIR Jun 26 at 7:42

The methodology has to be wrong to generate negative prices. Dividends and splits both generate proportional shifts in nominal prices, that are positive. A proportional shift to any positive number generates a positive number.

The problem with the company given is that it seems to pay a >100% dividend to its previous close, which is why the previous adj close appears negative. Except this is Yahoo Finance's algo being lazy, being configured for US companies where this kind of thing does not happen.

What it should do with a company paying a dividend of 100% of price is not take the price to zero, but halve it! There in lies your problem.

• i have used the raw prices and used the dividends and split history - and used github.com/cran/TTR/blob/master/src/adjRatios.c - still comes negative Jul 17 at 21:49
• OK, odd, but sounds like you're on it ;-) What was the prior close, the div, split and subsequent close before and after the price switched signs? Was there a split and a dividend on the same day? Jul 17 at 21:51
• on 21-Jul-2003 - the raw price was 5.50 and there was a dividend of 6. - as a result - the adjusted price on 18-Jul-2003 became negative Jul 18 at 6:22

This has already been answered but I will try to provide more insight.

The formula that you should use for forward adjusting: $$P_{adj, j}=P_{unadj, j}*\prod_{i=1}^{j} f_i$$ $$f_i=1+\frac{d_i}{P_{unadj, i}}$$ where $$d_i$$ is a dividend paid on day $$j$$ and $$P_{unadj, j}$$ is unadjusted price for that day.

for backward adjusting we have: $$P_{adj, j}=P_{unadj,j}*\prod_{j}^{1} f_j$$ $$f_j=\frac{1}{1 + \frac{d_{j+1}}{p_{unadj,j}}}$$

where we adjust the prices BEFORE the exDate.

The idea with this formula is that we reinvest the dividend back into the stock and hold more units of that stock. Those two methods give us exactly the same returns. As you can see with those two methods above, you can't get negative prices, no matter what is the value of dividend. For the dividend 6 and price of 5.5 that you wrote in your comment, you would get $$f=0.45$$. This is the correct formula imho.

The formula Yahoo uses is: $$f_j=1 - \frac{d_j}{p_{unadj, j-1}}$$ which is obviously wrong. This formula can yield negative values as you have noticed, but for small dividends (compared to stock price) this method and backward method above yield similar results.

• I agree to that - but i take raw data and use the TTR code to do adjustments - it still comes out wrong Jul 22 at 12:50
• Doesn't TTR code use yahoo formula? rd_ratio[i-1] = rd_ratio[i] * (1.0 - real_div[i] / real_close[i-1]); }. You should change it for the formula above.
– emot
Jul 22 at 13:55
• I looked at the adjRatios - do you mean to say it cannot handle discrete dividends? @JoshuaUlrich Jul 23 at 14:07
• I mean I am looking at the code adjRatios you linked, in line 60-61 of adjRatios.c you have yahoo formula i.e. $1 - \frac{d_j}{p_{unadj,j-1}}$ which can produce negative prices, if you correct it and change it to $1/(1+d_j/p_{unadj,j})$ then you should not have negative prices anymore. In C notiation it would be probably rd_ratio[i-1] = rd_ratio[i] * (1.0 / (real_div[i] / real_close[i-1]));
– emot
Jul 23 at 14:38
• If that doesn't help, can you provide the exact code you are running? I am not familiar with TTR.
– emot
Jul 23 at 14:55

This seems to work for me:

library(quantmod)

# import data
sym <- "SHANTIGEAR.BO"
x <- getSymbols(sym, auto.assign = FALSE)
div <- getDividends(sym)
spl <- getSplits(sym)

ratios <- adjRatios(close = Cl(x), dividends = div, splits = spl)

# apply adjustment ratios to original data
adjusted <- adjustOHLC(x, ratio = ratios$$Split * ratios$$Div)