adjustOHLC.R issues
Yes, TTR is 0.23.1 and quantmod is 0.4.5. I think my question boils down to the difference between using use.Adjusted = TRUE or FALSE. I have found prior articles that talk about why the adjusted close values from the two methods do not always match, so I conclude that it depends on how Yahoo is computing their adjusted close values and the underlying data. Since my code is used to compare various innovations and I am not concerned about absolute values, I think either method will give adjusted data that are suitable for my purposes. Ernie
Joshua Ulrich <mailto:josh.m.ulrich at gmail.com> April 12, 2016 at 7:21 AM On Mon, Apr 11, 2016 at 8:48 PM, Ernie Stokely<wizardchef at gmail.com> wrote:
OK, I am prepared for the stones that will be thrown at me for being naive, but here goes anyway. Most of the references on adjusting OHLC values for splits and dividends say to use the following adjustment: K = Ca/C Om = K * O Hm = K * H Lm = K * L Cm = K * C = Ca where: Ca = adjusted close, OHLC are the unadjusted values, and OmHmLmCm are the modified (adjusted) values of OHLC.
The adjusted close from Yahoo used to only have 2 decimal places, so what you describe would have been subject to massive loss of accuracy when there were many adjustments. That's the entire reason I wrote TTR::adjRatios and why quantmod::adjustOHLC exists. That said, they provide more decimal places now, and adjustOHLC provides a use.Adjusted argument, so you could have used the adjustments you describe above by calling: adjustOHLC(VTI, use.Adjusted=TRUE).
If I use adjustOHLC() in quantmod to do the adjustment I find these are not the equations being used. For example, for VTI here is the unadjusted OHLCadjC data read from Yahoo: VTI.Open VTI.High VTI.Low VTI.Close VTI.Volume VTI.Adjusted 2006-03-01 128.15 128.90 127.79 128.70 216400 52.56795 2006-03-02 128.50 128.76 128.01 128.61 148800 52.53119 2006-03-03 128.26 129.43 128.20 128.40 323200 52.44541 2006-03-06 128.64 128.64 127.27 127.46 279800 52.06147 2006-03-07 127.15 127.31 126.65 126.94 218400 51.84907 2006-03-08 126.72 127.49 126.20 127.30 491800 51.99612 If I apply adjustOHLC() to these data I get: VTI.Open VTI.High VTI.Low VTI.Close VTI.Volume VTI.Adjusted 2006-03-01 59.15007 59.49625 58.98391 59.40394 216400 52.56795 2006-03-02 59.31162 59.43163 59.08545 59.36240 148800 52.53119 2006-03-03 59.20084 59.74088 59.17315 59.26546 323200 52.44541 2006-03-06 59.37624 59.37624 58.74389 58.83159 279800 52.06147 2006-03-07 58.68851 58.76235 58.45772 58.59158 218400 51.84907 2006-03-08 58.49003 58.84544 58.25001 58.75774 491800 51.99612
Works fine for me using the latest quantmod and TTR on CRAN:
R> getSymbols("VTI", from="2006-03-01")
[1] "VTI"
R> first(VTI)
VTI.Open VTI.High VTI.Low VTI.Close VTI.Volume VTI.Adjusted
2006-03-01 128.15 128.9 127.79 128.7 216400 52.56795
R> first(adjustOHLC(VTI))
VTI.Open VTI.High VTI.Low VTI.Close VTI.Volume VTI.Adjusted
2006-03-01 52.3433 52.64964 52.19626 52.56795 216400 52.56795
Perhaps you're using an older version of one/both packages?
Obviously, VTI.Adjusted (Ca) is not equal to VTI.Close (Cm) as required by the formula above. I have a colleague who has been trading for 40 years and he says this is an erroneous result (that Cm must equal Ca). When I explore the package reference file for adjustOHLC() I see this paragraph: "New columns are derived by taking the ratio of adjusted value to original Close, and multiplying by the difference of the respective column and the original Close. This is then added to the modified Close column to arrive at the remaining ?adjusted? Open, High, Low column values." I am not quite sure how to translate this verbal description into an equation, but it doesn't sound like the same correction I see recommended elsewhere and described at the beginning of this note. Can someone shed some light on this discrepancy or send me a link to more enlightenment? Thanks in advance.
Yahoo describes their adjusted close column here: https://help.yahoo.com/kb/finance/SLN2311.html
Ernie
_______________________________________________ R-SIG-Finance at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance -- Subscriber-posting only. If you want to post, subscribe first. -- Also note that this is not the r-help list where general R questions should go.
Ernie Stokely <mailto:wizardchef at gmail.com> April 11, 2016 at 8:48 PM OK, I am prepared for the stones that will be thrown at me for being naive, but here goes anyway. Most of the references on adjusting OHLC values for splits and dividends say to use the following adjustment: K = Ca/C Om = K * O Hm = K * H Lm = K * L Cm = K * C = Ca where: Ca = adjusted close, OHLC are the unadjusted values, and OmHmLmCm are the modified (adjusted) values of OHLC. If I use adjustOHLC() in quantmod to do the adjustment I find these are not the equations being used. For example, for VTI here is the unadjusted OHLCadjC data read from Yahoo: VTI.Open VTI.High VTI.Low VTI.Close VTI.Volume VTI.Adjusted 2006-03-01 128.15 128.90 127.79 128.70 216400 52.56795 2006-03-02 128.50 128.76 128.01 128.61 148800 52.53119 2006-03-03 128.26 129.43 128.20 128.40 323200 52.44541 2006-03-06 128.64 128.64 127.27 127.46 279800 52.06147 2006-03-07 127.15 127.31 126.65 126.94 218400 51.84907 2006-03-08 126.72 127.49 126.20 127.30 491800 51.99612 If I apply adjustOHLC() to these data I get: VTI.Open VTI.High VTI.Low VTI.Close VTI.Volume VTI.Adjusted 2006-03-01 59.15007 59.49625 58.98391 59.40394 216400 52.56795 2006-03-02 59.31162 59.43163 59.08545 59.36240 148800 52.53119 2006-03-03 59.20084 59.74088 59.17315 59.26546 323200 52.44541 2006-03-06 59.37624 59.37624 58.74389 58.83159 279800 52.06147 2006-03-07 58.68851 58.76235 58.45772 58.59158 218400 51.84907 2006-03-08 58.49003 58.84544 58.25001 58.75774 491800 51.99612 Obviously, VTI.Adjusted (Ca) is not equal to VTI.Close (Cm) as required by the formula above. I have a colleague who has been trading for 40 years and he says this is an erroneous result (that Cm must equal Ca). When I explore the package reference file for adjustOHLC() I see this paragraph: "New columns are derived by taking the ratio of adjusted value to original Close, and multiplying by the difference of the respective column and the original Close. This is then added to the modified Close column to arrive at the remaining ?adjusted? Open, High, Low column values." I am not quite sure how to translate this verbal description into an equation, but it doesn't sound like the same correction I see recommended elsewhere and described at the beginning of this note. Can someone shed some light on this discrepancy or send me a link to more enlightenment? Thanks in advance. Ernie