2012-11-23 27 views
4

計算(n x m)xts對象回報的最直接方法是什麼?計算多列xts對象的回報率

當我將(n x m)xts對象mxts加入quantmod函數dailyReturn時,返回值是一個(n x 1)向量,表示第一列的返回值。我正在尋找的是一種生成包含mxts每列的各自返回向量的(n x m)xts對象的方法。

我曾嘗試與一些應用功能的工作,如

lapply(mxts,dailyReturn) 

但回報總是有錯誤的類型,並失去了他們的標記(dailyReturn「每日改變colnames向量的值。返回「)。

有沒有一個簡單的,非hacky的方式來實現這一目標?我可能對這個問題使用了錯誤的函數?

+0

我喜歡約書亞的'TTR :: ROC',但試試這個'do.call(cbind,lapply(mxts,dailyReturn))' – GSee

回答

3

TTR軟件包中的ROC函數會執行此操作,但您可以使用lag(這是ROC的內部操作)輕鬆地進行計算。

R> require(quantmod) # loads TTR 
R> getSymbols("SPY") 
R> head(ROC(OHLC(SPY))) 
       SPY.Open  SPY.High  SPY.Low  SPY.Close 
2007-01-03   NA   NA   NA   NA 
2007-01-04 -0.0071963059 -5.686021e-03 0.0002845153 0.0021198425 
2007-01-05 0.0007078143 -4.586355e-03 -0.0016370693 -0.0080082636 
2007-01-08 -0.0036151023 7.071886e-05 -0.0009264869 0.0046143553 
2007-01-09 0.0034735795 1.342709e-03 0.0010689472 -0.0008502799 
2007-01-10 -0.0051793368 -2.118869e-04 -0.0007125045 0.0033261416 
+2

注意'ROC'計算由默認的日誌回報,但可以被稱爲'type ='discrete''給出與'dailyReturn'相同的結果 – GSee

+0

謝謝,這是完美的。 – Julian