2012-05-04 28 views
3

如何输入在quantstrat中相互取消的命令?例如,一旦我进入交易,我立即开出两个订单:“止损”和“获利”。一旦获得填补,另一个将被取消。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) 

目前,他们独立工作。

+0

此功能将由'订单集'涵盖。我有代码使用订单集提供OCO(一个取消其他)订单功能,但它需要测试之前提交。一旦有一个包含代码的svn版本,我会提供一个正式的答案。 –

回答

8

SVN r 1010为quantstrat增加了代码,使其更容易使用OCO(One Cancels Other)命令集。在'macd'演示here中有一个例子,它使用新公开的命令集参数在退出订单上提供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

+0

thx Brian。然而,想问你如何配置,以便只有当输入信号被填满时,止损和止盈订单才会被放置,以防止我想更改我的输入订单以限制订单或者由于仓位限制而未被执行。 – SilverSpoon

+0

修改了ruleOrderProc并获得了我的要求。这个文件中有一些错误。 – SilverSpoon