R: Quantstrat — пример Гая Йоллина — сообщение об ошибке

Я попытался запустить следующий код

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)

Я получил следующее сообщение об ошибке:

Ошибка в has.Cl(x): объект «mltdata» не найден

Может ли кто-нибудь объяснить, почему я получаю эту ошибку? Любая подача или ответ очень ценятся!


person boniface316    schedule 28.06.2017    source источник
comment
Вы поняли это?   -  person AK88    schedule 29.06.2017
comment
Я решил это сообщение об ошибке. Теперь я столкнулся с другой проблемой. Он не показывает правильные результаты, когда я набираю код getTxns(Portfolio = qs.strategy, SPY). Это единственная транзакция от 1997-12-31. Какие-либо предложения?   -  person boniface316    schedule 29.06.2017
comment
Это один и тот же код?   -  person AK88    schedule 29.06.2017
comment
Можете ли вы опубликовать свою проблему в виде отдельного вопроса?   -  person AK88    schedule 29.06.2017
comment
Проблема размещена по ссылке stackoverflow.com/questions/44816766/ Заранее спасибо!   -  person boniface316    schedule 29.06.2017
comment
ок, посмотрю   -  person AK88    schedule 29.06.2017


Ответы (2)


Здесь:

add.indicator(
    strategy = qs.strategy,
    name = "SMA",
    arguments = list(
                x = quote(Cl(mltdata)), 
                n=10),
  label = "SMA10"
)

должно быть mktdata. Но даже тогда вы не указываете это. Поэтому попробуйте изменить его на x = quote(Cl(SPY)).

person AK88    schedule 28.06.2017
comment
Предложение выше сработало. Теперь у меня другая проблема. Смотрите комментарий выше. - person boniface316; 29.06.2017

В вашей функции add.indicator вы указали цену закрытия (Cl) mltdata в списке аргументов. Однако нигде в скрипте не определено «mltdata». Я вижу, что вы загрузили SPY, так что, возможно, вам нужно обновить пример скрипта, чтобы он отражал данные, с которыми вы работаете.

~ Джастин

person Justin    schedule 28.06.2017
comment
Спасибо Джастин. Сообщение об ошибке больше не является проблемой. Теперь у меня другая проблема. - person boniface316; 29.06.2017