Why Summed Dow Component Opens May Not Match the Index Open
Summary
The document compares a Dow Jones Industrial Average close reconstructed from its 30 component closing prices with a reconstruction using component opening prices. It divides each sum by the stated index divisor. The closing calculation matches the reported index close, while the opening calculation does not match the reported index open, raising a question about why the same approach appears to work for one value but not the other.
The example illustrates how a price-weighted index can be reconstructed from constituent prices and a divisor, but it supplies no answer or investigation of the discrepancy. It therefore does not establish the cause. Differences in opening timestamps, data vendor conventions, constituent membership, or divisor handling are possible issues to investigate, but none is confirmed in the document. The calculation is tied to one date and a particular set of historical data, so it should not be treated as a general explanation of Dow opening-price methodology.
Key ideas
- A price-weighted index can be estimated by summing constituent prices and dividing by an index divisor.
- The example's reconstructed close agrees with the reported Dow close.
- The same calculation using constituent opens does not reproduce the reported index open.
- The document poses the discrepancy but does not identify its cause.
Tags
Full text
# Trouble calculating the Dow Jones Industrial Average
# Trouble calculating the Dow Jones Industrial Average
I can successfully calculate the Dow Jones closing price by taking the sum of closing prices of the 30 component companies. However, using this same method, I'm unable to calculate the correct opening price. What am I doing wrong?
Here's some sample R code:
```
library(quantmod)
Dow.components <- c("MMM","AXP", "AAPL", "BA", "CAT", "CVX", "CSCO", "KO", "DIS", "DWDP",
"XOM", "GE", "GS", "HD", "IBM", "INTC", "JNJ", "JPM", "MCD", "MRK",
"MSFT", "NKE", "PFE", "PG", "TRV", "UTX", "UNH", "VZ", "V", "WMT")
Dow.divisor <- 0.14523396877348
Stocks.open = lapply(Dow.components, function(sym) {
Op(getSymbols(sym, from="2018-05-07", to = "2018-05-08", auto.assign=FALSE))})
Stocks.close = lapply(Dow.components, function(sym) {
Cl(getSymbols(sym, from="2018-05-07", to = "2018-05-08", auto.assign=FALSE))})
# Sum (Dow components close prices)
rowSums(do.call(merge, Stocks.close)) / Dow.divisor
# 24357.32
# Dow Jones index close price
as.numeric(Cl(getSymbols("^DJI", from="2018-05-07", to = "2018-05-08", auto.assign=FALSE)))
# 24357.32
# Sum (Dow components open prices)
rowSums(do.call(merge, Stocks.open)) / Dow.divisor
# 24346.23
# Dow Jones index open price
as.numeric(Op(getSymbols("^DJI", from="2018-05-07", to = "2018-05-08",
auto.assign=FALSE)))
# 24317.66
```
I'm getting the correct closing price of 24357.32. But I can't get the correct open price of 24317.66.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.