我之前试图问一个类似的问题,但我现在发现它缺少回答它所需的信息,所以我现在尝试制作一个可复制的示例。
我想在股票市场上测试动量理论,因此必须做一些动量投资组合。我每天都有股票的回报率和回报率排名。
require(quantmod)
options(scipen=999)
getSymbols(c("YHOO","GOOG","MSFT","AAPL"))
data = merge(AAPL[,4], GOOG[,4], MSFT[,4], YHOO[,4])
return = ROC(data)
RankFUN <- function(x){
r <- as.xts(t(apply(-x, 1, rank, na.last = "keep", ties.method="first"))) #med ties.method = first velger R
return(r) #å gi lavest verdi den først kolonnen
}
Rank = RankFUN(return)
因此,回报和排名组织如下:
AAPL.Close GOOG.Close MSFT.Close YHOO.Close
2016-02-22 0.008708287 0.0078871623 0.015890101 0.0369262336
2016-02-23 -0.022864649 -0.0151325292 -0.028317446 -0.0161711157
2016-02-24 0.014780876 0.0053174777 0.003510848 0.0090880533
2016-02-25 0.006844411 0.0088095040 0.014305232 0.0131601959
2016-02-26 0.001549048 -0.0009639685 -0.015474178 0.0003188267
2016-02-29 -0.002272749 -0.0104075344 -0.008220794 0.0132997523
AAPL.Close GOOG.Close MSFT.Close YHOO.Close
2016-02-22 3 4 2 1
2016-02-23 3 1 4 2
2016-02-24 1 3 4 2
2016-02-25 4 3 1 2
2016-02-26 1 3 4 2
2016-02-29 2 4 3 1
它在这里我遇到问题。我需要能够编写一些代码,使 R 根据时间 t-1 的性能购买 %top 分位数并出售 %bottom,并保持它们直到 t+1,然后重新平衡。是否有任何包或任何东西可以做类似的事情?我看过一些投资组合包,但其中大多数都是针对投资组合优化的。
例如:假设一个策略是您根据 t-1 个月的表现购买股票并每月重新平衡。然后我需要编写一些代码,说明:对于每个 t,给我基于 lag[1] 的顶部分位数 - 底部分位数的输出或类似的东西,输出如下:
1-month mom 3-month mom
2016-02-22 0.008708287 0.0078871623
2016-02-23 -0.022864649 -0.0151325292
2016-02-24 0.014780876 0.0053174777
2016-02-25 0.006844411 0.0088095040
2016-02-26 0.001549048 -0.0009639685
2016-02-29 -0.002272749 -0.0104075344