value1 = GetField("TickGroup", "Tick");在Tick資料內有一個欄位叫做「TickGroup」,這個欄位是用來標示這一筆成交資料是怎麼撮合出來的,總共有5種可能的數值:
- -1: 表示這一筆成交並不是逐筆撮合所產生的。例如開盤的第一筆成交,收盤的那一筆成交都會標示-1,
- 0: 表示這一筆成交是逐筆撮合所產生的,只有撮出一筆,
- 1: 表示這一筆成交是連續成交序列內的第一筆,
- 2: 表示這一筆成交是連續成交序列內中間的任何一筆,
- 3: 表示這一筆成交是連續成交序列內的最後一筆
input: filterMode(1, "篩選方式", inputkind:=dict(["買盤",1], ["賣盤",-1])); input: filterVolume(100, "大單門檻"); var: intrabarpersist readtick_cookie(0);// ReadTicks內部使用, 每次呼叫時請照實傳入 array: tick_array[100, 11](0); // 需要宣告一個2維陣列來儲存Tick資料 var: row_count(0), idx(0); // 讀取Tick資料 row_count = ReadTicks(tick_array, readtick_cookie); for idx = 1 to row_count begin if tick_array[idx, 5] = filterMode and tick_array[idx, 10] >= filterVolume then begin ret=1; end; end;要呼叫ReadTicks之前,我們要先準備一個二維的陣列(第5行的tick_array),一個二維陣列就像是一個Excel的表格,呼叫完ReadTicks之後,每一橫列會儲存一筆Tick資料,而這一筆Tick資料的每個欄位則會存在這個橫列的每一行裡面。除了這個陣列之外,我們還需要準備一個變數(第4行的readtick_cookie),這個變數用來讓ReadTicks函數可以紀錄上次讀到的Tick資料位置。接著每一次洗價時,我們就請ReadTicks函數讀取上次洗價到目前為止的所有Tick資料(第13行),ReadTicks會回傳這次讀回的筆數(row_count),接著我們就用for迴圈來檢視讀到的Tick資料。ReadTicks讀回的Tick資料會存放在tick_array內,最新的一筆是第一個橫列(row), 前一筆是第二個row,以下類推。每一個row內包含11個欄位(column),內容分別是:
- 第1個column是日期
- 第2個column是時間
- 第3個column是成交價
- 第4個column是成交量
- 第5個column是內外盤註記
- 第6個column是這一筆Tick的編號(SeqNo)
- 如果ReadTicks遇到多筆連續成交序列時,他會把這些Ticks都合併成1個row,第7個column存放的是這個連續成交序列總共有多少筆
- 如果這是連續成交序列的話,第8個column存放的是這個連續成交序列的第一筆的位置,第9個column存放的則是這個連續成交序列最後一筆的位置
- 第10個column存放的是這些連續成交序列的總成交量,如果這不是連續成交序列的話,這個column存放的則是這一筆的成交量(跟第四個column相同
- 第11個column存放的是這些連續成交序列的總成交金額(元),如果這不是連續成交序列的話,這個column存放的則是這一筆的成交金額
if tick_array[idx, 5] = filterMode and tick_array[idx, 10] >= filterVolume then ...上面這個判斷式內,tick_array[idx, 5]是內外盤註記,而tick_array[idx, 10]則是這一筆成交的總量(或是連續成交序列的總量)!到這裡為止,我們已經跟大家說明了Tick資料的所有欄位以及應用的方式,大家如果有任何建議或是問題的話,麻煩到我們的臉書或是XS技術支援區留言。下次再見囉。