2017-02-07 9 views
1

Hyコミュニティ、それは私のコードです。エラーや警告なしで実行されます。 ところで、x.df(最終的なデータベース)を見れば、SMA & Bollinger bandsの列に間違ったことがあります。 どちらも「NA」で埋められています。次に、BBandsはマージ後にいくつかの列を削除します。 どうしたの?ループ機能と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: 私の目標は、次の列を持つ単一のデータフレーム(x.df)を得ることである:

"オープン"、 "高"、 "低"、」 「ボリューム」、「調整済み」、シンボル、「SMA10」、「dn」、「mavg」、「up」、「pctB」の各項目が表示されます。

ただし、コードを実行すると、SMA列にNA値が表示されます。 ThentThereには "dn"、 "mavg"、 "up"、 "pctB"(Bollinger Bandsの値)に関するトレースはありません。

+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 

あなたはサブセットベクトル、リスト、[][[]]とデータフレームとの違いについて学ぶ必要があります。私はより多くを学ぶために、このリソースをお勧めします。http://adv-r.had.co.nz/Subsetting.html

coredata(SMA.n10)は期待提供NROW(SMA.n10) == NROW(x[[i]])SMA.n10[[i]]しばらく戻っNAとして、そしてRにおけるリサイクルのルールと連動した値の根底にある行列は、data.frame(.....)NA値の列を作成します返し、ないものをあなたは期待しています。

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