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

Alan Lin
Fugle
Published in
6 min readAug 22, 2019
左圖為 FugleTrade,右圖為一般券商公版

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

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

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

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

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

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

而本文特別想改善的是第一點的問題。針對第一點,我們可以想像五檔外的資訊就像 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

二、安裝套件

pip install -r requirement.txt

三、實際應用

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

from fugle_realtime_quote import *

接著,我們使用order_table()抓取我們想要查看的股票。

不過,如果想要看台股每檔股票的話,需要成為FugleTrade的證券戶才能夠享有自己的API Token。

若你已經開戶,取得API token的連結在此。

如果還沒開戶的話,大家可以用我的推薦碼連結 ,一起賺 FugleCoin 折抵手續費 XD。

此處暫時以 api_token=”demo” 及 symbol_id=”2884"為例。

fugle = order_table(api_token = 'demo', symbol_id = '2884')

完成 order_table() 的設定之後,接下來我們就要將第一筆資料抓下來啦~

程式碼非常簡單,只有一行:

fugle.get_open_message()

抓下來之後,緊接著就是重頭戲,把屬於我們自己的最佳五檔建立起來!而這邊我們使用的是 Dash 套件。

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

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

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='quote_table'),

dcc.Interval(
id='interval-component',
interval=5000,
n_intervals=1
),

])
@app.callback(
Output('quote_table', 'children'),
[Input('interval-component', 'n_intervals')])
def table(interval_component):

fugle.update_data()

return html.Div([

fugle.message_table()

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

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

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

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

--

--