找不到每个循环中在内部声明的函数

时间:2019-06-03 13:41:29

标签: r trading

我正在编写一个用于执行Jtst的Rscript来进行配对交易。我声明了一个函数来首先找出两只股票之间的相关性,然后为每个循环添加一个以执行股票列表的任务但是,for每个循环都无法识别第一个功能。

我尝试按照Internet上的信息建议使用doSHOW功能,但是它不起作用。


pkgs <- list("quantmod", "doParallel", "foreach", "urca")
lapply(pkgs, require, character.only = T)
registerDoParallel(cores = 4)

jtest <- function(t1, t2) {
  start <- sd
  getSymbols(t1, from = start)
  getSymbols(t2, from = start)
  j <- summary(ca.jo(cbind(get(t1)[, 6], get(t2)[, 6])))
  r <- data.frame(stock1 = t1, stock2 = t2, stat = j@teststat[2])
  r[, c("pct10", "pct5", "pct1")] <- j@cval[2, ]
  return(r)
}

pair <- function(lst) {
  d2 <- data.frame(t(combn(lst, 2)))
  stat <- foreach(i = 1:nrow(d2), .combine = rbind) %dopar% jtest(as.character(d2[i, 1]), as.character(d2[i, 2]))
  stat <- stat[order(-stat$stat), ]
  rownames(stat) <- NULL
  return(stat)
}

sd <- "2018-01-01"
tickers <- c("FITB", "BBT", "MTB", "STI", "PNC", "HBAN", "CMA", "USB", "KEY", "JPM", "C", "BAC", "WFC")
pair(tickers)

jtest(as.character(d2 [i,1]),as.character(d2 [i,2]))中的错误:   任务1失败-“找不到函数“ jtest””

1 个答案:

答案 0 :(得分:1)

在foreach调用中指定必要的功能之前,我遇到了同样的问题。该函数应该会产生时间序列变量的滞后。

此版本不起作用:

 Ylag = foreach(i = 1:maxlagsY,.combine = 'cbind') %dopar%{mylag(Y,k = i)}

虽然这样做:

Ylag = foreach(i = 1:maxlagsY,.export = "mylag",.combine = 'cbind') %dopar%{mylag(Y,k = i)}

因此,答案是在foreach调用中指定用户定义的函数。