ブロッター パッケージを使用してバックテストを実行し、foreach を使用して速度を上げています。関数の開始時に削除されることになっているにもかかわらず、ブロッターが同じ名前のポートフォリオを見つけるというエラーが発生しています。エラーを再現するためのサンプルコードは次のとおりです
require('foreach')
require('doSNOW')
require('xts')
require('blotter')
backtestFunction <- function() {
currency("USD")
stock("AAPL", currency="USD", multiplier=1)
Sys.setenv(TZ="US/Eastern")
verbose = FALSE
try(rm("account.Snazzy","portfolio.Snazzy",pos=.blotter),silent=TRUE)
initPortf("Snazzy", "AAPL", initDate="2014-01-01", currency="USD")
initAcct("Snazzy", portfolios="Snazzy", initDate="2014-01-01", initEq=1000, currency="USD")
return (TRUE)
}
cl <- snow::makeCluster(8, type = "SOCK")
registerDoSNOW(cl)
results <- foreach(i=1:100, .combine=rbind, .packages=c('xts','blotter')) %dopar% {
return (backtestFunction())
}
snow::stopCluster(cl)
ここにエラーがあります
Error in { :
task 9 failed - "Portfolio Snazzy already exists, use updatePortf() or addPortfInstr() to update it."
ポートフォリオとアカウント オブジェクトが .blotter 環境に保存されていることは理解していますが、
- foreach は、競合がないように、ある種の新しい R セッションで各ワーカーを生成しませんか?
- なぜうまくいかなかったの
try(rm("account.Snazzy","portfolio.Snazzy",pos=.blotter),silent=TRUE)
ですか? - ここで foreach をブロッターで動作させるにはどうすればよいですか?
問題があれば、私は R 3.0.2 を使用しており、Windows で RStudio を実行しています。タグに quantstrat を含めています。これらは通常一緒に使用されるため、経験豊富な quantstrat ユーザーは修正を知っている可能性があります。ありがとう