2017-02-02 12 views
1

Я пытаюсь загрузить данные запаса, из которых я хотел бы автоматически выбрать те, которые удовлетворяют определенным условиям, касающимся скользящих средних. До сих пор мне удалось загрузить данные, но мне трудно создавать данные скользящей средней для каждого запаса.Вычисление данных о трендах в список запасов с использованием R quantmod

# Read csv as character list 
ticker.list <- as.character(read.csv("shortftse250tickers.csv",header=F)$V1) 


ftse250 <- new.env() 
allData <- list() 

# Get data 
allData <- getSymbols(ticker.list, from='2017-01-03', src='google', env = ftse250) 

# Extract Close data in correct order 
tl <- mget(ticker.list, envir = ftse250) 
closeData <- do.call(merge, eapply(ftse250, Cl)[allData]) 


# Calculate EMAs for each stock 
for (i in ticker.list) { 

    ema3 <- EMA(closeData[i], 3) 
    ema7 <- EMA(closeData[i], 7) 

} 

Все вроде нормально, пока я не достигну последней для цикла, где я получаю сообщение об ошибке:

Error in if (length(c(year, month, day, hour, min, sec)) == 6 && c(year, : 
    missing value where TRUE/FALSE needed 

Я попытался преобразованием closeData в список с помощью newData <- as.list(closeData) и получил ошибку:

Error in EMA(newData[i], 3) : Invalid 'n' 

Я могу вручную рассчитать EMA никаких проблем с:

EMA(newData$ZPLA) 

Любая помощь будет высоко оценена.

ответ

2

Две вещи: (1) имена столбцов closeData имеют. Закрываются к ним. (2) closeData - это объект xts, поэтому вам нужно подмножество по-разному. Попробуйте это для вашей петли:

# Calculate EMAs for each stock 
for (i in paste0(ticker.list, ".Close")) { 

    ema3 <- EMA(closeData[, i], 3) 
    ema7 <- EMA(closeData[, i], 7) 

} 
+0

Работает отлично, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^