如何在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)
目前,他们正在独立工作。
答案 0 :(得分:8)
SVN r 1010将代码添加到quantstrat,以便更容易使用OCO(One Cancels Other)订单集。 'macd'演示here中有一个示例,它使用新公开的 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 的参数列表中。