0

我对 R 比较陌生,并且已经阅读了尽可能多的关于该主题的内容,但似乎无法在其他问题上找到我想要的内容。

我希望使用每月数据使用 TTR 和 ROC 计算 12 个周期的变化率(动量),但我想忽略最近一个月。换句话说,我正在寻找 t-2 到 t-12 的 ROC(2016 年 1 月 12 个月的股票动量,不包括 2016 年 1 月)。这是投资组合构建文献中计算动量的规范。

我的数据是所有在南非证券交易所(JSE)上市的股票。日期标题是第一列(即日期是行中的变量),股票列在后续列中。

在此处输入图像描述

我知道我下面的代码非常简单,但是我尝试了一些事情并且他们给出了错误。由于我在 20 年内拥有大约 250 只股票(列),因此不建议为每个观察结果创建一个新的滞后变量。

x <- Prices.df 
x$DATE <- as.Date(x$DATE, format = "%Y/%m/%d") 
y <- xts(x[,-1], order.by = x$DATE) library(TTR) 
roc <- ROC(y, n = 12, type = "discrete")

任何帮助将非常感激。

4

1 回答 1

0

只需使用lag. roc以下代码适用于模拟数据(18 个周期和 2 个资产):

set.seed(123) # to reproduze the same results
x <- data.frame(matrix(rnorm(18*2,100,2),ncol=2)) 
x$DATE <- seq.Date(as.Date("2000/01/01"),length.out = 18,by="1 month") 
x <- x[,c(3,1,2)]
library(TTR) 
library(xts)
y <- xts(x[,-1], order.by = x$DATE) 

roc <- ROC(y, n = 12, type = "discrete")

cbind(y,lag(roc))

                  X1        X2         X1.1         X2.1
1999-12-31  98.87905 101.40271           NA           NA
2000-01-31  99.53965  99.05442           NA           NA
2000-02-29 103.11742  97.86435           NA           NA
2000-03-31 100.14102  99.56405           NA           NA
2000-04-30 100.25858  97.94799           NA           NA
2000-05-31 103.43013  98.54222           NA           NA
2000-06-30 100.92183  98.74992           NA           NA
2000-07-31  97.46988  96.62661           NA           NA
2000-08-31  98.62629 101.67557           NA           NA
2000-09-30  99.10868 100.30675           NA           NA
2000-10-31 102.44816  97.72373           NA           NA
2000-11-30 100.71963 102.50763           NA           NA
2000-12-31 100.80154 100.85293           NA           NA
2001-01-31 100.22137  99.40986  0.019442887 -0.005421782
2001-02-28  98.88832 101.79025  0.006848733  0.003588329
2001-03-31 103.57383 101.75627 -0.041012460  0.040115718
2001-04-30 100.99570 101.64316  0.034279755  0.022018156
2001-05-31  96.06677 101.37728  0.007352244  0.037725848
于 2016-08-07T20:25:34.017 回答