2012-05-04 35 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