Я получаю эту ошибку при применении стратегии в quantstrat:quantstrat логическая ошибка - отсутствует значение, где TRUE/FALSE требуется
Ошибка в случае (длина (к) == 0 || (длина (к) == 1 & & J == 0)) {: пропущенное значение где TRUE/FALSE необходимо
Мой код выглядит следующим образом:
.blotter <- new.env()
.strategy <- new.env()
Sys.setenv(TZ="UTC")
STRATEGY<-'PFReplicate'
try(rm.strat(STRATEGY))
n<-130
#SMA signals and rules
LONG.ENTRY.SIGNAL.SMA<-"CLOSE_GT_SMA_SIG_LONG"
LONG.EXIT.SIGNAL.SMA<-"CLOSE_LT_SMA_SIG_LONG"
SHORT.ENTRY.SIGNAL.SMA<-"CLOSE_LT_SMA_SIG_SHORT"
SHORT.EXIT.SIGNAL.SMA<-"CLOSE_GT_SMA_SIG_SHORT"
LONG.ENTRY.RULE.SMA<-'L_ENTRY_SMA_RULE'
LONG.EXIT.RULE.SMA<-'L_EXIT_SMA_RULE'
SHORT.ENTRY.RULE.SMA<-'S_ENTRY_SMA_RULE'
SHORT.EXIT.RULE.SMA<-'S_EXIT_SMA_RULE'
LONG.ORDERSET.NAME<-'CLOSELONGSMA'
SHORT.ORDERSET.NAME<-'CLOSESHORTSMA'
strategy(STRATEGY,store=TRUE)
Set up SMA indicator
add.indicator(strategy = STRATEGY,name='SMA',
arguments=list(x=quote(mktdata),n),
label='SMA')
#Set up signals
#SMA signals
add.signal(strategy = STRATEGY,name="sigCrossover",
arguments=list(columns=c('Close','SMA'),
relationship="gt"),
label=LONG.ENTRY.SIGNAL.SMA)
add.signal(strategy = STRATEGY,name="sigCrossover",
arguments=list(columns=c('Close','SMA'),
relationship="lt"),
label=LONG.EXIT.SIGNAL.SMA)
add.signal(strategy = STRATEGY,name="sigCrossover",
arguments=list(columns=c('Close','SMA'),
relationship="lt"),
label=SHORT.ENTRY.SIGNAL.SMA)
add.signal(strategy = STRATEGY,name="sigCrossover",
arguments=list(columns=c('Close','SMA'),
relationship="gt"),
label=SHORT.EXIT.SIGNAL.SMA)
#Add our SMA rules (enabled)
add.rule(strategy = STRATEGY,name="ruleSignal",
arguments=list(sigcol=LONG.ENTRY.SIGNAL.SMA,sigval=TRUE,
orderqty=100,ordertype="market",
TxnFees=0,orderside="long",
orderset=LONG.ORDERSET.NAME),
type="enter",label=LONG.ENTRY.RULE.SMA)
add.rule(strategy = STRATEGY,name="ruleSignal",
arguments=list(sigcol=LONG.EXIT.SIGNAL.SMA,sigval=TRUE,
orderqty='all',ordertype="market",
TxnFees=0,orderside="long",
orderset=LONG.ORDERSET.NAME),
type="exit",label=LONG.EXIT.RULE.SMA)
add.rule(strategy = STRATEGY,name="ruleSignal",
arguments=list(sigcol=SHORT.ENTRY.SIGNAL.SMA,sigval=TRUE,
orderqty=100,ordertype="market",
TxnFees=0,orderside="short",
orderset=SHORT.ORDERSET.NAME),
type="enter",label=SHORT.ENTRY.RULE.SMA)
add.rule(strategy = STRATEGY,name="ruleSignal",
arguments=list(sigcol=SHORT.EXIT.SIGNAL.SMA,sigval=TRUE,
orderqty='all',ordertype="market",
TxnFees=0,orderside="short",
orderset=SHORT.ORDERSET.NAME),
type="exit",label=SHORT.EXIT.RULE.SMA)
symbol <- mar.rep
port <- 'mar.rep'
currency("USD")
stock(primary_id = symbol,currency = "USD",multiplier = 1)
Sys.setenv(TZ="UTC")
initDate <- '1971-01-05'
startDate <- '1972-01-06'
endDate<- '2010-12-31'
initEq <- 1e6
initPortf(name = port,symbols = symbol,initDate=initDate)
initAcct(name = port,portfolios = port,initDate=initDate,initEq=initEq)
initOrders(portfolio = port,initDate=initDate)
applyStrategy(strategy =STRATEGY,portfolios = port,debug = TRUE)
Я пытался сохранить код простым, чтобы избежать немой ошибки, но я все еще получаю это. Функция applyStrategy запускает и перечисляет тысячи транзакций, и через 30 минут я получаю эту ошибку. Я предполагаю, что исправление прост, но я этого не вижу. Спасибо за вашу помощь!
Ваш код не запускается, потому что 'symbol' не определен. Даже если бы это было так, немного попросить людей запустить что-то, что занимает 30 минут. –