免費下載
訂閱模組
搜尋

如何使用函數取得商品的實際庫存數量


選擇單元...
XQ 提供讓交易腳本可以取得對應商品實際庫存的函數,讓使用者可以依據實際庫存來對策略的交易邏輯作限制。

以下是文章主軸:

一、函數語法

二、函數說明

三、使用範例

 

一、函數語法

 

Value1 = FilledAtBroker;

 

二、函數說明

此函數會回傳對應商品的實際庫存數量,而這個數值會是正、負的整數或 0。

該數值會隨策略設定的現股、資券而有所不同。

舉例來說,若帳戶中只有 1 張 2330 台積電現股多單的話,將策略設定為現股時 FilledAtBroker 會回傳 1,但若將策略設定為資券的話 FilledAtBroker 則會回傳 0。

其運作方式和原本的 Filled 相同,會在腳本當次洗價運算前確定數值。

所以若腳本在運算中因為委託單成交導致實際庫存變動,FilledAtBroker 還是會維持在洗價前確定的數值。

FilledAtBroker 本身對下單不會有影響,交易委託是由 Position、Filled 以及 SetPosition 等交易函數的數值來決定。

舉例來說:

用戶的腳本在運算前 Position = 2, Filled = 2, FilledAtBroker = 5。

運算中腳本觸發了 SetPosition(0, market) 的指令,在腳本運算結束後,系統會依據 Position = 0 和 Filled = 2 判斷下出2張市價賣單,和 FilledAtBroker 沒有關係。

需注意該數值和策略庫存 (Filled) 或策略部位 (Position) 不一定會相同,且會受到其他執行中的策略和手動交易的影響。

 

三、使用範例

範例(一) 所有策略所能持有的單一商品數量限制

目前自動交易策略中的交易安控只能夠針對策略內的商品作控制,但當用戶同時啟動多個策略的時候,就沒辦法針對所有策略交易某個商品的數量作控管。

舉例來說,在有10個策略,而希望這些策略持有A商品不超過10筆的情況下,雖然可以將個別策略的最大部位限制設為1確保最多持有不會超過10筆,但會導致要10個策略都符合進場條件時才會有10個部位,而非個別策略可以決定加碼減碼。

在這種情況下,可以使用 FilledAtBroker 的數值來作管控,就可以控制複數策略同時進場的數量。

腳本範例:

input: filledUpLimit(10, "最大買進數量"), filledDownLimit(-10, "最大放空數量");

condition1 = close cross over average(close, 10) and filled <= 0;
condition2 = close cross under average(close, 10) and filled >= 0;

if condition1 and (FilledAtBroker + 3) <= filledUpLimit then setposition(3, market);
if condition2 and (FilledAtBroker - 3) >= filledDownLimit then setposition(-3, market);

只要同時在所有運作中的策略加上此項限制,就可以在買進/放空時確認交易的數量是否會超過設定的上下限,避免多策略交易時超過所能接受的單一商品數量。

 

範例(二) 確保所有庫存可以在指定條件下出場

當有多個策略在同時運作,且本人也會看盤下單的情況下,在符合某些條件要將手上持有的部位全部平倉時,可以使用此欄位來達成讓所有庫存在滿足特定條件下全部出場。

舉例來說,若希望收盤前可以將手上的部位清空的話,可以使用以下範例來作處理。

腳本範例:

if currenttime >= 132400 and Position = Filled and FilledAtBroker <> 0 then setposition(Position-FilledAtBroker, market);

這樣就能夠讓用戶在 13:24 以後洗價運算時判斷讓該策略以市價單出場執行商品目前所有的庫存,避免想當沖卻不小心留倉的狀況。