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 でした)
より明確にする必要がある場合は、もう一度試してみます。よろしくアナップ