getBloombergData <- function(conn,ticker,start,date){ ohlc <- bdh(conn,paste(ticker,"Equity"),c("PX_OPEN","PX_HIGH","PX_LOW","PX_LAST","VOLUME"),start.date,dates.as.row.names=F) colnames(ohlc) <- c("Date","Open","High","Low","Close","Volume") ohlc <- xts(ohlc[,-1],as.Date(ohlc$Date)) #split information override_field="DVD_START_DT" #DVD_END_DT override_values=format(start,"%Y%M%d") spl <- bds(conn,paste(ticker,"Equity"),c("EQY_DVD_ADJUST_FACT"),override_field,override_values) # bds returns NULL if there is no data. #Adjustment Factor Operator Type # 1 = div # 2 = mul # 3 = add # 4 = sub #Adjustment Factor Flag # 1 = prices only # 2 = volumes only # 3 = prices and volume # can't handle 3 or 4 yet if(NROW(spl)!=0){ if (NROW(spl[spl[,"Adjustment Factor Operator Type"]%in% c(3,4),])>0){ stop("case not handled") }else{ spl[spl[,"Adjustment Factor Operator Type"]==1,"Adjustment Factor"] <- 1/spl[spl[,"Adjustment Factor Operator Type"]==1,"Adjustment Factor"] } spl <- xts(spl$"Adjustment Factor",as.Date(spl$"Adjustment Date")) if(time(last(spl))>=start.date){ spl <- window(spl,start=start.date) }else{ spl <- NULL } } #div information div <- bds(conn,paste(ticker,"Equity"),c("DVD_HIST"),override_fields,override <- values) if(NROW(div)!=0){ div <- xts(div$"Dividend Amount",as.Date(div$"Ex-Date")) } if(is.null(div)&&is.null(spl)){ divspl <- NULL }else if(is.null(div)){ divspl <- merge(NA,spl,all=T) }else if(is.null(spl)){ divspl <- merge(div,NA,all=T) }else{ divspl <- merge(div,spl,all=T) } if(!is.null(divspl)){ colnames(divspl) <- c("Adj.Div","Split") if (all(is.na(divspl[, "Split"]))) { s.ratio <- rep(1, NROW(divspl)) }else { s.ratio <- adjRatios(split = divspl[, "Split"])[, 1] } divspl <- cbind(divspl, divspl[, "Adj.Div"] * (1/s.ratio)) colnames(divspl)[3] <- "Div" ohlc <- merge(ohlc, divspl, all = TRUE) adj <- adjRatios(ohlc[, "Split"], ohlc[, "Div"], ohlc[, "Close"]) s.ratio <- adj[, 1] d.ratio <- adj[, 2] cn <- colnames(ohlc) ohlc <- cbind(ohlc, ohlc[, "Close"]) colnames(ohlc) <- c(cn, "Unadj.Close") ohlc[, "Open"] <- ohlc[, "Open"] * d.ratio * s.ratio ohlc[, "High"] <- ohlc[, "High"] * d.ratio * s.ratio ohlc[, "Low"] <- ohlc[, "Low"] * d.ratio *s.ratio ohlc[, "Close"] <- ohlc[, "Close"] * d.ratio * s.ratio ohlc[, "Volume"] <- ohlc[, "Volume"] * (1/d.ratio) ohlc <- ohlc[, c("Open", "High", "Low", "Close", "Volume", "Unadj.Close", "Div", "Split", "Adj.Div")] }else{ cn <- colnames(ohlc) ohlc <- cbind(ohlc, ohlc[, "Close"]) colnames(ohlc) <- c(cn, "Unadj.Close") ohlc <- merge(ohlc,NA,NA,NA,all = TRUE) colnames(ohlc) <- c(colnames(ohlc)[1:6],"Adj.Div","Split","Div") } return( ohlc ) }