【问题标题】:Populating an hold based on buy for an xts object为 xts 对象填充基于购买的持有
【发布时间】:2012-07-25 14:48:56
【问题描述】:

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

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

【问题讨论】:

    标签: r finance xts quantmod


    【解决方案1】:

    首先,请注意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
    

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

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

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

    【讨论】:

    • 非常感谢......这些天,在数组处理框之外思考会点击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2023-01-09
    • 1970-01-01
    • 2019-03-19
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多