根据动量策略的条件滚动滚动替换值

时间:2020-04-08 00:58:51

标签: r apply xts zoo performanceanalytics

我对R很陌生,需要您的帮助!

我正在尝试使用R中的CRSP数据构建动量策略。在我的代码中,我创建了一个xts矩阵,该矩阵包含基于资产每月回报的排名。我的下一步是,如果排名高于N,则将所有排名替换为NA。这样,我就可以制定一种动量策略,对N个表现最佳的股票进行投资。

但是,我的问题是我想投资样本中10%的最佳股票。由于行的长度每个月都在变化,因此无法应用N = ncol(x)/10。我当时正在考虑应用一个rollapply函数,该函数计算该行的最佳n:((ncol(x)-rowSums(is.na(x))/10),并用NA替换与该值有关的所有值,但是我做的每种方法都做到了不能正常工作,我绝对不知道我的方法是否正确。您能帮我使用该功能吗?

我将添加我的代码以阐明我的观点。我还对短向量应用了相同的策略,在该向量中,排名被颠倒了,其余值被替换为-1。我很高兴能改善我的策略:)

ranking <- as.xts(t(apply(-monthly.returns12, 1, rank, na.last = "keep")))

lag.ranking <- lag(ranking, k = 1, na.pad = TRUE)

lag.ranking <- as.matrix(lag.ranking)

lag.ranking[lag.ranking > n] <- NA

lag.ranking[lag.ranking <= n] <- 1

long <- as.matrix(monthly.returns) * lag.ranking

vec.long.ret <- rowMeans(long, na.rm = TRUE)

vec.long.ret <- xts(x = vec.long.ret, order.by = index(monthly.returns))

0 个答案:

没有答案