R - квантраты заказов отменяют друг друга
Как вводить ордера, которые отменяют друг друга в quantstrat? Например, входя в сделку, я сразу открываю два ордера: "стоп-лосс" и "тейк-профит". Как только один будет заполнен, другой будет отменен.
#Enter signal
strategy <- add.rule(strategy, name="ruleSignal",
arguments=list(sigcol="EnterBuy", sigval=TRUE, orderqty=100,
ordertype="market", orderside="long",
pricemethod="market", osFUN=osMaxPos),
type="enter", path.dep=TRUE)
#Stop loss
strategy <- add.rule(strategy, name="ruleSignal",
arguments=list(sigcol="EnterBuy", sigval=TRUE,
orderqty="all", ordertype="stoplimit",
orderside="short", threshold=-5,
tmult=FALSE),
type="exit", path.dep=TRUE)
#Take profit
strategy <- add.rule(strategy, name="ruleSignal",
arguments=list(sigcol="EnterBuy", sigval=TRUE,
orderqty="all", ordertype="stoplimit",
orderside="short", threshold=5,
tmult=FALSE),
type="exit", path.dep=TRUE)
В настоящее время они работают самостоятельно.
1 ответ
SVN r 1010 добавляет код в quantstrat, чтобы упростить использование наборов заказов OCO (один отменяет другой). В демонстрационном примере 'macd' есть пример, в котором используется вновь выставленный параметр orderset, чтобы обеспечить функциональность OCO для ордеров на выход.
Вам нужно будет использовать текущий svn (r1010 или новее), чтобы использовать эту функцию. Также отмечу, что функция определения размера заказа сейчас немного нарушена, мы работаем над этим.
Ваш пример использования наборов заказов будет выглядеть примерно так:
#Enter signal
strategy <- add.rule(strategy, name="ruleSignal",
arguments=list(sigcol="EnterBuy", sigval=TRUE, orderqty=100,
ordertype="market", orderside="long",
pricemethod="market", osFUN=osMaxPos),
type="enter", path.dep=TRUE)
#Stop loss
strategy <- add.rule(strategy, name="ruleSignal",
arguments=list(sigcol="EnterBuy", sigval=TRUE,
orderqty="all", ordertype="stoplimit",
orderside="long", threshold=-5,
tmult=FALSE, orderset='altexits'),
type="exit", path.dep=TRUE)
#Take profit
strategy <- add.rule(strategy, name="ruleSignal",
arguments=list(sigcol="EnterBuy", sigval=TRUE,
orderqty="all", ordertype="stoplimit",
orderside="long", threshold=5,
tmult=FALSE, orderset='altexits'),
type="exit", path.dep=TRUE)
Обратите внимание на добавление параметра orderset = 'altexits' в список аргументов для ruleSignal.