【发布时间】:2020-02-03 02:33:47
【问题描述】:
我正在尝试计算 ( MACD - signal ) / signal 的罗素 1000(这是 1000 只美国大盘股的指数)的价格。我不断收到此错误消息,根本无法弄清楚原因:
Error in EMA(c(49.85, 48.98, 48.6, 49.15, 48.85, 50.1, 50.85, 51.63, 53.5, :n = 360 is outside valid range: [1, 198]
尽管我精通 Python,但我在 R 方面还是相对较新。我想我可以使用“try”来解决这个错误,但我确实想至少了解它的原因。
废话不多说,代码如下:
N<-1000
DF_t<- data.frame(ticker=rep("", N), macd=rep(NA,N),stringsAsFactors=FALSE)
stock<-test[['Ticker']]
i<-0
for (val in stock){dfpx=bdh(c(val), c("px_last"),start.date=as.Date("2018-1-
01"),end.date=as.Date("2019-12-30"))
macd<- MACD( dfpx[,"px_last"], 60, 360, 45, maType="EMA")
num<-dim(macd)[1]
ma<-(macd[num,][1]-macd[num,][2])/macd[num,][2]
i=i+1
DF_t[i,]<-list(val,ma)
}
供您参考,bdh() 是一个 Bloomberg 命令,用于获取历史数据。dfpx[] 是一个数据框。MACD() 是一个函数,它采用价格和输出的时间序列一个矩阵,
其中第一列是 MACD 值,第二列是 signal 值。
非常感谢!任何建议将不胜感激。顺便说一句,该代码适用于几只股票的小样本,但当我尝试将它应用于一千只股票的宇宙时,它会导致错误消息。另外,数据点的数量大约是 500,对于我设置的参数来计算 MACD 应该足够大了。
【问题讨论】:
-
由于代码适用于少量股票,这似乎不是彭博运营的问题吗?也许您的订阅有一些限制?
-
谢谢!但我怀疑这会是原因。如果我要求一个由 1,000 只证券组成的静态历史数据,其中一个字段是收盘价,那么它将是 1,000*7,这比每日数据限制要少很多(据我记得)。我个人从未达到数据限制,尽管我听说一旦发生这种情况,您应该会收到诸如“NA 限制”之类的明确信息。我仍然觉得这应该是一个错误处理的案例。我似乎无法弄清楚导致错误的原因,因为每日收盘价几乎总是可用的。尽管如此,我仍然感谢您的评论。
标签: r error-handling