Quantstrat应用策略的尺寸不正确,试图与手动Mktdata OHCLV数据和getSymbols一起使用

对于没有有效的atm例子,我深表歉意

我真正需要的只是一个示例格式,用于说明如何从csv加载多个符号

函数调用说

https://www.rdocumentation.org/packages/quantstrat/versions/0.16.7/topics/applyStrategy

mktdata “包含市场数据的xts对象。根据指标,可能需要采用OHLCV或BBO格式,默认为NULL”

我不希望使用getSymbols的原因是因为我做了一些预处理并从csv加载数据,因为我的互联网很伪劣。我确实下载数据,但是大约每周一次。我的预处理根据我扫描的时间段从400个符号的子集中产生了不同的符号。我正在尝试预先加载所有下载过程,无论我如何尝试,都无法从数据帧或xts对象加载它。现在,我正在将csv从dataframe转换为xts,并尝试加载。

我注意到我的xts对象不同于getSymbols(关于尺寸错误的错误)。特别是如果我叫校名。我不会说什么,因为getSymbols子元素列出了6列。

无论如何。我想做的是,看到一个最小的示例,该示例将来自csv的自定义OHCLV数据加载到xts中,可以将它们作为对象提供给applyStrategy调用中的mktdata =。这样,我就可以设置代码格式以匹配

我有代码可以从数据框中加载和创建xts对象。

#loads from a dataframe which includes Symbol,Date,Open,High,Low,Close,Volume,Adjusted

tempData <- symbol_data_set[symbol_data_set$Symbol %in% symbolstring & symbol_data_set$Date >= startDate & symbol_data_set$Date<=endDate,]

#creates a list of xts    
vectorXTS <- mclapply(symbolstring,function(x)
{
  df <- symbol_data_set[symbol_data_set$Symbol==x & symbol_data_set$Date >= startDate & symbol_data_set$Date<=endDate,]
  #temp <- as.xts(
    temp <- cbind(as.data.frame(df[,2]),as.data.frame(df[,-1:-2]))
    rownames(df) <- df$Date
    #,order.by=as.POSIXct(df$Date),)
  z <- read.zoo(temp,index = 1,col.names=TRUE,header = TRUE)

  #sets names to Symbol.Open ...
  colnames(z) <- c(paste0(symbolstring[x],".Open"),paste0(symbolstring[x],".High"),".Low"),".Close"),".Volume"),".Adjusted"))

  return(as.xts(z,match.to=AAPL))
  #colnames(as.xts(z))
})

names(symbolstring) <- symbolstring
names(vectorXTS) <- symbolstring

for(i in symbolstring) assign(symbolstring[i],vectorXTS[i])

colnames(tempData) <- c(paste0(x,".Symbol"),paste0(x,".Date"),".Adjusted"))
head(tempData)

rownames(tempData) <- tempData$Date

#attempts to use this xts object I created

results <- applyStrategy(strategy= strategyName,portfolios = portfolioName,symbols=symbolstring,mktdata)

错误

Error in mktdata[,keep] : incorrect number of dimensions
fgtfer 回答:Quantstrat应用策略的尺寸不正确,试图与手动Mktdata OHCLV数据和getSymbols一起使用

这是将xts getSymbols对象存储在文件中并重新加载以用于QuantStrat的applyStrategy的方式(显示了两种方法,read.xts方法是理想的,因为您可以看到csv的存储方式)

getSymbols("AAPL",from=startDate,to=endDate,adjust=TRUE,src='yahoo',auto.assign = TRUE)
saveRDS(AAPL,file= 'stuff.Rdata')
AAPL <- readRDS(file= 'stuff.Rdata')
 write.zoo(AAPL,file="zoo.csv",index.name = "Date",row.names=FALSE)
rm(AAPL)
AAPL <- as.xts(read.zoo(file="zoo.csv",header = TRUE))

如果您想使用多个符号,那么我有这项工作。

请注意,最初我引用了第一个元素,即vectorXTS [[1]],并且有效

注意:至少要像这样进行设置才能使其运行...

vectorXTS <- mclapply(symbolstring,function(x)
{
  df <- symbol_data_set[symbol_data_set$Symbol==x & symbol_data_set$Date >= startDate & symbol_data_set$Date<=endDate,]
    temp <- cbind(as.data.frame(df[,2]),as.data.frame(df[,-1:-2]))
    rownames(df) <- df$Date
  z <- read.zoo(temp,index = 1,col.names=TRUE,header = TRUE)
  colnames(z) <- c(paste0(x,".Open"),paste0(x,".High"),".Low"),".Close"),".Volume"),".Adjusted"))
  write.zoo(z,file=paste0(x,"zoo.csv"),row.names=FALSE)
  return(as.xts(read.zoo(file=paste0(x,header = TRUE)))
})

names(vectorXTS) <- symbolstring

#this will assign to memory vs vectorXTS if one wishes to avoid using mktdata = vectorXTS[[]]
for(i in symbolstring) assign(i,vectorXTS[[i]])

results <- applyStrategy(strategy= strategyName,portfolios = portfolioName,symbols=symbolstring,mktdata = vectorXTS[[]])

#alternatively
#results <- applyStrategy(strategy= strategyName,symbols=symbolstring)
本文链接:https://www.f2er.com/2553951.html

大家都在问