GetField -  (內建函數) 欄位函數
語法:
讀取系統內的欄位資料
欄位數值 = GetField("欄位名稱")
欄位數值 = GetField("欄位名稱", "頻率")
欄位數值 = GetField("欄位名稱", "頻率", 是否為還原值)
傳入欄位名稱、指定的欄位頻率與是否為還原值。
如果不傳頻率的話,則讀取目前執行頻率的對應欄位。
如果不傳是否為還原值,則讀取原始值資料。
說明:

交易者在制定交易策略時,往往除了開高低收成交量之外,也會想要利用交易市場內獨特的資料,例如台股市場的融資券及法人的進出資料,來作為交易策略的運算基礎。為了讓交易者可以如願以償,XS語法內提供了GetField這個函數,來協助交易者完成這樣的工作。

GetField函數可以傳入三個參數:

  • 第一個參數是欄位的中文或是英文名稱,
  • 第二個參數則是欄位的頻率,如果省略這個參數的話,則會依照目前腳本執行的頻率來取得對應的資料
  • 第三個參數則為「是否為還原值」運用 Adjusted參數 來設定要讀取的是原始資料,還是還原資料。

以下是一個簡單的範例:

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的頻率代碼清單:

  • Tick: 1 Tick
  • 1: 1分鐘。也可使用其他數字(1、2、3、5、10、15、20、30、45、60、90、120、135、180、240),代表對應的分鐘線資料
  • D: 日資料
  • W: 週資料
  • M: 月資料
  • Q: 季資料
  • H: 半年資料
  • Y: 年資料
  • AD: 還原日資料
  • AW: 還原週資料
  • AM: 還原月資料

如果在頻率選項內選擇「預設」的話,則產生的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期間中:

  • 週一07/16的週線外資買賣超為-2071張、週線開盤價為224.5元、週線最高價為225元、週線最低價為223.5元、週線收盤價為223.5元、週線成交量為16107張。
  • 週二07/17的週線外資買賣超為-3371張、週線開盤價為224.5元、週線最高價為225元、週線最低價為221元、週線收盤價為221.5元、週線成交量為38661張。
  • 週三07/18的週線外資買賣超為-1733張、週線開盤價為224.5元、週線最高價為225元、週線最低價為221元、週線收盤價為223元、週線成交量為84464張。
  • 週四07/19的週線外資買賣超為6021張、週線開盤價為224.5元、週線最高價為227元、週線最低價為221元、週線收盤價為224.5元、週線成交量為128440張。
  • 週五07/20的週線外資買賣超為43423張、週線開盤價為224.5元、週線最高價為237.5元、週線最低價為221元、週線收盤價為237.5元、週線成交量為232092張。

如果依照上述邏輯所對應出來的期別資料不存在的話,則系統會依照資料對位(DataAlign)的設定方式來決定如何處理:

  • 如果是絕對對位的話,則腳本執行時會發生錯誤(資料不存在),
  • 如果是遞補對位的話,則系統會往前尋找有資料的期別。以上述為例,假如日期為2018/07/16日,腳本內要去讀取週資料時,依照日期對位邏輯,系統會先找尋2018/07/16日的週資料,如果資料不存在的話則會往前找尋2018/07/13日的週資料,如果還不存在的話則會往前繼續尋找,直到找到為止。

通常在選股腳本內會使用遞補對位(預設值)來來處理財報/營收等資料期別比交易價位資料期別落後公佈的情形。

其他與欄位相關的函數還有 GetFieldDate函數以及GetQuote函數

也可以利用GetSymbolField取得指定商品的欄位資料(跨商品),語法和GetField類似,只需要在第一個參數加上指定商品的SymbolID。