Fx

為什麼這個協同集成的籃子看起來好得令人難以置信?

  • August 19, 2011

你需要 R 中的 quantmod & tseries 來執行它:

library(quantmod)
library(tseries)

pairs <- c(
   "EUR/USD",
   "GBP/USD",
   "AUD/USD",
   "USD/CAD",
   "USD/CHF",
   "NZD/USD"
   )

name <- function(n) {
   gsub("/","",n,fixed=TRUE)
}

getFrame <- function(p) {
   result <- NULL
   as.data.frame(lapply(p, function(x) {
       if(!exists(name(x))) {
           getSymbols(x, src="oanda") 
       }
       if(is.null(result)) {
           result <- get(name(x))
       } else {
           result <- merge(result, get(name(x))) 
       }
   }))
}

isStationary <- function(frame) {
   model <- lm(frame[,1] ~ as.matrix(frame[,-1]) + 0)
   spread <- frame[,1] - rowSums(coef(model) * frame[, -1])
   results <- adf.test(spread, alternative="stationary", k=10)
   if(results$p.value < 0.05) {
  		coefficients <- coef(model)
  		names(coefficients) <- gsub("as.matrix.frame.......", "", names(coefficients))
  		plot(spread[1:100], type = "b")
  		cat("Minimum spread: ", min(spread), "\n")
  		cat("Maximum spread: ", max(spread), "\n")
  		cat("P-Value: ", results$p.value, "\n")
       cat("Coeficients: \n")
       print(coefficients)
   }
}

frame <- getFrame(pairs)
isStationary(frame)

我從 Oanda 獲得外匯每日數據,進行簡單的線性回歸以找到對沖比率,然後使用增強 DF 檢驗來測試點差中均值回歸的 P 值。

當我執行它時,我得到了這個:

Minimum spread:  -1.894506 
Maximum spread:  2.176735 
P-Value:  0.03781909 
Coeficients: 
       GBP.USD     AUD.USD     USD.CAD     USD.CHF     NZD.USD 
0.59862816  0.48810239 -0.12900886  0.04337268  0.02713479

EUR.USD 係數為 1。

當我繪製前 100 天的價差時,如下所示:

在此處輸入圖像描述

肯定有什麼地方是錯的。聖杯應該不是那麼容易找到的。

有人可以幫我找出問題所在嗎?

我嘗試使用上述係數作為籃子的手數對 Dukascopy 進行回測,但我遇到了失敗。在杜高斯比中,價差有不同的數量級。這是為什麼?

您的程式碼中的主要問題是這一行:

rowSums(coef(model) * frame[, -1])

我不確定它到底做了什麼,也許是一些矩陣乘法,但絕對不是你期望它做的。嘗試用手動乘法替換它

spread <- frame[,1] - (coef(model)[1]*frame[,2] + coef(model)[2]*frame[,3] + coef(model)[3]*frame[,4] + coef(model)[4]*frame[,5] + coef(model)[5]*frame[,6])

聖杯會消失

不再是聖杯

我還可以看到其他幾個錯誤:

  1. 您不能以 ASK 價格出售。使用 getSymbols.oanda,您總能得到 ASK
  2. 你最好分開測試和訓練數據集

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