3

下面的示例在股票 (IBM) 的每日跌幅超过 10% 时创建买入信号 (1)。

然后它会创建一个额外 4 天的保持信号。如果保留天数增加,代码将变得更加不守规矩。有没有办法使用 apply 函数或类似效率的东西(即,不是 for 循环)重写 holdig 代码?

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)

每次我觉得自己在应用方面变得更好时,我都会后退两步。

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

这使事情变得非常简单:然后您可以逐行检查(applywith MARGIN = 1)如果any值等于1

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

as.numeric(如果需要将 {TRUE,FALSE} 转换为 {1,0},可以通过输出)

于 2012-07-26T23:03:32.423 回答