我有一个数据帧(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"))