在建模量化交易模型时,我经常遇到如何处理 NA 值的相同问题。下面的示例是关于自 1997 年 1 月 1 日以来的 EOD 数据存储在 xts 对象中的股票,该对象具有名为“High”、“Low”、“Close”、“Volume”的四列。数据来自彭博社。当我想计算滚动 20 天的交易量时,会出现错误消息:
SMA(stock$Volume, 20)
Error in runSum(x, n) : Series contains non-leading NAs
我很快找到了问题(我知道这是 NA 值,因为我已经尝试了 1000 次)并找到了丢失体积数据的两天。我在下面复制了那些日子的数据。作为快速观察SMA
,EMA
如果 TTR 中的 等函数前面有数字,后面有数字,则它们无法处理 NA。
stock <- as.xts(matrix(c(94.46,92.377,94.204,NA,71.501,70.457,70.979,NA), 2, 4,
byrow = TRUE, dimnames = list(NULL, c("High","Low","Close","Volume"))),
as.Date(c("1998-07-07", "1999-02-22")))
处理这个问题的最佳方法是什么?是否将其存储stock$Volume
为临时对象,其中 NA 值被删除,然后计算滚动量并将其合并回来,merge.xts
同时添加fill = NA
再次插入 NA 值?但这是否正确,因为您使用了最后 20 个交易日,而不仅仅是 20 天窗口中可用的 19 个交易日?
我希望某种“最佳实践”可以成为这篇文章的结果,因为我认为这个问题也会发生在金融领域的其他 R 用户身上,无论他们是从彭博、雅虎财经还是其他来源获取数据。