在腳本執行時如果透過GetField函數讀取開高低收以外的資料欄位時,有可能會遇到需要讀取的欄位資料的資料時間與目前價位資料時間不一致的情形,此時系統會依照資料對位的設定方式來決定如何處理。
以下的圖示內我們使用日線頻率的外資買賣超資料來說明資料對位的處理邏輯。
由於每日外資買賣超資料都是在下午16:00以後才會公布,也就是在當日交易區段時價位資料的日期與外資買賣超資料的日期會有一天的差異。所以當以下的腳本在5/28日上午執行時
if Close > Close[1] and
GetField("外資買賣超") > 0 then ...
系統會依照對位方式決定GetField("外資買賣超")函數會取得哪一天的外資買賣超資料。
目前系統支援兩種資料對位方式,分別是
DataAlign(0);
DataAlign(1);
在絕對對位模式時,GetField("外資買賣超")函數的日期必須與價位日期一致(同期別),也就是說系統會嘗試讀取5/28日的外資買賣超資料,此時由於資料尚未公佈,所以執行會發生失敗(引用資料不存在)。
而在遞補對位模式時,系統在找不到5/28日的外資買賣超資料時,會自動往前尋找。在上面的範例內 GetField("外資買賣超")則會找到5/27日的外資買賣超資料。
目前系統預設的資料對位方式依照腳本類型而有所不同:
選股腳本由於常常需要讀取營收/財報等欄位資料,而這些資料通常公佈時間都是落後於價位日期的,所以預設為遞補對位。
使用者如果知道所需資料的日期的話,也可以透過不同的寫法來讀取到預期的資料,不需要更改對位模式。以上述範例而言,如果這是一個策略雷達腳本的話,由於策略雷達腳本的執行時間通常是在交易時間區段,此時外資買賣超資料一定會落後一期。所以腳本可以修改成下列寫法:
if Close > Close[1] and
GetField("外資買賣超")[1] > 0 then ...
注意到腳本內使用**GetField("外資買賣超")[1]**語法來讀取前一期的外資買賣超。