Hello 龍槍,
首先您需要理解 position 與 filled 的關係,您可以這樣理解:
position 是腳本運算後得出您應有的口數。
filled 是您目前策略內實際有的口數。
所以就您的例子,如果您 10/7 有3個部位跟庫存,而在 10/8 掛了一筆3張的賣單(不論價格)上去的話,只要還未成交,filled就還是會維持為3(您的庫存沒有變化)。
但是position會是0(因為您下了3張賣單)。
所以這時如果您下 setposition(filled, market) 的話,系統會去確認要作甚麼動作才會讓position = filled。
而你的庫存目前為3,部位為0,有一筆3張賣單,所以只要把賣單清掉您的部位就會回到3。
由於您在 if position > 0 and Filled > 0 and close > filledAvgPrice*1.01 沒有其他限制,所以會導致連續執行掛單刪單的動作。
小幫手認為是因為您前半段的 Setposition(position-1, takeprofit); 已經將部位調整成0了。(可以看到最後掛到限價賣出9張)
所以後半段因為position = 0 所以不會執行。
如果您要先刪掉之前的委託單改為下1/3部位的市價單的話,小幫手會建議將後半段修改為:
else if Position >= 0 and Filled > 0 and close <= filledAvgPrice*1.01 then begin
if position <> filled then setposition(filled, market) //如果position與filled不相同的話,第一次執行先將其調整成相同(刪單)
else setposition(position * 1/3, market); //如果position 與 filled 相同的話賣出1/3部位
end;
如果還是有問題的話,需要麻煩您提供 自動交易中心匯出檔勾選(包含)交易腳本、問題發生的日期時間商品 以及 XQ Log 來檢驗。
Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。
您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw且附上 討論文章連結網址(小幫手才能盡早處理)。
感謝。
11 評論