2015-07-23 2 views
0

У меня возникает эта ошибка при выполнении проверки стратегии в R, используя пакет Quantstrat. Всякий раз, когда я пытаюсь использовать функцию applySignals для проверки сигналов, это показывает логическую ошибку. Я попытался удалить NAs командой na.omit (FB), но при вычислении Simple Moving Average у вас будет NAS в начале. Может ли кто-нибудь предложить мне решение?Локальная ошибка Quantstrat во время работы applySignals - отсутствует значение, где требуется TRUE/FALSE

Спасибо,

require(PerformanceAnalytics) 
require(quantstrat) 
require(quantmod) 
require(blotter) 

initDate="2015-01-01" 
from="2015-01-02" 
to="2015-06-30" 

options(width=100) 

currency('USD') 
Sys.setenv(TZ="UTC") 

symbols = c("SPY", "FB", "TWTR") 

getSymbols(symbols, from=from, to=to, src="yahoo", adjust=TRUE) 
stock(symbols, currency="USD", multiplier=1) 



suppressWarnings(rm("account.MAC","portfolio.MAC",pos=.blotter)) 
suppressWarnings(rm("order_book.MAC",pos=.strategy)) 


tradeSize <- 1000 
initEq <- tradeSize 

strategy.st <- portfolio.st <- account.st <- "MAC" 
rm.strat(strategy.st) 
initPortf(portfolio.st, symbols=symbols, 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) 

#parameters 


nFast = 10 
nSlow = 30 


#indicators 

add.indicator(strategy.st, name="SMA", 
       arguments=list(x=quote(Cl(mktdata)[,1]), n=nFast), 
       label="nFast") 

add.indicator(strategy.st, name="SMA", 
       arguments=list(x=quote(Cl(mktdata)[,1]), n=nSlow), 
       label="nSlow") 

test <- applyIndicators(strategy.st, mktdata=Cl(FB)) 
head(test, 5) 


#signals 


add.signal(strategy.st, name="sigCrossover", 
      arguments=list(columns=c("nFast", "nSlow"), relationship="gt"), 
      label="longEntry") 

add.signal(strategy.st, name="sigCrossover", 
      arguments=list(columns=c("nFast", "nSlow"), relationship="lt"), 
      label="longExit") 

test2 <- applySignals(strategy.st, mktdata=Cl(FB)) 

Error: Error in if (length(j) == 0 || (length(j) == 1 && j == 0)) { : 
    missing value where TRUE/FALSE needed 

ответ

0

Я был в состоянии решить эту проблему с моим кодом.

Итак, если я использую только объект mktdata вместо mktdata = Cl (FB), Quantstrat работает нормально. Я не могу полностью понять, почему он работает именно так, но как-то все отлично.

test2 <- applySignals(strategy.st, mktdata) 
+0

Что здесь происходит, так это то, что вы разворачиваете функциональность функции applyStrategy. Объект 'mktdata' доступен после вызова applyIndicators. Внутри applyStrategy он будет передан как аргумент 'mktdata' для примененияSignals. Вы также могли бы пройти тест mktdata = в свой вызов applySignals. –