3
 x<- xts(c(1, 1.1, 1.2, 1.3, 1.4, -.9, 1.2), Sys.Date()-7:1)

x我想要一个列,它提出了下面提到的结果。

x
           [,1]           max high
2013-07-07  1.0              1.0
2013-07-08  1.1              1.1 
2013-07-09  1.2              1.2
2013-07-10  1.3              1.3
2013-07-11  1.4              1.4
2013-07-12  0.9              1.4
2013-07-13  1.2              1.4

如果我使用rollapply function我必须保持宽度固定,但我想要每个日期的最大值。rollapply不管用。我想使用类似 rollapply(x, [1:i], max) 的东西,其中 i 代表否。的行。我得到的答案是要获得 max.high 我应该使用 cummax 并且它工作得很好。由于我被禁止在此论坛中提出新问题,因此我将在此问题中添加我的问题。我不知道这是否正确,但我没有其他方法可以做到这一点。

x<- xts(c(100,98,105,100,99,98,96,95,94,93,99,100,106), Sys.Date()-13:1) colnames(x)<- "值" x$max<- cummax(x$value) x$trade<- ifelse(x$max*0.95>=x$value,1,0) x value max trade trade1 2013-07-05 100 100 0 0 2013-07-06 98 100 0 0 2013-07-07 105 105 0 0 2013-07-08 100 105 0 0 2013-07-09 99 105 1 1 2013-07-10 98 105 1 0 2013-07-11 96 105 1 0 2013-07- 12 95 105 1 0 2013-07-13 94 105 1 1 2013-07-14 93 105 1 0 2013-07-15 99 105 1 -1 2013-07-16 100 105 0 0 2013-07-17 106 106 0 -1

直到列交易,我的代码有效,但我需要另一个列 trade1,它基于如果 value 至少小于列 max 的 5%,trade1 列将为 1 的逻辑,然后当 value 列是时它会再次给我 1至少比列最大值的 10%,并且当值从值 94 上升 5% 或更多时(因为当 trade1 列为 1 时,值列是 94),trade1 列应该给我 -1,当列值时再次给我从值 99 上升 10% 或更多(当 trade1 列为 1 时,值列再次为 99)

如果有人需要更清楚,我会再次尝试这样做。关于阿努普

4

2 回答 2

8

cummax计算扩展(而不是滚动)窗口的最大值。

cummax(x)
#            [,1]
# 2013-07-07  1.0
# 2013-07-08  1.1
# 2013-07-09  1.2
# 2013-07-10  1.3
# 2013-07-11  1.4
# 2013-07-12  1.4
# 2013-07-13  1.4
于 2013-07-14T08:48:05.120 回答
2

您可以使用TTR包中的 runMax。xts我发现它对时间序列非常有用。

> x<- xts(c(1, 1.1, 1.2, 1.3, 1.4, -.9, 1.2), Sys.Date()-7:1)
> colnames(x) <- "value"
> x$max.high <- runMax(x$value , 4) # change this parameter to match your needs
> x
           value max.high
2013-07-07   1.0       NA
2013-07-08   1.1       NA
2013-07-09   1.2       NA
2013-07-10   1.3      1.3
2013-07-11   1.4      1.4
2013-07-12  -0.9      1.4
2013-07-13   1.2      1.4

> x$max.high <- ifelse(is.na(x$max.high) , x$value , x$max.high)
> x
           value max.high
2013-07-07   1.0      1.0
2013-07-08   1.1      1.1
2013-07-09   1.2      1.2
2013-07-10   1.3      1.3
2013-07-11   1.4      1.4
2013-07-12  -0.9      1.4
2013-07-13   1.2      1.4
于 2013-07-14T08:47:02.353 回答