【问题标题】:For loop with an xts带有 xts 的 For 循环
【发布时间】:2019-08-19 11:26:00
【问题描述】:

我正在尝试编写一个循环遍历 xts 对象中的打开和关闭值的函数。当 i+1 的收盘价大于 i 的开盘价时,函数应该返回 1。

这里是函数

longsig <- function(x){
    ls <- numeric(length=nrow(x))

    for(i in 1:length(ls)){

        if(Cl(x[i+1]) > Op(x[i])) {
            ls[i] <- 1
        } else {
            ls[i] <- 0
      } 
    }
    return(ls)
}

这是我尝试应用此功能的数据部分。它是一个 xts 对象。

     Open     High      Low    Close
2014-01-03 116.9000 119.6400 114.5300 116.9925
2014-01-10 116.9463 116.9463 111.9700 113.8825
2014-01-17 115.4144 115.5700 112.1500 114.0975
2014-01-24 114.7559 118.3400 114.1500 116.0950
2014-01-31 115.4255 119.0900 115.4255 117.5475
2014-02-07 116.4865 120.7400 116.4865 118.9450

函数返回如下错误

Error in if (Cl(x[i + 1]) > Op(x[i])) { : argument is of length zero

显然我在将此循环应用于 xts 对象时做错了,但我对 xts 的经验非常有限。任何帮助将不胜感激。

【问题讨论】:

    标签: r xts quantmod quantitative-finance quantstrat


    【解决方案1】:

    我强烈建议不要在这种情况下使用循环。一个简单的ifelse 将完成您想做的事情,而且比循环快得多。

    数据:6 天的 AMZN

               AMZN.Open AMZN.High AMZN.Low AMZN.Close AMZN.Volume AMZN.Adjusted
    2019-01-23   1656.00   1657.43  1612.00    1640.02     5225200       1640.02
    2019-01-24   1641.07   1657.26  1631.78    1654.93     4089900       1654.93
    2019-01-25   1670.50   1683.48  1661.61    1670.57     4945900       1670.57
    2019-01-28   1643.59   1645.00  1614.09    1637.89     4837700       1637.89
    2019-01-29   1631.27   1632.38  1590.72    1593.88     4632800       1593.88
    2019-01-30   1623.00   1676.95  1619.68    1670.43     5751700       1670.43
    
    ifelse(Cl(AMZN)-lag(Op(AMZN)) > 0,1,0)
    
               AMZN.Close
    2019-01-23         NA
    2019-01-24          0
    2019-01-25          1
    2019-01-28          0
    2019-01-29          0
    2019-01-30          1
    

    如果你想把它放到一个函数中

    compareOpCl <- function(x){
         ifelse(Cl(x)-lag(Op(x)) > 0,1,0)
     }
    

    会做的。

    【讨论】:

      猜你喜欢
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2013-08-22
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多