R: Quantstrat - Guy Yollin 示例 - 错误消息
R: Quantstrat - Guy Yollin example - error message
我试过运行下面的代码
library(quantstrat)
library(blotter)
search()
currency("USD")
stock("SPY", currency = "USD", multiplier = 1)
ls(envir = FinancialInstrument:::.instrument)
ls(all=T)
initDate <- '1997-12-31'
startDate <- '1998-01-01'
endDate <- '2014-06-30'
initEq <- 1e6
Sys.setenv(TZ = "UTC")
options("getSymbols.yahoo.warning"=FALSE)
getSymbols('SPY', from = startDate, to = endDate, index.class = "POSIXct", adjust = T)
SPY$SMA10m <- SMA(Cl(SPY), 10)
#rm.strat(qs.strategy)
qs.strategy <- "qsFaber"
initPortf(qs.strategy, 'SPY', initDate = initDate)
initAcct(qs.strategy, portfolios = qs.strategy, initDate = initDate, initEq = initEq)
initOrders(portfolio = qs.strategy, initDate = initDate)
strategy(qs.strategy, store = TRUE)
strat <- getStrategy(qs.strategy)
add.indicator(
strategy = qs.strategy,
name = "SMA",
arguments = list(
x = quote(Cl(mltdata)),
n=10),
label = "SMA10"
)
add.signal(
qs.strategy,
name = "sigCrossover",
arguments = list(
columns = c("Close", "SMA10"),
relationship = "gt"),
label = "Cl.gt.SMA"
)
add.signal(
qs.strategy,
name = "sigCrossover",
arguments = list(
columns = c("Close", "SMA10"),
relationship = "lt"),
label = "Cl.lt.SMA"
)
add.rule(
qs.strategy,
name = "ruleSignal",
arguments = list(
sigcol = "Cl.gt.SMA",
sigval = TRUE,
orderqty = 900,
ordertype = "market",
orderside = "long"),
type = "enter"
)
add.rule(
qs.strategy,
name = "ruleSignal",
arguments = list(
sigcol = "Cl.lt.SMA",
sigval = TRUE,
orderqty = "all",
ordertype = "market",
orderside = "long"),
type = "exit"
)
applyStrategy(strategy = qs.strategy, portfolios = qs.strategy)
我收到以下错误消息:
Error in has.Cl(x) : object 'mltdata' not found
谁能解释为什么我会收到这个错误?非常感谢任何提要或回复!
这里:
add.indicator(
strategy = qs.strategy,
name = "SMA",
arguments = list(
x = quote(Cl(mltdata)),
n=10),
label = "SMA10"
)
应该是mktdata
。但即使那样你也没有指定它。因此,尝试修改为x = quote(Cl(SPY))
.
在您的 'add.indicator' 函数中,您在参数列表中指定了 mltdata
的收盘价 (Cl
)。但是,脚本中没有其他地方定义 'mltdata' 。我确实看到您下载了 SPY
,因此您可能需要更新示例脚本以反映您正在使用的数据。
~贾斯汀
我试过运行下面的代码
library(quantstrat)
library(blotter)
search()
currency("USD")
stock("SPY", currency = "USD", multiplier = 1)
ls(envir = FinancialInstrument:::.instrument)
ls(all=T)
initDate <- '1997-12-31'
startDate <- '1998-01-01'
endDate <- '2014-06-30'
initEq <- 1e6
Sys.setenv(TZ = "UTC")
options("getSymbols.yahoo.warning"=FALSE)
getSymbols('SPY', from = startDate, to = endDate, index.class = "POSIXct", adjust = T)
SPY$SMA10m <- SMA(Cl(SPY), 10)
#rm.strat(qs.strategy)
qs.strategy <- "qsFaber"
initPortf(qs.strategy, 'SPY', initDate = initDate)
initAcct(qs.strategy, portfolios = qs.strategy, initDate = initDate, initEq = initEq)
initOrders(portfolio = qs.strategy, initDate = initDate)
strategy(qs.strategy, store = TRUE)
strat <- getStrategy(qs.strategy)
add.indicator(
strategy = qs.strategy,
name = "SMA",
arguments = list(
x = quote(Cl(mltdata)),
n=10),
label = "SMA10"
)
add.signal(
qs.strategy,
name = "sigCrossover",
arguments = list(
columns = c("Close", "SMA10"),
relationship = "gt"),
label = "Cl.gt.SMA"
)
add.signal(
qs.strategy,
name = "sigCrossover",
arguments = list(
columns = c("Close", "SMA10"),
relationship = "lt"),
label = "Cl.lt.SMA"
)
add.rule(
qs.strategy,
name = "ruleSignal",
arguments = list(
sigcol = "Cl.gt.SMA",
sigval = TRUE,
orderqty = 900,
ordertype = "market",
orderside = "long"),
type = "enter"
)
add.rule(
qs.strategy,
name = "ruleSignal",
arguments = list(
sigcol = "Cl.lt.SMA",
sigval = TRUE,
orderqty = "all",
ordertype = "market",
orderside = "long"),
type = "exit"
)
applyStrategy(strategy = qs.strategy, portfolios = qs.strategy)
我收到以下错误消息:
Error in has.Cl(x) : object 'mltdata' not found
谁能解释为什么我会收到这个错误?非常感谢任何提要或回复!
这里:
add.indicator(
strategy = qs.strategy,
name = "SMA",
arguments = list(
x = quote(Cl(mltdata)),
n=10),
label = "SMA10"
)
应该是mktdata
。但即使那样你也没有指定它。因此,尝试修改为x = quote(Cl(SPY))
.
在您的 'add.indicator' 函数中,您在参数列表中指定了 mltdata
的收盘价 (Cl
)。但是,脚本中没有其他地方定义 'mltdata' 。我确实看到您下载了 SPY
,因此您可能需要更新示例脚本以反映您正在使用的数据。
~贾斯汀