Quantstrat применяет стратегию неверных измерений, пытаясь работать с данными mktdata OHCLV вручную против getSymbols - PullRequest
1 голос
/ 30 марта 2020

Я прошу прощения за то, что у меня нет рабочего примера atm

Все, что мне действительно нужно, это пример формата для загрузки нескольких символов из CSV

Вызов функции говорит

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

mktdata "объект xts, содержащий рыночные данные. В зависимости от индикаторов может потребоваться формат OHLCV или BBO, по умолчанию NULL"

Причина sh я не использую getSymbols, потому что я делаю некоторую предварительную обработку и загружаю данные из csv, потому что мой inte rnet некачественный. Я загружаю данные, но примерно раз в неделю. Мой препроцесс производит разные символы из подмножества 400 символов на основе периодов времени, которые я сканирую. Я пытаюсь загрузить всю мою загрузку, и независимо от того, что я пытаюсь, я не могу заставить ее загружаться ни с фрейма данных, ни с объекта xts. Прямо сейчас я конвертирую из csv в dataframe в xts и пытаюсь загрузить.

Я заметил, что мои xts объекты отличаются от getSymbols (ошибка из-за неверных размеров). В частности, если я назову colnames. Мой не скажет ничего, где в качестве подэлементов getSymbols перечислите 6 столбцов.

В любом случае. Что я хотел бы сделать, так это увидеть минимальный пример загрузки пользовательских данных OHCLV из csv в xts, которые могут быть предоставлены как объект для mktdata = в вызове applyStrategy. Таким образом, я могу отформатировать свой код, чтобы он соответствовал

У меня есть код для загрузки и создания объекта 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"),paste0(symbolstring[x],".Low"),paste0(symbolstring[x],".Close"),paste0(symbolstring[x],".Volume"),paste0(symbolstring[x],".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"),paste0(x,".Open"),paste0(x,".High"),paste0(x,".Low"),paste0(x,".Close"),paste0(x,".Volume"),paste0(x,".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

Error in mktdata[, keep] : incorrect number of dimensions

1 Ответ

0 голосов
/ 30 марта 2020

Так вы сохраняете объект xts getSymbols в файле и перезагружаете его для использования для applySrategy QuantStrat (показаны два метода, метод 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))

Если вы хотите работать с несколькими символами, у меня была эта работа.

Обратите внимание, что изначально у меня была ссылка на 1-й элемент, т.е. 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"),paste0(x,".Low"),paste0(x,".Close"),paste0(x,".Volume"),paste0(x,".Adjusted"))
  write.zoo(z,file=paste0(x,"zoo.csv"), index.name = "Date", row.names=FALSE)
  return(as.xts(read.zoo(file=paste0(x,"zoo.csv"),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, portfolios = portfolioName,symbols=symbolstring)
...