У меня есть рабочая функция, но при работе в AWS EC2 она использует только одно ядро, и я хочу преобразовать ее в параллельную
Исходная проблема решена (без параллельной) в: применить - проверить несколько условийперед перемещением строк
Я установил Intel MKL на сервер AWS EC2, и он все еще работает с использованием только одного ядра.Я попытался отредактировать код, как показано ниже.
PipSize <- 0.00886
myfun <- function(x, df = EURUSD, Limit = PipSize, StopLoss = PipSize) {
highComp <- which(df$High - df$Open[x] > Limit)
highCompMin <- if(length(highComp) == 0) 0 else min(highComp)
lowComp <- which(df$Open[x] - df$Low > StopLoss)
lowCompMin <- if(length(lowComp) == 0) 0 else min(lowComp)
if(highCompMin == 0 & lowCompMin == 0) {
result <<- c(Limit = NA, Open = df$Open[x])
} else if (highCompMin <= lowCompMin) {
result <<- c(Limit = 1, Open = df$Open[x])
} else {
result <<- c(Limit= 0, Open = df$Open[x])
}
return(result)
}
t(sapply(1:10, function(x) myfun(x, df = EURUSD, Limit = PipSize, StopLoss = PipSize)))
Дополнительный параллельный код, который возвращает ошибку
library("parallel")
library("doParallel")
n.cores <- detectCores()
cl <- makeCluster(n.cores, type="FORK")
clusterExport(cl, "myfun")
parSapply(cl, 1:10, myfun)
stopCluster(clust)
Ошибка:
Error in checkForRemoteErrors(val) :
8 nodes produced errors; first error: can only subtract from "POSIXt" objects
Глава EURUSD:
Date Open High Low Close
1 2016-01-03 17:00:00 1.08701 1.08713 1.08701 1.08713
2 2016-01-03 17:01:00 1.08712 1.08712 1.08712 1.08712
3 2016-01-03 17:02:00 1.08708 1.08722 1.08708 1.08722
4 2016-01-03 17:03:00 1.08717 1.08723 1.08717 1.08723
5 2016-01-03 17:04:00 1.08718 1.08718 1.08711 1.08711
6 2016-01-03 17:05:00 1.08703 1.08716 1.08701 1.08712
7 2016-01-03 17:06:00 1.08721 1.08721 1.08710 1.08710
8 2016-01-03 17:07:00 1.08712 1.08715 1.08712 1.08712
9 2016-01-03 17:08:00 1.08711 1.08720 1.08711 1.08713
10 2016-01-03 17:09:00 1.08716 1.08723 1.08708 1.08708
Предполагаемый результат: если (High-Open> limit), затем вернуть 1, если (Open - Low> StopLoss) вернуть 0. Если ни то, ни другое сравнить ту же цену открытия с максимумом и минимумом следующегопериод.Если возвращается 1 или 0, увеличьте значение Open на + 1 и повторите процесс.