r - 基于 xts 对象的购买填充保留

标签 r finance xts quantmod

当股票 (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)

每当我觉得自己在 apply 上变得更好时,我就会后退两步。

最佳答案

首先,请注意 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 with MARGIN = 1)值等于 1:

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

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

关于r - 基于 xts 对象的购买填充保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11679084/

相关文章:

r - ggvis 是否可以交互地更改 x 轴和 y 轴的变量?

mysql - MYSQL中收盘价的简单移动平均计算和更新表

web-services - 通过Yahoo Finance按行业获取股票

r - 应用apply.quarterly()后设置每个季度的第一个月为索引

r - R 中 apply.monthly 的每月操作时间序列

R - 每列与其他列的滚动相关性

在 R 循环中重新编码变量

r - 大虚线geom_line,但点更靠近

r - 为什么unsplit这么慢

azure - 有人可以通过无限 HTTP 循环增加 Azure Web App 的成本吗?