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) のようなものを使用したいと思います。ここで、私は no を表します。行の。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 値 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

列の取引まで、私のコードは機能しますが、値が列の最大値から少なくとも 5% 未満の場合、trade1 列が 1 になるというロジックに基づいた別の列 trade1 が必要です。値列が列の最大値から少なくとも 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

パッケージから runMax を使用できTTRます。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 に答える