【问题标题】:Error running a quantstrat analysis运行 quantstrat 分析时出错
【发布时间】:2013-06-28 20:14:42
【问题描述】:

我坚持以下分析:

library(quantstrat)

stock_size = 200
tickers = c("XOM", "MCD")
init.date = as.Date("2008-01-01")

usd = "USD"
currency(usd)
for(ticker in tickers){ 
  stock(ticker, currency=usd, multiplier = 1)
}

options("getSymbols.warning4.0"=FALSE)
getSymbols(tickers,from=init.date,to.assign=TRUE)

suppressWarnings(rm(strat, port, acct, ords))

port.name <- "MyPort"
port <- initPortf(port.name,tickers,initDate=init.date)
acct.name <- "MyAcct"
acct <- initAcct(acct.name,portfolios=port.name, initDate=init.date, initEq=35000)
ords <- initOrders(portfolio=port.name,initDate=init.date)

strat.name <- "MyStrat"
strat<- strategy(strat.name)
strat<- add.indicator(strategy = strat, name = "SMA", arguments = list(x=quote(Ad(mktdata)), n=20),label= "ma20" )
strat<- add.indicator(strategy = strat, name = "SMA", arguments = list(x=quote(Ad(mktdata)), n=50),label= "ma50")

strat<- add.signal(strat, name="sigCrossover", arguments = list(columns=c("ma20","ma50"), relationship="gte"), label="ma20.gt.ma50")
strat<- add.signal(strat, name="sigCrossover", arguments = list(column=c("ma20","ma50"), relationship="lt"), label="ma20.lt.ma50")

strat<- add.rule(strategy = strat,name='ruleSignal', arguments = list(sigcol="ma20.gt.ma50", sigval=TRUE, orderqty=stock_size, ordertype='market', orderside='long', pricemethod='market'), type='enter', path.dep=TRUE)
strat<- add.rule(strategy = strat,name='ruleSignal', arguments = list(sigcol="ma20.lt.ma50", sigval=TRUE, orderqty='all', 
ordertype='market', orderside='long', pricemethod='market'), type='exit', path.dep=TRUE)

out<-try(applyStrategy(strategy=strat, portfolios=port.name))
charts.PerformanceSummary()

因为我遇到了这两个错误:

Error in `colnames<-`(`*tmp*`, value = c("XOM.Adjusted.SMA.50", "XOM.Adjusted.SMA.20.ma20.SMA.50" : 
  length of 'dimnames' [2] not equal to array extent
Error in inherits(x, "xts") : argument "R" is missing, with no default

谁能帮我找出问题所在?

【问题讨论】:

  • 这个网站不是“查找我的错误”的地方 - 你需要有一个特定的编程相关问题。
  • @SeñorO IMO,这是一个模型问题。它提供了一个简洁、可重现的示例,看起来几乎与软件包随附的演示相同,但​​是此代码给出了一个错误,并且由于它出现在 quantstrat 代码中的某个位置,因此它的来源并不明显。 SO 正是寻求帮助以找出错误发生原因的地方。

标签: r quantstrat


【解决方案1】:

在当前版本的 TTR 中,MA 指示符返回的列名称以输入列名称为前缀。例如。 SMA(MCD.Adjusted, n=20) 返回名为 MCD.Adjusted.SMA.20 的列。

Ad() 将返回与字符串 Adjusted 匹配的所有列名。

当您的第二个 SMA 指标被调用时,Ad() 将匹配 2 个列名(原始 MCD.Adjusted 列加上第一个的输出列指标MCD.Adjusted.SMA.20)。这会导致维度错误,因为在当前实现中,SMA() 一次只能处理一个输入列。

解决方案是只传递第一个匹配项,在参数列表中使用 quote(Ad(mktdata)[,1])

【讨论】:

  • 非常感谢@Jan Humme,现在脚本继续到第 37 行,那里有 charts.PerformanceSummary()。它显示:Error in inherits(x, "xts") : argument "R" is missing, with no default。有没有办法摆脱最后一个错误?
  • @user601423 你不能在没有参数的情况下调用charts.PerformanceSummaryR 是必需的参数。见?charts.PerformanceSummary
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多