首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有blotter / quantmod /quanstrat的警告消息--不兼容的方法("Ops.POSIXt","Ops.Date")

带有blotter / quantmod /quanstrat的警告消息--不兼容的方法("Ops.POSIXt","Ops.Date")
EN

Stack Overflow用户
提问于 2016-07-20 15:29:55
回答 1查看 388关注 0票数 1

很抱歉,因为这个长邮差,我不知道怎么减少它。

我已经开始使用Guy的本教程的吸墨机/ quanstrat包。如果我用的是Yollin先生的代码,不用担心我会得到类似的结果。

代码语言:javascript
复制
library(blotter)
currency("USD")
initDate <- "2000-01-01"
startDate <- "2000-01-02"
endDate <- "2016-07-01"
initEq <- 1e6  

我所做的唯一改变是使用本地存储在.csv上的数据,使用系统投资者在他的Github上给出的稍微修改的函数。

这是函数。

代码语言:javascript
复制
getSymbols.sit <- function(
  Symbols, 
  env = .GlobalEnv, 
  auto.assign = TRUE, 
  stock.folder = 'Google Drive/Software/TechnicalAnalysis/StockData',
  stock.date.format = '%Y-%m-%d',
  ...) 
{
  require(quantmod)
  for(i in 1:length(Symbols)) {
    s = Symbols[i]
    temp = list()
    temp[[ s ]] = list(src='csv', format=stock.date.format, dir=stock.folder)
    setSymbolLookup(temp)
    temp = quantmod::getSymbols(s, env = env, auto.assign = auto.assign)    
    if (!auto.assign) {
      cat(s, format(range(index(temp)), '%d-%b-%Y'), '\n', sep='\t')  
      return(temp)
    }
    if(!is.null(env[[ s ]]))
      cat(i, 'out of', length(Symbols), 'Reading', s, format(range(index(env[[ s ]])), '%d-%b-%Y'), '\n', sep='\t')  
    else
      cat(i, 'out of', length(Symbols), 'Missing', s, '\n', sep='\t')  
  }
}

那就叫它。

代码语言:javascript
复制
getSymbols.sit("SPY", source = "yahoo", from=startDate, to=endDate, adjust=T)

到目前为止,一切似乎都正常。现在继续建立背测试的基础上,10个月的SMA从费伯。

代码语言:javascript
复制
stock("SPY", currency = "USD", multiplier = 1)
SPY=to.monthly(SPY, indexAt = 'endof', drop.time = FALSE)
SPY$SMA10m <- SMA(Cl(SPY), n=10)
portfolio.st <- "portf.faber"
account.st <- "acct.faber"
initPortf(portfolio.st, "SPY", initDate = initDate)
initAcct(account.st, portfolios = portfolio.st, initDate = initDate, initEq = initEq)

现在制定战略并运行它。

代码语言:javascript
复制
for(i in 1:nrow(SPY))
{
  #set up all the values for the specific date and update them in the loop
  actualDate <- time(SPY)[i]
  equity = getEndEq(Account = account.st, Date = actualDate)
  closePrice <- as.numeric(Cl(SPY[i]))
  posn <- getPosQty(Portfolio = portfolio.st, Symbol = "SPY", Date = actualDate)
  unitSize = as.numeric(trunc(equity/closePrice))
  ma <- as.numeric(SPY$SMA10m[i])

  #Take market decision
  if( !is.na(ma) ) { #we have to wait to have our first 10sma
    if( posn == 0 ) { #if no position then we go long
      if( closePrice > ma ) {
        addTxn(Portfolio = portfolio.st, Symbol = "SPY", TxnDate = actualDate,
               TxnQty = unitSize, TxnPrice = closePrice, TxnFees = 0) }
    } else {
      if( closePrice < ma ) { #sell share and go cash if closing price < 10sma
          addTxn(Portfolio = portfolio.st, Symbol = "SPY", TxnDate = actualDate,
                 TxnQty = -posn, TxnPrice = closePrice, TxnFees = 0)
      } else {
        if( i == nrow(SPY) ) #last recorded price, we close the system
        addTxn(Portfolio = portfolio.st, Symbol = "SPY", TxnDate = actualDate,
               TxnQty = -posn, TxnPrice = closePrice, TxnFees = 0)
      }
    } 
  } 
  updatePortf(portfolio.st, Dates = actualDate)
  updateAcct(name = account.st, Dates = actualDate)
  updateEndEq(Account = account.st, actualDate)   
}

尽管脚本运行过程中没有错误,但有三件事我正在关注。

  1. 使用getSymbols.sit()时发出的警告。我不知道该怎么办。这是警告。

1读取间谍03-2000年1月19-2016年7月-2016年警告消息: if (as.character(sc[1]) != calling.fun)返回():条件长度>1,只使用第一个元素

  1. 运行最后3个更新函数时的警告。

有50个或更多警告(使用警告()查看前50) 1:在updatePortf(portfolio.st,Date= actualDate)中:不兼容的方法("Ops.POSIXt","Ops.Date")表示">=“

  1. 如果我使用checkBlotterUpdate (如本教程中所示)函数,则会得到一个错误。

checkBlotterUpdate(portfolio.st,account.st) 1“组合P&L与符号P&L”1 FALSE之和不匹配

因此,我似乎不得不担心这些警告,但我不知道如何解决这个问题。

如果只使用getSymbols("SPY")运行整个过程,就不会有任何问题。但我真的希望能够使用本地存储的数据进行回溯测试。我住在赞比亚,非洲和互联网/电力并不总是可靠的。提前谢谢你的提示。

EN

回答 1

Stack Overflow用户

发布于 2017-01-11 21:37:27

我已经向quantmod github提交了一个拉请求。您现在有四个关于警告#1的选项:

  • 您可以忽略警告(如果您正在获取数据)
  • 您可以通过调用getSymbols (不指定名称空间)而不是quantmod::getSymbols来避免警告#1
  • 您可以从我的集散地构建源代码。
  • 你可以等待@乔舒亚-乌尔里希合并我的拉请求。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38484728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档