台股逐筆撮合的連續成交Tick序列
選擇單元...
XS語法進階應用
單元目錄
單元目錄
進階功能介紹
1-1 SetTotalBar資料讀取範圍與腳本執行的關係
1-2 SetBackBar指定頻率設定資料筆數
1-3 探討變數序列的觀念:幾天前黃金交叉商品為例
1-4 如何運用Print指令來抓程式的臭蟲
1-5 談OutputField跟GetFieldDate這兩個函數
1-6 計算區間漲跌幅的自訂函數
1-7 盤中即時資料欄位的應用
1-8 Tick欄位的應用
1-9 台股逐筆撮合的連續成交Tick序列
1-10 選股中心創掛牌新高與大單欄位的應用
1-11 集保相關欄位調整
1-12 如何使用函數取得商品的實際庫存數量
1-13 XS在可轉債的應用
1-14 XS函數「isfirstcall」說明
1-15 XScript 編輯器已支援 *.xs 副檔名的檔案
大家好。在上一篇文章「Tick欄位的應用」,我們說明了如何從腳本內取得「Tick」頻率的欄位。在這一篇文章內我們要介紹台股逐筆撮合制度上線後所產生的另外一種成交方式,我們稱之為「連續成交序列」。大家先看一下底下這張圖:注意到在12:51:04秒左右有三筆資料後面有標示星號,成交價分別是11.70元26張,11.75元51張,以及11.80元23張,可是這個星號是什麼意思呢?之所以會有這個星號,是因為這三筆成交是由同一筆買進委託所產生的,而這一筆買進委託的委託量是100張,而且委託價格是11.8元。當交易所收到這一筆委託時,因為當時最低的委賣價是11.70元,只有26張委賣量,所以這一筆委託先撮合出11.70元26張的成交之後,接著交易所繼續撮合次高的委賣價11.75元51張,最後再撮合11.80元的委賣23張(26 + 51 + 23 = 100張)。底下是這筆成交發生之前委賣五檔委託簿的樣子,請注意委賣價格以及委賣數量。 當發生這種情形時,因為產生了三筆不同的成交,所以交易所會傳送出3筆連續的成交資料。可是如果我們去思考這次成交的買賣力道時,觀察的重點應該是產生這一系列成交的這一筆委買單,所以在大單追蹤這個畫面內我們用星號把這幾筆成交資料的關係標示出來,計算單別時也會把這三筆成交加總,來判斷這一筆的實際力道。那麼這樣子的資訊,是不是可以從XS內得知呢?Yes,We Can。
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技術支援區留言。下次再見囉。