6

S&P 500 INDEX の基本的な予測モデルを (再) 構築しようとしています (データは Yahoo ファイナンスに由来します)

データセットの「順序付け」でいくつかの問題に遭遇しました。
data.model のビルド中に次のエラーが発生します

xts(new.x, x.index) のエラー: NROW(x) は長さ (order.by) と一致する必要があります

いくつかの調査の後、問題は順序付けにあることがわかりました。基盤となるzooパッケージに必要な順序付けが欠けているようです。

この問題を解決するエレガントな方法はありますか?! 前もって感謝します

library(xts)
library(tseries)
library(quantmod)

GSPC <- as.xts(get.hist.quote("^GSPC",start="1970-01-02", 
quote=c("Open", "High", "Low", "Close","Volume","AdjClose")))

head(GSPC)

T.ind <- function(quotes, tgt.margin = 0.025, n.days = 10) {
 v <- apply(HLC(quotes), 1, mean)
 r <- matrix(NA, ncol = n.days, nrow = NROW(quotes))
 for (x in 1:n.days) r[, x] <- Next(Delt(v, k = x), x)
 x <- apply(r, 1, function(x) sum(x[x > tgt.margin | x <
 -tgt.margin]))
 if (is.xts(quotes))
 xts(x, time(quotes))
 else x
}


myATR <- function(x) ATR(HLC(x))[, "atr"]
mySMI <- function(x) SMI(HLC(x))[, "SMI"]
myADX <- function(x) ADX(HLC(x))[, "ADX"]
myAroon <- function(x) aroon(x[, c("High", "Low")])$oscillator
myBB <- function(x) BBands(HLC(x))[, "pctB"]
myChaikinVol <- function(x) Delt(chaikinVolatility(x[, c("High", "Low")]))[, 1]
myCLV <- function(x) EMA(CLV(HLC(x)))[, 1]
myEMV <- function(x) EMV(x[, c("High", "Low")], x[, "Volume"])[, 2]
myMACD <- function(x) MACD(Cl(x))[, 2]
myMFI <- function(x) MFI(x[, c("High", "Low", "Close")], x[, "Volume"])
mySAR <- function(x) SAR(x[, c("High", "Close")])[, 1]
myVolat <- function(x) volatility(OHLC(x), calc = "garman")[, 1]

library(randomForest)
data.model <- specifyModel(T.ind(GSPC) ~ Delt(Cl(GSPC),k=1:10) +
 myATR(GSPC) + mySMI(GSPC) + myADX(GSPC) + myAroon(GSPC) +
 myBB(GSPC) + myChaikinVol(GSPC) + myCLV(GSPC) +
 CMO(Cl(GSPC)) + EMA(Delt(Cl(GSPC))) + myEMV(GSPC) +
 myVolat(GSPC) + myMACD(GSPC) + myMFI(GSPC) + RSI(Cl(GSPC)) +
 mySAR(GSPC) + runMean(Cl(GSPC)) + runSD(Cl(GSPC)))
4

2 に答える 2

7

traceback()Delt(Cl(GSPC),k=1:10)呼び出しでエラーが発生したことを明らかにします。

> Delt(Cl(GSPC),k=1:10)
Error in xts(new.x, x.index) : NROW(x) must match length(order.by)

Delt(mx 1) オブジェクトが必要ですが、(mx 2) オブジェクトを渡しています。これは、 ("Close" と "AdjClose") でGSPC一致する 2 つの列があるためです。Clこれはおそらく他の地域でも頭痛を引き起こすでしょう...

Clによって返されるようなオブジェクトが必要ですgetSymbols。ここで、調整されたクローズ列は「Adjusted」という名前です。何らかの理由で使用する必要がある場合はget.hist.quote、データをダウンロードした後に "AdjClose" 列の名前を変更してください。

colnames(GSPC) <- c("Open", "High", "Low", "Close","Volume","Adjusted")
Delt(Cl(GSPC),k=1:10)  # works now
于 2011-07-06T13:44:39.993 に答える