我正在编写一个用于执行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””
答案 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调用中指定用户定义的函数。