# Quantstrat по ошибке? Предупреждает, что существующий инструмент отсутствует

Мы разработали наш первоначальный бэктестер, используя множество базовых R, MATLAB, SAS и электронных таблиц, но изучаем возможность перехода только на Quantstrat. Хотя у нас были некоторые вопросы относительно результатов, которые мы пытались понять до этого поста, я только что обновил R до версии 3.6.0, и код перестал работать, предупредив, что: «In getInstrument(symbol): инструмент Cityso.xts не найден , сначала создайте его». На самом деле «Cityso.xts» присутствует и используется для инициализации портфеля.

Я искал ответы в Интернете, в том числе: Предупреждение в quantstrat, но этот пост касается немного другого вопроса. Другие результаты моего поиска еще менее актуальны.

getSymbols("C", from = "2017-04-17", to = "2017-05-11", src = "yahoo", adjust = TRUE)
C <- round (C, 2) # rounding
C <- C[ , -5:-6] # eliminate columns not used
l.ent <- c(0,1,0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0) # five long entry positions
l.exit <- c(0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,0,0) # corresponding five long exit positions (3 day lag)
Cityso.xts <- merge(C,l.ent,l.exit) # merge indicators in last columns to the right
make.index.unique(Cityso.xts)  # source of code:  https://github.com/braverock/blotter/issues/51

initdate <- "1999-01-01"
from <- "2017-04-17"
to <- "2017-05-11"
Sys.setenv(TZ="UTC")
currency("USD")
stock("C.xts", currency = "USD") # Use stock() to initialize Cityso.xts and 

На данный момент мы определяем размер сделки и начальный капитал небольшими и простыми, чтобы помочь понять вывод (который, хотя и были вопросы относительно вывода, код выполнялся без предупреждений):

tradesize <- 1
initeq <- 1
strategy.st <- "firststrat"
portfolio.st <- "firststrat"
account.st <- "firststrat"
rm.strat(strategy.st) # Remove the existing strategy if it exists
initPortf(portfolio.st, symbols = "Cityso.xts", initDate = initdate, currency = "USD") 
initAcct(account.st, portfolios = portfolio.st, initDate = initdate, currency = "USD", initEq = initeq)
initOrders(portfolio.st, initDate = initdate)
strategy(strategy.st, store = TRUE)
add.signal(strategy.st, name = "sigThreshold", 
       arguments = list(column = "l.ent", # l.ent column contains indicators added external to quantstrat
          threshold = 0,
          relationship = "gt",
          cross = FALSE),
       label = "l.open.th")

add.signal(strategy.st, name = "sigThreshold", 
       arguments = list(column = "l.exit", # l.ent column contains indicators added external to quantstrat
          threshold = 0,
          relationship = "gt", 
          cross = FALSE), 
       label = "l.end.th")
test_init <- applyIndicators(strategy.st, mktdata = Cityso.xts)
test <- applySignals(strategy = strategy.st, mktdata = test_init)
add.rule(strategy.st, name = "ruleSignal", 
      arguments = list(sigcol = "l.open.th", 
                       sigval = TRUE, 
                       orderqty = 1,
                       ordertype = "market", 
                       orderside = "long", 
                       replace = FALSE, 
                       prefer = "Open"), 
      type = "enter")
add.rule(strategy.st, name = "ruleSignal", 
      arguments = list(sigcol = "l.end.th",
                       sigval = TRUE, 
                       orderqty = "all",
                       ordertype = "market", 
                       orderside = "long",
                       replace = FALSE, 
                       prefer = "Open"), 
      type = "exit")
add.rule(strategy = strategy.st, name = "ruleSignal",
      arguments = list(sigcol = "l.open.th", sigval = TRUE, ordertype = "market",
                       orderside = "long", replace = FALSE, prefer = "Open",
                       osFUN = osMaxDollar,
                       tradeSize = tradesize,
                       maxSize = tradesize),
      type = "enter")
out <- applyStrategy(strategy = strategy.st, portfolios = portfolio.st, debug = TRUE)

[Торги показаны здесь]

There were 17 warnings (use warnings() to see them)
warnings()
1: In getInstrument(symbol) : instrument Cityso.xts not found, please create it first.
2: In getInstrument(Symbol) :  instrument Cityso.xts not found, please create it first.
3: In addTxn(Portfolio = portfolio, Symbol = symbol, TxnDate = txntime,  ... :  Instrument Cityso.xts  not found, using contract multiplier of 1

Конечно, более поздний код не работает, настаивая на том, что Cityso.xts отсутствует, когда он есть.
Почему этот код перестал работать, когда я перешел на R версии 3.6.0?


person W Barker    schedule 17.07.2019    source источник
comment
В опубликованном вами коде нет объекта с именем C.xts. Похоже, вместо этого вы должны передать Cityso.xts.   -  person Jared Marks    schedule 19.07.2019
comment
Вау, #Джаред, как я мог это пропустить? Отправьте как ответ, и я приму.   -  person W Barker    schedule 20.07.2019


Ответы (1)


Причина, по которой Quantstrat не может найти объект Cityso.xts, заключается в том, что он не был правильно определен в функции stock(), куда ошибочно передается C.xts (которого не существует). Передав правильный объект, Quantstrat сможет получить к нему доступ. должным образом.

person Jared Marks    schedule 21.07.2019