如何解决R:带有吸墨纸的Foreach-找不到对象
我正在基于吸墨纸在 R 中进行简单的回测,%do% 代码运行良好但速度很慢。 当我尝试使用 %dopar% 时,总是会出现以下错误: { 中的错误:任务 1 失败 - “未找到对象 'COKE'” 我发现它可能来自 .blotter 环境,但我无法修复它。 请帮助,如何修复此类错误。 下面是我的代码。谢谢!
require(blotter)
require(foreach)
require(doSNow)
require(quantstrat)
.blotter <- new.env()
initdate <- '2012-01-01'
startdate <- '2012-01-02'
enddate <- '2020-12-31'
mystock <- c('COKE')
getSymbols(Symbols = mystock,from=startdate,to=enddate,index.class='POSIXct')
registerDoSNow(makeCluster(2,'SOCK'))
for (symbol in mystock)
{
sym <- get(symbol)
# sym <- to.weekly(sym,indexAt = 'endof',drop.time = FALSE)
sym$SMA10 <- SMA(Cl(sym),n = 20)
sym$Daily_return <- Delt(Cl(sym))
colnames(sym) <- gsub(pattern = 'sym',replacement = symbol,x = colnames(sym))
assign(symbol,sym)
remove(sym)
}
nr <- nrow(COKE)
currency("USD")
stock("HPG",currency="USD",multiplier=1)
mystrat <- 'test'
initEq <- 10000
sym <- COKE
initPortf(name = mystrat,symbols = mystock,initDate = initdate)
initacct(name = mystrat,portfolios = mystrat,initDate = initdate,initEq = initEq)
backtest <- function (i)
{
symbol <- 'COKE'
currentdate <- time(sym)[i]
# print(currentdate)
# assign(symbol,sym)
if (is.account(mystrat) == FALSE)
{
initPortf(name = mystrat,symbols = mystock)
initacct(name = mystrat,initEq = initEq,initDate = initdate)
}
else
{
updatePortf(Portfolio = mystrat,Dates = currentdate)
updateAcct(name = mystrat,Dates = currentdate)
}
Posn <- getPosQty(Portfolio = mystrat,Symbol = symbol,Date = currentdate)
Daily_return <- as.numeric(sym[i,'Daily_return'])
if (!is.na(Daily_return))
{
if (Posn == 0)
{
if (Daily_return < -0.04)
{
Closeprice <- as.numeric(Cl(sym)[i])
sma10 <- as.numeric(sym[i,'SMA10'])
ordersize <- 50
sell_date <- time(sym)[i+10]
Close_sell <- as.numeric(Cl(sym)[i+10])
addTxn(Portfolio = mystrat,TxnDate = currentdate,TxnQty = ordersize,TxnPrice = Closeprice,TxnFees = 0)
addTxn(Portfolio = mystrat,TxnDate = sell_date,TxnQty = -ordersize,TxnPrice = Close_sell,TxnFees = 0)
} }
} }
foreach(i = 1:(nr-10),.noexport = '.blotter',.packages = c('blotter')) %dopar% {
backtest(i=i)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。