R
ROC:離散和連續的區別?
使用 R 包 TTR 中的 ROC 函式,可以在連續(預設)和離散之間進行選擇,但沒有關於何時選擇的指導。在程式碼中,區別在於:
roc <- x/lag(x) - 1
相對:
roc <- diff(log(x))
我承認我的數學很弱,但它們不是一回事嗎?
cbind(ROC(x,type='continuous'),ROC(x,type='discrete'),log(x))
給出:
2012-08-16 19:00:00 NA NA 8.673855 2012-08-17 07:00:00 0.00008549566 0.00008549932 8.673940 2012-08-17 08:00:00 0.00000000000 0.00000000000 8.673940 2012-08-17 09:00:00 -0.00085528572 -0.00085492006 8.673085 2012-08-17 10:00:00 0.00034220207 0.00034226063 8.673427 2012-08-17 11:00:00 -0.00102695773 -0.00102643059 8.672400
存在細微差別,但這是真正的差異還是浮點計算的神器?
看起來Quantmod:ROC(Cl(SPY)) 和 ClCl(SPY) 之間有什麼區別幾乎是在問同樣的事情。但那裡的答案似乎是說,一個你會總結回報,而另一個你會乘以它們。顯然,上述數字並非如此。
(順便說一句,沒有人回答他的問題(在評論中)關於 PerformanceAnalytics 包期望哪種形式,這可能已經為您何時選擇提供了線索。)
這是上面的測試數據:
structure(c(5848, 5848.5, 5848.5, 5843.5, 5845.5, 5839.5), class = c("xts", "zoo"), .indexCLASS = c("POSIXct", "POSIXt"), .indexTZ = "", tclass = c("POSIXct", "POSIXt"), tzone = "", index = structure(c(1345143600, 1345186800, 1345190400, 1345194000, 1345197600, 1345201200), tzone = "", tclass = c("POSIXct", "POSIXt")), .Dim = c(6L, 1L), .Dimnames = list(NULL, "Close"))
區別不是浮點運算的神器;這是複利頻率的差異。您的範例中的回報相當接近於零,因此它們看起來並沒有那麼不同。價格的較大變化將導致兩種計算方法之間的較大差異。
Pat Burns 寫了一篇關於算術和對數返回之間區別的不錯的部落格文章,稱為“兩個返回的故事”。我建議您閱讀整篇文章,但相關部分是:
- 對數返回總是小於簡單返回
- 跨資產匯總的簡單回報
- 日誌返回隨時間聚合
- 空頭頭寸的對數回報是多頭頭寸的對數回報的負數。空頭頭寸的簡單回報相對於多頭頭寸的簡單回報的關係要復雜一些: $ -R / (R + 1) $
因此,將收益相加和相乘之間的區別顯然是這兩種方法之間的一個很大區別。關於 PerformanceAnalytics,似乎大多數函式都假設算術返回。請記住,您擁有原始碼,因此您始終可以看到用於生成每個函式結果的確切計算。