r语言 - ATR()(来自 TTR 包):下标越界,检查无法修复



我有一个数据帧(raw.Delta):

Time Open High Low Close
1 12/18/2022 6:02:29 PM    1    1   1     1
2 12/18/2022 6:04:53 PM    1   43 -17     7
3 12/18/2022 6:06:46 PM    7  130  -6    92
4 12/18/2022 6:09:01 PM   92  145  68   124
5 12/18/2022 6:11:30 PM  124  205 118   135
6 12/18/2022 6:14:41 PM  135  179 117   130

…我想打电话给ATR,就像这样…

delta <- raw.Delta %>%
mutate(dATR=ATR(c("High", "Low", 
"Close"), n=50, maType="SMA"))

每次我得到....

Error in `mutate()`:
! Problem while computing `dATR = 
``ATR(c("High", "Low", "Close"), n = 50, maType = "SMA")`.
Caused by error in `HLC[-NROW(HLC), 3]`:
! subscript out of bounds``

…即使我尝试:

mutate(dATR=ifelse(nBar>50,ATR(c("High", 
"Low", "Close"), n=50, 
maType="SMA"),0))

则会抛出相同的错误。我也试过不指定"maType",我试过简单地使用"Close"而不是c("H","L"," c ")。我觉得我已经尝试了每一种组合来让它工作。仅供参考…

SMA(raw.Delta, n=50)

…即使它也有一个回顾期,我甚至不需要检查柱号以确保系列中有足够的柱,它只是在我的df中创建一个新列(当被mutate调用时),其中前50个值是NA,我相信这也是ATR的预期行为。

无论如何,我希望我已经提供了足够的信息,让人们能够发现问题。谢谢。

%>%将LHS作为第一个参数传递给ATR()。所以你的代码和ATR(raw.Delta, n = 50, maType = "SMA", c("High", "Low", "Close"))一样,这不是你想要的。

这个应该可以工作:

raw.Delta %>%
mutate(dATR = ATR(.[, c("High", "Low", "Close")], n = 50, maType = "SMA"))
# or use quantmod::HLC() to grab the high, low, close columns
raw.Delta %>% mutate(dATR = ATR(HLC(.), n = 50, maType = "SMA"))

最新更新