从quantmod获取数据,然后使用data.table进行分析。

时间:2015-11-07 09:04:34

标签: r data.table quantmod

与问题有些相关 Calculate the average based on other columnsR xts and data.table

从data.table的当前版本开始,有as.data.table.xts的函数。我想知道是否会有一个改进的解决方案,利用data.table。

感谢Vincent的功能。

可重复数据:

library(data.table)

library(quantmod)

getSymbols("SPY")

getSymbols("AAPL")

as.data.table.xts <- function(x, ...) {
   cn <- colnames(x)
   sscn <- strsplit(cn, "\\.")  
   indexClass(x) <- c('POSIXct', 'POSIXt') #coerce index to POSIXct
   DT <- data.table(time=index(x), coredata(x))
   #DT <- data.table(IDateTime(index(x)), coredata(x))

   ## If there is a Symbol embedded in the colnames, strip it out and make it a 
   ## column
   if (all(sapply(sscn, "[", 1) == sscn[[1]][1])) {
    Symbol <- sscn[[1]][1]
    setnames(DT, names(DT)[-1], sub(paste0(Symbol, "."), "", cn))
    DT <- DT[, Symbol:=Symbol]
    setkey(DT, Symbol, time)[]
    } else {
    setkey(DT, time)[]
    }
}

spy.data <- as.data.table(SPY)
SPY_Day <- as.Date("2015-11-06")
AAPL_Day <- as.Date("2015-11-03")
spy.data[, time := as.Date(time)] # Not sure whether it is necessary, but it does not work with this conversion. 

我想要实现的目标:

“紧接公告日前5/10/30连续交易日的平均收盘价/开盘价/高价/低价,但不包括交易暂停日(交易量为0天或NA)

问题1

查找紧接在公告日之前的连续5个交易日,但不包括交易停止日(交易量为0或NA的日期)

我想到tail可能有用。

spy_5 <- tail(spy.data[Volume!=0 & time < Day], 5)

当我尝试平均部分的计算时

 spy <- spy_5[ , lapply(.SD, function(x) mean(x, na.rm=TRUE)), by =.(Symbol), .SDcols = c(2:5)][, Lookback:=5L]

目前阶段

有没有办法摆脱data.table spy_5的中间产品?

有关更简洁代码的任何建议吗?

问题2

由于同一计算还有其他符号。

如果有任何方法可以使用rbindlistgetSymbols以data.table格式获取原始数据,然后继续。

**所需的输出**

   Symbol    Open   High     Low  Close Lookback
1:    SPY 209.826 210.84 208.884 209.93        5
2:    SPY    **      **     **      **         10
3:    AAPL   **      **     **      **         5
4:    AAPL   **      **     **      **         10

欢迎任何建议。

0 个答案:

没有答案