2017-02-07 2 views
1

Hy Community, das ist mein Code. Es läuft ohne Fehler oder Warnung. Übrigens, wenn Sie auf x.df (endgültige Datenbank) schauen, ist bei SMA & Bollinger Bands Spalten etwas falsch. Sie sind beide "NA" gefüllt. Dann löscht BBands einige Spalten nach der Zusammenführung. Was ist los?Loop-Funktion & 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 

Dank

EDIT: Mein Ziel ist es, einen einzelnen Datenrahmen (x.df) mit den folgenden Spalten zu erhalten:

"Öffnen", "Hoch", "Niedrig",“ Close "," Volume "," Adjusted ", Symbol," SMA10 "," dn "," mavg "," auf "," pctB ".

Aber wenn Sie den Code ausführen, können Sie NA-Werte auf SMA-Säulen sehen. ThentEs gibt keine Spur über "dn", "mavg", "up", "pctB" (Bollinger Bands Werte).

+0

beschreiben mehr ... –

Antwort

1

Dies korrigiert einige Fehler im Code:

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 

Sie über die Unterschiede zwischen subsetting Vektoren lernen sollten, Listen, Datenrahmen mit [] und [[]]. Ich empfehle diese Ressource für das Lernen mehr: http://adv-r.had.co.nz/Subsetting.html

coredata(SMA.n10) die zugrundeliegende Matrix von Werten gibt, die als Werke NANROW(SMA.n10) == NROW(x[[i]]) während SMA.n10[[i]] kehrt vorgesehen erwartet und mit Recycling-Regeln in R wird eine Spalte von NA Werte in data.frame(.....) schaffen, nicht das, was du erwartest.

So etwas ist eine bessere Möglichkeit, Ihre Daten zu arrangieren, wenn Sie eine richtige „Zeit/Datum“ -Spalte in x.df (mit den Zeilennamen von x.df enthalten sein sollen, die Zeiten zu halten, wie Sie in Ihrem Code zu tun, gibt unsinnige Werte, wenn Sie Daten über Symbole sind verbindlich):

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

danke FXQuantTrader Wissen für den Austausch. Ich habe viel von deinem Link gelernt. Ihr Beitrag macht die Dinge klarer. – Mark

Verwandte Themen