基于买入xts对象填充持有量

时间:2012-07-26 22:40:35

标签: r finance xts quantmod

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

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

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)

每当我觉得申请变得越来越好时,我会向后退两步。

1 个答案:

答案 0 :(得分: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,则可以逐行检查any 1}:< / p>

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

(如果您需要将{TRUE,FALSE}变为{1,0},则可以通过as.numeric传递输出。