2

这里有一个非常新的问题,但我已经有一段时间无法找到解决方案了:

我有一个 XTS 交易指标对象(指示),用于股票数据,看起来像

               A           XOM          MSFT
2000-11-30   -0.59        0.22          0.10
2000-12-29    0.55       -0.23          0.05
2001-01-30   -0.52        0.09         -0.10

并且对应时期的具有相同索引的表返回(return)看起来像

               A           XOM          MSFT
2000-11-30   -0.15        0.10          0.03
2000-12-29    0.03       -0.05          0.02
2001-01-30   -0.04        0.02         -0.05

我已经对指标表进行了排序,并让它返回列名,代码如下:

indicate.label <- colnames(indicate)
indicate.rank <- t(apply(indicate, 1, function(x) indicate.label[order(-x)]))    
indicate.rank <- xts(indicate.rank, order.by = index(returns))

其中给出了按交易指标排名的符号名称表 ( indicate.rank ):

               1            2            3
2000-11-30    XOM         MSFT           A
2000-12-29     A          MSFT          XOM
2001-01-30    XOM          A            MSFT

我还想要一个表格,根据指标排名给出期间回报:

2000-11-30    0.10         0.03         -0.15
2000-12-29    0.03         0.02         -0.05
2001-01-30    0.02        -0.04         -0.05

我无法弄清楚如何为所有行调用正确的符号,或者只是根据指示的顺序对返回进行排序。

感谢您的任何建议。

特雷弗·J

4

1 回答 1

1

我对这个解决方案不是特别满意,但它确实有效。

row.rank <- t(apply(indicate, 1, order, decreasing=TRUE))
indicate.rank <- return.rank <- indicate  # pre-allocate
for(i in 1:NROW(indicate.rank)) {
  indicate.rank[i,] <- colnames(indicate)[row.rank[i,]]
  return.rank[i,] <- return[i,row.rank[i,]]
}

如果每个交易品种的收益和指标位于同一个对象中,则处理此问题可能会更容易,但我不知道这将如何适应您的工作流程的其余部分。

于 2011-05-11T01:47:06.553 回答