2

コードは次のとおりです。

require("quantmod")

getSymbols("SPY")  

ticker <- SPY[,4]

win <- 0 

for(i in 11:NROW(ticker))

j <- i-10

if(ticker[i] > ticker[j])               

win <- win + 1

今日の終値が10日前の終値よりも大きいかどうか、およびwin変数をインクリメントするかどうかを確認したいと思います。私も次のことを試しました:

for(i in 11:NROW(ticker))

if(ticker[i] > ticker[i-10])               

win <- win + 1             

どちらも機能するはずなので、実際には2つの問題があります。最初にそれを機能させるだけでなく、なぜそれらが機能しないのかを理解することも重要です。両方のフラグ「引数の長さはゼロです」。私の勘は、犯人はティッカー[j]またはティッカー[i-10]だということです。主な理由は、ハードコードされた値に置き換えると機能するためです。

4

3 に答える 3

2

問題は、ticker [i]が数値オブジェクトを返さないため、それらを比較したり減算したりできないことです。楽しみのためにこれを試してください:

str(ticker[15])
ticker[15]-ticker[10]

したがって、それらをas.numericでラップするだけで、必要なものが得られます。

require("quantmod")
getSymbols("SPY")  
ticker <- SPY[,4]
win <- 0 
for(i in 11:NROW(ticker)){
    j <- i-10
    if(as.numeric(ticker[i]) > as.numeric(ticker[j])){             
        win <- win + 1
    }
}
于 2011-03-24T02:33:35.470 に答える
1

これは for ループとは関係ありません。これは、操作が実行される前に、xts/zoo がインデックスによって整列されるためです。 ticker[i] > ticker[j]インデックスが異なるため空です。

for ループも必要ありません。シリーズを遅らせることで、これを簡単に行うことができます。

merged.ticker <- merge(ticker, lag(ticker,10))
win <- sum(merged.ticker[,1] > merged.ticker[,2], na.rm=TRUE)
lose <- sum(merged.ticker[,1] < merged.ticker[,2], na.rm=TRUE)
于 2011-03-24T16:27:34.540 に答える
-1

中かっこはあなたの友達、私の友達です。

于 2011-03-24T02:30:49.127 に答える