2017-02-07 7 views
1

Hy community, Это мой код. Он работает без ошибок и предупреждений. Кстати, если вы посмотрите на x.df (окончательная база данных), то что-то не так на SMA & Полосы столбцов Боллинджера. Они оба заполнены «НА». Затем, BBands сбрасывает несколько столбцов после слияния. Что случилось?Loop function & quantmod

library(quantmod) 
stockData <- new.env() #Make a new environment for quantmod to store data in 
tickers <- c("AAPL","GOOG","YHOO","FB") # choose Symbols 
start_date <- as.Date("2014-01-01") #Set start date 
getSymbols(tickers, src="yahoo", env=stockData, from=start_date) # get data 
x <- list() 

# loop on tickers 
for (i in 1:length(tickers)) { 
x[[i]] <- get(tickers[i], pos=stockData) # get data from stockData environment 
colnames(x[[i]]) <- c("Open", "High", "Low", "Close","Volume", "Adjusted") # rename Header for all tables in list 
x[[i]]$gl <-((Cl(x[[i]])-Op(x[[i]]))/Op(x[[i]]))*100 # Daily gain loss percentage 
SMA.n10 <- SMA(x[[i]][,4],n = 10) # Calculate moving averages (MA) on "Close Price" <-column(4) 
BBands<- BBands(x[[i]][,2:4]) 
x[[i]]$Symbol<- 0 # create "0" vector for Symbol name 
x[[i]]$Symbol<- tickers[[i]] # add Symbol name 
x[[i]]<-data.frame(x[[i]],SMA.n10[[i]],BBands[[i]]) # merge data 
} 
x.df<- do.call(rbind, x) # call rbind to merge all xts objs in a single dataframe 

Благодаря

EDIT: Моя цель состоит в том, чтобы получить единый dataframe (x.df) со следующими столбцами:

"Открыть", "High", "Low",» Close "," Volume "," Adjusted ", Symbol," SMA10 "," dn "," mavg "," up "," pctB ".

Но если вы запустите код, вы увидите значения NA в столбцах SMA. ThentThere не имеет никакого следа о «dn», «mavg», «up», «pctB» (значения полос Боллинджера).

+0

описать подробнее ... –

ответ

1

Это исправляет некоторые ошибки в коде:

x <- list() 

# loop on tickers 
for (i in 1:length(tickers)) { 
    x[[i]] <- get(tickers[i], pos=stockData) # get data from stockData environment 
    colnames(x[[i]]) <- c("Open", "High", "Low", "Close","Volume", "Adjusted") # rename Header for all tables in list 
    x[[i]]$gl <-((Cl(x[[i]])-Op(x[[i]]))/Op(x[[i]]))*100 # Daily gain loss percentage 
    SMA.n10 <- SMA(x[[i]][,4],n = 10) # Calculate moving averages (MA) on "Close Price" <-column(4) 
    BBands<- BBands(x[[i]][,2:4]) 
    x[[i]]$Symbol<- 0 # create "0" vector for Symbol name 
    x[[i]]$Symbol<- tickers[i] # add Symbol name 
    x[[i]]<-data.frame(x[[i]], coredata(SMA.n10), coredata(BBands)) # merge data 
} 
x.df<- do.call(rbind, x) # call rbind to merge all xts objs in a single dataframe 

Вы должны узнать о различиях между векторами Подменят, списки, dataframes с [] и [[]]. Я рекомендую этот ресурс для получения дополнительной информации: http://adv-r.had.co.nz/Subsetting.html

coredata(SMA.n10) возвращает основную матрицу значений, которая работает, как ожидалось, при условии, NROW(SMA.n10) == NROW(x[[i]]) в то время как SMA.n10[[i]] возвращается NA, а также с правилами переработки отходов в R создаст столбец NA значений в data.frame(.....), а не то, что вы ожидаете.

Что-то, как это лучший способ организации ваших данных, если вы хотите включить правильные «дату/время» колонки в x.df (с именами строк из x.df провести время, как вы делаете в вашем коде, дает бессмысленные значения, когда вы связываете данные по символам):

x <- list() 

# loop on tickers 
for (i in 1:length(tickers)) { 
    tmp <- get(tickers[i], pos=stockData) # get data from stockData environment 
    colnames(tmp) <- c("Open", "High", "Low", "Close","Volume", "Adjusted") # rename Header for all tables in list 
    tmp$gl <-((Cl(tmp)-Op(tmp))/Op(tmp))*100 # Daily gain loss percentage 
    SMA.n10 <- SMA(tmp[,4],n = 10) # Calculate moving averages (MA) on "Close Price" <-column(4) 
    BBands<- BBands(tmp[,2:4]) 
    tmp <- merge(tmp, SMA.n10, BBands) 

    x[[i]]<-data.frame("time" = index(tmp), coredata(tmp), "Symbol" = tickers[i]) # merge data 

} 
x.df<- do.call(rbind, x) # call rbind to merge all xts objs in a single dataframe 
+0

спасибо FXQuantTrader для обмена знаниями. Я узнал много из вашей ссылки. Ваш пост делает вещи более ясными. – Mark

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

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