如何使用 Fugle Realtime API 串接股票即時行情


在股票交易的時候,很多看盤軟體,都會有個「最佳五檔」的功能(黃色框處)。如果理解最佳五檔是什麼的朋友,可以直接跳到第四段,用最佳五檔要特別注意的兩點。 如果不太清楚這個資訊的朋友,可以繼續看下去。

「最佳五檔」的意思是,在目前最新成交價往下五個價格和往上五個價格,有多少委託單尚未成交。以上圖的台積電為例,最佳五檔的左邊是揭露委託買進的資訊,顯示各個委買價以及對應的委買量。以委買價第一個來說,就是「目前出價最高的買方們,願意用 254 元買入台積電,現在尚有 847 張未成交」,而以委賣價第一個來說,就是「目前出價最低的賣方們,願意用 254.5 元賣出台積電,現在尚有 16 張未成交」。

通常盤中交易者會透過這個資訊,來判斷目前買賣雙方對於目標價的看法,從而做出交易的決定。
例如圖上目前 253.50 這個價格,委買量有 1857 張,相對特別高,代表在這個價格有較強的買盤,那麼短時間股價可能不容易跌破這個價格。

解讀「最佳五檔」這個資訊要特別注意兩件事:

  1. 交易所只會揭露目前成交價最接近的上下五檔股價。而上下五檔以外的價格,就看不到委託量。當股價波動快速的時候,看不到的五檔外資訊,是有重要價值的。
  2. 最佳五檔是一個已經發生的資訊。交易所是每五秒更新一次這個資訊,揭露出當下的五檔瞬間狀態。下次再揭露就是下一個五秒後了。而這兩次之間的五秒,可以發生好多事,有些操盤手會在前一個五秒送出大量但不會成交的委託,揭漏了以後,在接下來的五秒就將委託刪除或修改,從而使其他投資人不能正確判斷委買委賣的真實狀態。

備註:台股已於 2020/3/23 起改為逐筆行情交易

先說第二點,我們在解讀最佳五檔時,可以試著找尋一檔股票的五檔委託,是否存在特定的變化模式,這可以導入機器學習的模型來研究。 我將這個部分留待未來繼續討論。

而本文特別想改善的是第一點的問題。針對第一點,我們可以想像五檔外的資訊就像 LOL 英雄聯盟裡,被戰爭迷霧覆蓋的地圖,一旦有揭露時,就像是戰爭迷霧暫時消失,這時我們應該把這個當下的委託量記下來,而後就算再次覆蓋上了戰爭迷霧,最後一次揭露的委託量,仍然是最佳的估計數,可以協助我們對於最新成交價五檔外的迷霧世界做判斷。

用這樣的想法,我利用 Fugle 提供的 Realtime API,來開發一個解決方案。

先來簡單介紹一下 Fugle Realtime API

  • Fugle Realtime API 是由 Fugle 技術團隊與時報資訊開發提供。即時行情資料來源為臺灣證券交易所、臺灣期貨交易所及財團法人中華民國證券櫃檯買賣中心。
  • Fugle Realtime API 提供 HTTP RESTful API 和 Websocket API 兩種方式

而我們今天就要利用 HTTP RESTful API 的方式來建立一個屬於自己獨一無二的最佳五檔即時行情,本篇所需要使用的檔案都已經放在 Github 上。

一、開發環境

  • Jupyter Notebook
  • Python 3.6.9

二、安裝套件

1
pip install -r requirements.txt

三、實際應用

首先,我們將這次專案所需的套件匯入到環境當中,程式碼如下:

1
from fugle_realtime_RESTful_api import *

接著,若要拿到最佳五檔之資料,則需要使用 quote 這隻 API。

不過,如果想要看台股每檔股票的話,需要成為 FugleTrade 的證券戶才能夠享有自己的API Token。
若你已經開戶,取得 API token 的連結在此。

如果還沒開戶的話,大家可以用我的推薦碼連結 ,一起賺 FugleCoin 折抵手續費 XD。
喔對了,現在 FugleCoin 還可以兌換成現金喔!

此處暫時以 api_token="demo"input_symbol="2884" 為例。

首先,使用 qoute_api 函數並在參數當中輸入 api_token="demo"

1
quote = quote_api(api_token='demo')

然後,再使用 update_quote_data 函數並輸入參數 input_symbol="2884"

1
quote.update_quote_data(input_symbol='2884')

執行此程式碼會得到 3 個 output 分別為:

  1. 歷史最佳五檔資料:執行程式碼以來最佳五檔所出現過之價格,並紀錄最後一筆更新之委買或委賣量。
  2. 現在之最佳五檔價格:輸出格式為 List,並且為現在最佳五檔中,委買及委賣各五個價格。
  3. 股票代碼:即輸入查詢支股票代碼。

知道如何拿到最佳五檔的資料後,緊接著就是重頭戲,把屬於我們自己的最佳五檔建立起來!而這邊我們使用的是 Dash 套件。

簡單介紹一下 Dash 這個工具, Dash 是一個用於構建 Web 應用程式的高效 Python 框架,他能夠讓大家非常方便的視覺化各式各樣的圖表、報表等,而且語法也滿平易近人的,並不會太難上手。

話不多說(?),直接上程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(children=[

html.Div(id='order_book', style={'width':'25%', 'display':'inline-block'}),

dcc.Interval(id='interval', interval=1*1000)
])

@app.callback(
Output('order_book', 'children'),
[Input('interval', 'n_intervals')]
)

def order_book_table(interval):

df_quote, price_list, symbol = quote.update_quote_data(input_symbol='2884')

return [
quote.plot_order_book(dataframe=df_quote, price_list=price_list, symbol_id=symbol)
]


if __name__ == '__main__':
app.run_server()

在這段程式碼當中,由於台股目前的即時行情為逐筆行情交易,所以我們使用 dcc.Interval 更新資料,並將 interval 設定為1,000,即一秒。

另外,我們再使用 html.Table 建立最佳五檔的表格,而只要在開盤期間出現過的歷史價格,直到收盤都不會消失,換句話說,就是能夠看到這個交易日即時行情的所有歷史價格。


以上就是簡單的小分享,如果喜歡的話歡迎將我的文章分享出去,若有任何問題也都能夠在下面提問,我會盡我所能回答,也歡迎大家分享自己的新發現,我們下次見~ Thanks~

Comments