微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:带有吸墨纸的Foreach-找不到对象

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?