R

ROC:離散和連續的區別?

  • September 3, 2012

使用 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,似乎大多數函式都假設算術返回。請記住,您擁有原始碼,因此您始終可以看到用於生成每個函式結果的確切計算。

引用自:https://quant.stackexchange.com/questions/4073