试图创造一个滚动周期 cummax
Trying to create a rolling period cummax
我正在尝试创建一个买入 N 期高点的函数。所以如果我有一个向量:
x = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
我想把滚动 3 周期推高。这就是我希望函数的样子
x = c(1, 2, 3, 4, 5, 5, 5, 3, 4, 5)
我正在尝试在 xts 对象上执行此操作。
这是我尝试过的:
rollapplyr(SPY$SPY.Adjusted, width = 40, FUN = cummax)
rollapply(SPY$SPY.Adjusted, width = 40, FUN = "cummax")
rapply(SPY$SPY.Adjusted, width = 40, FUN = cummax)
我收到的错误是:
Error in `dimnames<-.xts`(`*tmp*`, value = dn) :
length of 'dimnames' [2] not equal to array extent
提前致谢
你很接近。意识到 rollapply
(等人)在这种情况下期望返回一个数字,但 cummax
返回一个向量。让我们追溯一下:
- 当使用
rollapply(..., partial=TRUE)
时,第一遍只是第一个数字:1
- 第二次来电,前两个号码。您期望
2
(这样它将附加到上一步的 1
),但请看 cummax(1:2)
:它的长度为 2。结论从这一步开始:cum
函数很天真,因为它们相对单调:它们在执行 logic/transformation. 时总是考虑包括当前数字在内的所有内容
- 第三次调用,我们第一次访问完整的window(在本例中):考虑
1 2 3
,我们想要3
。 max
有效。
所以我想你想要这个:
zoo::rollapplyr(x, width = 3, FUN = max, partial = TRUE)
# [1] 1 2 3 4 5 5 5 3 4 5
partial
允许我们在继续查看 1-3 的第一个完整 window 之前查看 1 和 1-2。来自帮助页面:
partial: logical or numeric. If 'FALSE' (default) then 'FUN' is only
applied when all indexes of the rolling window are within the
observed time range. If 'TRUE', then the subset of indexes
that are in range are passed to 'FUN'. A numeric argument to
'partial' can be used to determin the minimal window size for
partial computations. See below for more details.
也许将 cummax
等同于
是有帮助的——即使不是完全准确的话
rollapplyr(x, width = length(x), FUN = max, partial = TRUE)
# [1] 1 2 3 4 5 5 5 5 5 5
cummax(x)
# [1] 1 2 3 4 5 5 5 5 5 5
我正在尝试创建一个买入 N 期高点的函数。所以如果我有一个向量:
x = c(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
我想把滚动 3 周期推高。这就是我希望函数的样子
x = c(1, 2, 3, 4, 5, 5, 5, 3, 4, 5)
我正在尝试在 xts 对象上执行此操作。 这是我尝试过的:
rollapplyr(SPY$SPY.Adjusted, width = 40, FUN = cummax)
rollapply(SPY$SPY.Adjusted, width = 40, FUN = "cummax")
rapply(SPY$SPY.Adjusted, width = 40, FUN = cummax)
我收到的错误是:
Error in `dimnames<-.xts`(`*tmp*`, value = dn) :
length of 'dimnames' [2] not equal to array extent
提前致谢
你很接近。意识到 rollapply
(等人)在这种情况下期望返回一个数字,但 cummax
返回一个向量。让我们追溯一下:
- 当使用
rollapply(..., partial=TRUE)
时,第一遍只是第一个数字:1
- 第二次来电,前两个号码。您期望
2
(这样它将附加到上一步的1
),但请看cummax(1:2)
:它的长度为 2。结论从这一步开始:cum
函数很天真,因为它们相对单调:它们在执行 logic/transformation. 时总是考虑包括当前数字在内的所有内容
- 第三次调用,我们第一次访问完整的window(在本例中):考虑
1 2 3
,我们想要3
。max
有效。
所以我想你想要这个:
zoo::rollapplyr(x, width = 3, FUN = max, partial = TRUE)
# [1] 1 2 3 4 5 5 5 3 4 5
partial
允许我们在继续查看 1-3 的第一个完整 window 之前查看 1 和 1-2。来自帮助页面:
partial: logical or numeric. If 'FALSE' (default) then 'FUN' is only
applied when all indexes of the rolling window are within the
observed time range. If 'TRUE', then the subset of indexes
that are in range are passed to 'FUN'. A numeric argument to
'partial' can be used to determin the minimal window size for
partial computations. See below for more details.
也许将 cummax
等同于
rollapplyr(x, width = length(x), FUN = max, partial = TRUE)
# [1] 1 2 3 4 5 5 5 5 5 5
cummax(x)
# [1] 1 2 3 4 5 5 5 5 5 5