【问题标题】:How to handle 'Series contains non-leading NAs' in TTR library with xts objects?如何使用 xts 对象处理 TTR 库中的“系列包含非领先的 NA”?
【发布时间】:2012-10-15 20:37:25
【问题描述】:

在为量化交易模型建模时,我经常遇到同样的问题,即如何处理 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 次)并找到了丢失体积数据的两天。我在下面复制了那些日子的数据。快速观察一下,如果 TTR 中的 SMAEMA 等函数前面有数字,后面有数字,则它们无法处理 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 用户身上,无论他们是从彭博、雅虎财经还是其他来源获取数据。

【问题讨论】:

  • 这更像是一个“如何处理缺失数据”的问题,而不是一个编程问题。 TTR 不会自动执行此操作,因为无法知道哪种类型的插补方法适用于任何给定的用例。
  • 你说得对,约书亚。这本身不是一个编程问题,但它是临界的,因为您必须编写一个脚本来最好地处理在金融时间序列中一直发生的数据丢失问题。如果未正确处理丢失的数据,您的回测结果可能会产生误导。有没有更好的论坛来解决这类问题?
  • 我也想听听其他人如何处理这个问题。我有一个类似的问题,请参阅stackoverflow.com/questions/11897169/…(还没有答案标记为正确,因为我相信必须有更好的解决方案。)

标签: r xts


【解决方案1】:

我不知道“最佳实践”,但一种替代方法可能是所谓的“非均匀时间序列运算符”,如 Operators on Inhomogeneous Time Series 中所述。

这类问题非常适合 Quantitative Finance 堆栈交换网站(例如,请参阅 How to update an exponential moving average with missing values?)。

【讨论】:

    【解决方案2】:

    获取包含 NA 的初始时间序列,例如 a.ts 通过使用 na.approx 一个通用函数来近似 NA,用于将每个 NA 替换为插值(动物园包文档中的更多详细信息)

    b.ts=na.approx(a.ts)
    

    b.ts是时间

    【讨论】:

      【解决方案3】:

      试试na.omit

      我遇到了同样的问题,这为我解决了问题。

      【讨论】:

        猜你喜欢
        • 2018-03-12
        • 2021-04-01
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        • 2020-12-24
        相关资源
        最近更新 更多