Filled代表的是自動交易策略內目前執行商品的成交部位。
Filled是一個整數,可以大於0、等於0、也可以小於0。從自動交易腳本內,透過呼叫交易指令,例如SetPosition、Buy、Sell,來執行交易的動作。系統執行交易指令之後,Position的數值會跟著異動,如果個交易指令成交之後,則Filled的數值也會跟著異動。
舉例而言,假如腳本開始執行時Position是0,Filled也是0。
當腳本呼叫SetPosition(1)之後,系統會送出一筆買進1張的委託,Position會變成1,此時如果尚未成交的話,Filled還是0,等到這一筆委託單成交之後,Filled就會變成1。
如果委託單部分成交的話,則Filled也會反應部分成交的狀態。例如腳本呼叫SetPosition(2)之後,系統會送出一筆買進2張的委託,Position會變成2。此時如果尚未成交的話,Filled是0,如果這一筆委託單成交1張的話,Filled會變成1,等到這一筆委託單完成成交時,Filled就會變成2。
交易腳本在每一次執行(洗價)之前系統會決定Filled的數值,接下來的執行過程內,不管有沒有收到成交回報,Filled的數值都不會改變。
如同Position,Filled也是一個數值序列。Filled或是Filled[0]代表的是目前這一根bar的成交部位數值。Filled[1]則是上一根bar執行時的成交部位數值。如果開啟逐筆洗價的話,每一根bar內可能會執行多次,Filled的數值則會在每一次洗價之前就會依照當時的成交狀態更新。
透過比對Position跟Filled,腳本可以判斷目前腳本的成交情形,進而做不同的後續處理:
範例#1
if Position = 0 and entry_condition then SetPosition(1);
if Filled = 1 then begin
if Close >= FilledAvgPrice * 1.02 then SetPosition(0);
if Close <= FilledAvgPrice * 0.98 then SetPosition(0);
end;
在這個範例內腳本透過判斷Filled是否是1來決定是否已經成交。一旦成交之後,則透過比對目前價格與未平倉成本FilledAvgPrice是否達到停損停利的範圍來決定是否要進行平倉。
範例#2
if Position = 0 and entry_condition then SetPosition(1);
if TrueAll(Position <> Filled, 3) then SetPosition(1, MARKET);
在這個範例內腳本透過比對Position跟Filled的差異來決定是否尚未成交。如果Position跟Filled連續3根bar都不一樣的話,那麼就改用市價買進。