交易者在制定交易策略時,往往除了開高低收成交量之外,也會想要利用交易市場內獨特的資料,例如台股市場的融資券及法人的進出資料,來作為交易策略的運算基礎。為了讓交易者可以如願以償,XS語法內提供了GetField這個函數,來協助交易者完成這樣的工作。
GetField函數可以傳入三個參數:
以下是一個簡單的範例:
Value1 = GetField("收盤價"); // value1 為取得目前腳本執行頻率的收盤價。
Value2 = GetField("收盤價", "1"); // value2 為取得原始1分鐘頻率的收盤價。
Value3 = GetField("收盤價", "1", Adjusted:=true); // value3 為取得還原1分鐘頻率的收盤價。
GetField可以使用的欄位分成兩種類型:
使用者可以點選XS編輯器內的編輯選單/插入欄位選項,或是按快捷鍵F7,進入插入欄位畫面內搜尋或是瀏覽需要的欄位,從插入欄位畫面內也可以找到欄位的說明等資訊。
GetField欄位除了可以取得某個欄位在目前K棒的數值之外,也可以取得某個欄位的前期值:
If Close > Close[1] And
GetField("外資買賣超") > GetField("外資買賣超")[1]
Then
Ret = 1;
在上述警示範例內使用GetField("外資買賣超")來讀取外資的買賣超張數。注意到GetField("外資買賣超")[1]的用法:GetField函數的回傳值是跟Close一樣是一個序列,可以使用[]的語法來讀取前期值。
資料欄位支援Tick、分鐘、日、週、月、季、半年、年、還原日、還原月、還月季等頻率,視欄位內容決定支援的頻率,在插入欄位的畫面中會列出欄位支援的商品及頻率。
選股腳本不支援Tick、分鐘頻率,同樣也能在呼叫GetField時指定引用的資料頻率,
當使用者選擇「外資買賣超」欄位時,頻率選項內會列出這個欄位可以被使用的頻率:日、週、月。如果使用者選擇週的話,則按插入後編輯器內會出現以下的程式碼:
GetField("外資買賣超","W");
注意到GetField的第二個參數傳入了 "W",代表要抓取週線頻率。當GetField函數內傳入了指定頻率時,則不管腳本執行的頻率是什麼,系統一定會回傳這個欄位指定的頻率內容。
以下是GetField的頻率代碼清單:
如果在頻率選項內選擇「預設」的話,則產生的GetField程式碼內將不會傳入第二個參數。這表示當GetField執行時回傳的資料頻率會跟腳本執行的頻率是一樣的。
如果GetField函數內傳入了頻率參數,而且這個頻率跟目前腳本執行的頻率不一樣的話,則我們稱這種情形為跨頻率。
If Close > Close[1] and
GetField("外資買賣超","W") > GetField("外資買賣超","W") [1] then ret = 1;
上述選股腳本內我們使用日頻率來執行,所以Close, Close[1]都是日頻率的資料,而GetField("外資買賣超","W")則是週頻率的資料。 當腳本執行時遇到要讀取不同頻率的資料時,系統會使用以下的方式來決定不同頻率的資料的日期:
目前腳本執行的頻率為主頻率,以上例而言主頻率為日頻率,如果要讀取週頻率資料時,以日資料的計算日期來取得當下的週資料;例如,台積電(2330) 在2018/07/16~2018/07/20期間中:
如果依照上述邏輯所對應出來的期別資料不存在的話,則系統會依照資料對位(DataAlign)的設定方式來決定如何處理:
通常在選股腳本內會使用遞補對位(預設值)來來處理財報/營收等資料期別比交易價位資料期別落後公佈的情形。
其他與欄位相關的函數還有 GetFieldDate函數以及GetQuote函數。
也可以利用GetSymbolField取得指定商品的欄位資料(跨商品),語法和GetField類似,只需要在第一個參數加上指定商品的SymbolID。