Ошибка реализации стоп-лимитного ордера в quantstrat

После добавления ordertype=stoplimit правил для реализации стоп-лосса в демонстрации quantstrat Pair_trade.R (только короткая сторона показана ниже), как,

# stop loss for short order (child)
add.rule(strategy=pairStrat, name = 'ruleSignal', arguments=list(sigcol='short',
    sigval=TRUE,
    replace=FALSE, 
    orderside='short', 
    ordertype='stoplimit', 
    tmult=TRUE, 
    prefer='Close',
    TxnFees='TxnCost',
    threshold=quote(.stoplossPercent), 
    orderqty='all', 
    orderset='ocoshort'),
type='chain', parent='Enter_Short',
label='StopLoss_Short',
enabled=FALSE)

и включение его через:

enable.rule(pairStrat,'chain',"StopLoss_Long","StopLoss_Short")

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

Error in if (grepl(label, strategy$rules[[type]][[i]]$label)) strategy$rules[[type]][[i]]$enabled <- enabled :
  argument is of length zero

Тем не менее очень похожий подход оказался успешным при использовании стратегии с одним портфелем инструментов.

Что мне здесь не хватает?


person marital_weeping    schedule 12.02.2015    source источник
comment
Я не могу воспроизвести эту ошибку. Вы назначаете вывод add.rule и enable.rule обратно pairStrat?   -  person Joshua Ulrich    schedule 13.02.2015
comment
Я не уверен, что понимаю ваш вопрос. Я знаю, что объект pairStrat — это объект моей стратегии, определенный как: pairStrat <- strategy('pairStrat') . Полный код модифицированной демки находится на https://bitbucket.org/marital_weeping/pair_trade-modified   -  person marital_weeping    schedule 13.02.2015


Ответы (1)


Ваш код битбакета будет работать для меня, если я назначу вывод add.rule и enable.rule обратно pairStrat (как сделано для всех остальных вызовов add.rule в демо).

# wrong
add.rule(strategy=pairStrat, ...)
enable.rule(pairStrat,'chain',"StopLoss_Long","StopLoss_Short")
# correct
pairStrat <- add.rule(strategy=pairStrat, ...)
pairStrat <- enable.rule(pairStrat,'chain',"StopLoss_Long","StopLoss_Short")
person Joshua Ulrich    schedule 13.02.2015