【问题标题】:numbers are outside valid range when computing MACD and error handling计算 MACD 和错误处理时,数字超出有效范围
【发布时间】: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


【解决方案1】:

Q“...和错误处理”

如果我可以对此加一粒盐,那么错误预防比任何事后错误处理都要好。

为此,[TIME]- 和 [SPACE]-Domains 步骤中都有一个廉价的常量 O(1),主要防止任何此类与错误相关的崩溃:

只需在实例化的 TimeSERIES 数据向量前添加许多常量和过程不变的值单元,使其达到任何向量处理的最大深度,并且主要避免任何此类错误或异常:

  • 处理不变的值,在大多数情况下,是第一个知道的值,要重复多次,根据需要返回,在时间方向上朝着旧的(不存在)柱 (是的,不依赖于NaN-s 以及 NaN-s 如何让我们在对缺失数据敏感的方法中遇到麻烦,如上所述。Q.E.D.)

【讨论】:

  • 对不起,我刚好看到这个答案。我真的不明白它与我的问题直接相关。您是否建议始终尝试寻求预防而不是事后处理?换句话说,在尝试运行任何代码之前,始终确保您已经解决了缺失值问题?
【解决方案2】:

对于那些感兴趣的人,我已经找到了错误的原因:一些股票缺少价格。就这么简单。例如,道指美国股票在过去一年半中只有大约 180 个每日价格(无论出于何种原因),这绝对不能用于计算 360 天的移动平均值。

我基本上是运行小样本,直到最终查明导致错误消息的原因。一般来说,除非您尝试提取超过 6,000 只股票左右的数据并且查询 50 个字段,否则就可以了。根据经验,彭博的每日使用限制据说是学校控制台的 500,000 左右。在一家贸易公司工作的博士同事也告诉我,彭博的专业控制台更宽容。

【讨论】:

    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2021-07-12
    • 2012-06-19
    • 2023-02-03
    • 2017-06-28
    • 2018-07-04
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多