我正在尝试(重新)建立S& P 500 INDEX的基本预测模型(数据来自雅虎财经)
我对数据集的“排序”遇到了一些困难 在构建data.model期间发生以下错误
xts(new.x,x.index)出错:NROW(x)必须匹配长度(order.by)
经过一些研究后,我意识到问题在于排序,并且它似乎缺乏基础动物园包所需的排序。
有没有一种优雅的方法来解决这个问题?!提前致谢
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)))
答案 0 :(得分: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
需要一个(m x 1)个对象,但是你传递的是一个(m x 2)对象。这是因为GSPC
有两列由Cl
匹配(“关闭”和“调整关闭”)。这也可能会引起其他领域的麻烦......
Cl
期望像getSymbols
返回的对象,其中调整后的关闭列被命名为“已调整”。如果由于某种原因需要使用get.hist.quote
,请在下载数据后重命名“AdjClose”列。
colnames(GSPC) <- c("Open", "High", "Low", "Close","Volume","Adjusted")
Delt(Cl(GSPC),k=1:10) # works now
答案 1 :(得分:2)
## Error in xts(x, order.by = order.by, frequency = frequency, ...
## NROW(x) must match length(order.by)
我浪费了几个小时来遇到这个错误。无论我是否有完全相同的问题,我都会告诉我如何解决这个错误信息,以免它为你节省我的痛苦。
我通过几个导入函数导入了Excel或CSV文件(两者都尝试过),然后尝试将我的数据(作为data.frame或.zoo对象)转换为xts对象并继续收到错误,包括这个错误。
我尝试单独创建一个日期向量,以作为order.by参数传入。我尝试确保data.frame的行的日期向量是相同的。有时它有效,有时它没有,原因我无法解释。即使它确实有效,R也将我的所有数字数据“强制”为字符数据。 (后来给我带来了无穷无尽的问题。我学会了注意强制。)
这些错误一直持续到:
对于xts转换,我使用导入的Excel工作表中的日期列作为order.by参数和as.Date()修饰符,并且I *在<期间删除了日期列 / em>转换为xts。*
这是工作代码:
xl_sheet <- read_excel("../path/to/my_excel_file.xlsx")
sheet_xts <- xts(xl_sheet[-1], order.by = as.Date(xl_sheet$date))
注意我的日期列是第一列,因此xl_sheet [-1]删除了第一列。