DataAlign -  (內建函數) 一般函數
語法:
設定資料對位方式
DataAlign(欲設定的資料對位方式)
如果是絕對對位的話,資料對位方式為0,如果是遞補對位的話,資料對位方式為1
說明:

在腳本執行時如果透過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日的外資買賣超資料。

目前系統預設的資料對位方式依照腳本類型而有所不同:

  • 如果是指標腳本或是雷達腳本,資料對位方式預設為絕對對位 (DataAlign(0))
  • 如果是選股腳本,資料對位方式預設為遞補對位 (DataAlign(1))

選股腳本由於常常需要讀取營收/財報等欄位資料,而這些資料通常公佈時間都是落後於價位日期的,所以預設為遞補對位。

使用者如果知道所需資料的日期的話,也可以透過不同的寫法來讀取到預期的資料,不需要更改對位模式。以上述範例而言,如果這是一個策略雷達腳本的話,由於策略雷達腳本的執行時間通常是在交易時間區段,此時外資買賣超資料一定會落後一期。所以腳本可以修改成下列寫法:

if Close > Close[1] and 
   GetField("外資買賣超")[1] > 0 then ...

注意到腳本內使用**GetField("外資買賣超")[1]**語法來讀取前一期的外資買賣超。