2016-11-03 6 views
1

私は列を作成し、残りのリストを基準にして特定の列をランク付けするためのさまざまなシンボルのリストを持っています。リストの列を横切ってランク付け

たとえば、SPYIWMの時系列を含むリストxがあります。各リスト項目について、私はrsiを計算します。次に、各リストに、SPYIWMの間の最小のrsi値にランクを割り当てる新しい列を作成したいとします。

私は常に1のランクを取得しますが、これは正しいとは言えません。そのため、私のコードで何かが間違っている必要があります。私が言ったように、私はrsiのランクが必要です。

library(quantmod) 

stockData <- new.env() 

symbols = c("IWM","SPY") 
getSymbols(symbols, src='yahoo',from = "2016-10-01",to = Sys.Date()) 


x <- list() 
for (i in 1:length(symbols)) { 
    x[[i]] <- get(symbols[i], pos=stockData) # get data from stockData environment 
    x[[i]]$rsi <-RSI(Cl(x[[i]]),14) 
    x[[i]]$rank <- NA 
    x[[i]]$rank<-apply(-x[[i]]$rsi,1,rank) 
} 
+0

'RSI'は14の観測した後、あなたは実際のRSI値を取得することを意味している、14の遅れの値に依存します。したがって、最初の14回の観測には「NA」値があります。これは、ランクと混乱します。ランクを計算する際の最初の14回の観察を無視しますか? –

答えて

0
library(quantmod) 
stockData <- new.env() 

symbols = c("IWM","SPY") 
getSymbols(symbols, src='yahoo',from = "2016-10-01",to = Sys.Date()) 

fulldata <- lapply(symbols, get, pos = stockData) 
closedata <- lapply(fulldata, Cl) 
rsi <- lapply(closedata, RSI, n = 14) # or e.g. n = 2, if RSI based on two periods 

後でランクを使用するためにはrank()RSI()が与える出力のクラスは好きではないので、我々は、data.frameにデータを変換する必要があります。

rsi <- lapply(rsi, as.data.frame) 

RSI()には移動平均をそれらのために計算することができなかったので、NAとなるように第14期間の結果を引き起こし、14の周期の移動平均に依存します。

ランキングを実行中にNA値を処理するオプションがいくつかあります。あなたが最も適した見つけるオプションを使用すると、後でのためのあなたのデータを使用しようとしているかに依存します:

  • あなたがランキングのためにゼロでrsiにすべてNA - 値を置き換えるために選択することができます。

    for(i in 1:length(rsi)){ 
        rsi[[i]][is.na(rsi[[i]])] <- 0 
        } 
    ranks <- lapply(rsi, rank) 
    
  • すべてNA - 値を無視し、単に

    ranks <- lapply(rsi, rank, na.last = NA) 
    
  • Rをランク付けする前にそれらを削除することができます最低ランクまたは最高ランクのいずれかとして、NAの値を指定します。私は1つのデータフレームの中にリストを結合して、行方向ランクを計算するだろう特定の日

    ためシンボル間

    # If NA be put last, use "na.last = TRUE". 
    # If NA be put first, use "na.last = FALSE" 
    ranks <- lapply(rsi, rank, na.last = TRUE) 
    

ランク

rsiDF <- data.frame(rsi) 
rsiDF <- cbind(rsiDF, t(apply(rsiDF, 1, rank))) 

。なお、ここで、結び付いた値を処理する方法と、ランクの計算でNAの値を決定することができます(前述のように、?rank

をあなたは再びリストにそれを回すことを望む場合:

k <- length(symbols) 
interranks <- list() 
for(i in 1:k){ 
    interranks[[i]] <- rsiDF[,c(i, i+k)] 
} 

+0

こんにちは。ご協力ありがとうございました。あなたはrsi14がnaを与えるという点で正しいです。私はより長い時系列を使用するので、問題になることはありません。私はあなたの解決策を試みます。それは良い見え、それの周りに私の頭を取得しようとしている – np2000

+0

また、ケン。他のシンボルと相対的なシンボルのランクを示すリストの各シンボルに別の列を追加するにはどうすればよいですか?たとえば、1日目のスパイの値がiwmのそれよりも低い場合、スパイはランク1を取得し、iwmはランク2を取得します。 – np2000

+0

あなたはシンボル間のランクを探していました。つまり、弾丸ポイントのランクの部分を削除することができますか? –

関連する問題