3

以下の例では、株式 (IBM) の毎日の価値の下落が 10% を超える場合に、買いシグナル (1) を作成します。

その後、さらに 4 日間保留信号を作成します。保留日数が増えると、コードはより手に負えなくなります。apply 関数または同様の効率のもの (つまり、for ループではない) を使用して、holdsig コードを書き直す方法はありますか?

library(quantmod)
getSymbols("IBM")
buysig <- Lag(ifelse(dailyReturn(IBM) < -.10,1,0))
holdsig <- ifelse( Lag(sig) == 1 | Lag(sig, k=2) == 1 | Lag(sig, k=3) == 1 | Lag(sig, k=4) == 1, 1, 0)

apply で良くなったと感じるたびに、私は 2 歩後退します。

4

1 に答える 1

3

まず、値Lagのベクトルを取ることができることに注意してください。k

head(Lag(buysig, k=1:4)
#            Lag.1 Lag.2 Lag.3 Lag.4
# 2007-01-03    NA    NA    NA    NA
# 2007-01-04    NA    NA    NA    NA
# 2007-01-05     0    NA    NA    NA
# 2007-01-08     0     0    NA    NA
# 2007-01-09     0     0     0    NA
# 2007-01-10     0     0     0     0

これにより、物事が非常に簡単になります。値の が に等しい場合、行ごとに (applyを使用してMARGIN = 1)チェックできます。any1

apply(Lag(buysig, k=1:4) == 1, 1, any)

as.numeric(また、{TRUE,FALSE} を {1,0} に変換する必要がある場合は、出力を渡すことができます)

于 2012-07-26T23:03:32.423 に答える