如何使用函數取得商品的實際庫存數量
選擇單元...
XS語法進階應用
單元目錄
單元目錄
進階功能介紹
1-1 SetTotalBar資料讀取範圍與腳本執行的關係
1-2 SetBackBar指定頻率設定資料筆數
1-3 探討變數序列的觀念:幾天前黃金交叉商品為例
1-4 如何運用Print指令來抓程式的臭蟲
1-5 談OutputField跟GetFieldDate這兩個函數
1-6 計算區間漲跌幅的自訂函數
1-7 盤中即時資料欄位的應用
1-8 Tick欄位的應用
1-9 台股逐筆撮合的連續成交Tick序列
1-10 選股中心創掛牌新高與大單欄位的應用
1-11 集保相關欄位調整
1-12 如何使用函數取得商品的實際庫存數量
1-13 XS在可轉債的應用
1-14 XS函數「isfirstcall」說明
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) 不一定會相同,且會受到其他執行中的策略和手動交易的影響。三、使用範例
範例(一) 所有策略所能持有的單一商品數量限制只要以 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(-FilledAtBroker, market);這樣就能夠讓用戶在 13:24 以後洗價運算時判斷讓該策略以市價單出場執行商品目前所有的庫存,避免想當沖卻不小心留倉的狀況。