臺灣股票即時行情API介面説明:永豐金證券的API

作者:Sean Liu      Source: iT邦

感謝Sean Liu ,這篇文章介紹的是永豐金證券的API。

臺北酷碼科技提供各種API介面支援,需要股票、期貨、外匯即時API介面的,請聯係小弟:gmail郵箱前綴twtpcc,謝啦!

臺灣的券商也有提供股票下單API喔,包含:群益證券、永豐金證券、統一證券...等等,都有提供API下單的服務,其中有提供Python介面的券商有群益證券及永豐金證券,因為筆者本身是用永豐金的帳戶,下面會使用永豐金證券的API作為範例,當然大家也可以多方嘗試各家券商的API喔。

Shioaji GitHub

Shioaji是永豐金證券提供的API介面,提供報價、下單功能,官方的Document還算蠻詳細的,接下來就會照著這個Document來用用看它的功能。

安裝Shioaji

就跟一般python套件一樣,一行就安裝了。

pip install shioaji

初始化

要使用券商的API的話,需要有:

  1. 券商帳號:login的時候會用到
  2. 下單憑證:有券商帳號後,下載電腦版的下單軟體,它就會請你下載憑證(.pfx檔案),下面載入憑證時,就指定憑證檔案的路徑即可。
# 載入shioaji套件
import shioaji as sj

# Initialization
api = sj.Shioaji()

# Login
accounts = api.login("YOUR_PERSON_ID", "YOUR_PASSWORD")

# 載入憑證
api.activate_ca(
    ca_path="/c/your/ca/path/Sinopac.pfx",
    ca_passwd="YOUR_CA_PASSWORD",
    person_id="Person of this Ca",
)

Stock Contract

不管是要取得報價或是下單,要告訴電腦說你想看什麼商品,contract物件就是用來代表商品內容的,所以stock contract就是用股票當作你要查報價或下單的商品。

假設我今天對0050有興趣,可以這樣寫:
In

contract_0050 = api.Contracts.Stocks["0050"]
contract_0050

Out

Stock(exchange=<Exchange.TSE: 'TSE'>, code='0050', symbol='TSE0050', name='元大台灣50', category='00', limit_up=115.9, limit_down=94.9, reference=105.4, update_date='2020/09/18', margin_trading_balance=7405, day_trade=<DayTrade.Yes: 'Yes'>)

上面server回應的訊息中,attributes的部份在document都有解釋。

取得歷史tick資料

tick資料呢,就是每筆成交的資料,所以它的index不會是固定的時間區間(例如:之前的日收盤資料就是固定每天都是一筆),它會紀錄每筆成交的價格及交易量,算是蠻詳細的資料。
In

ticks = api.ticks(contract_0050, "2020-09-18")
ticks

Out

Ticks(
    ts=[1600419602458055000, 1600419615455942000, 1600419619462302000, ...], 
    close=[105.4, 105.4, 105.35, ...],
    volume=[82, 3, 5, ...],
    bid_price=[105.35, 105.35, 105.3, ...],
    bid_volume=[5, 5, 3, ...],
    ask_price=[105.4, 105.4, 105.4, ...],
    ask_volume=[56, 53, 293, ...]
)

server回應的訊息,是將每種資料(包含:時間、成交價、成交量、委買價量、委賣價量)各用一個list表示。

將tick資料轉換成DataFrame

因為tick資料很多,list就會變成一長串,閱讀上不是那麼容易,因此可以把它轉成DataFrame會比較好看。

import pandas as pd
tick_data_df = pd.DataFrame({**ticks})
tick_data_df.ts = pd.to_datetime(tick_data_df.ts)
tick_data_df.head()

將ticks整理成資料表格之後,就變得比較容易讀了。

取得歷史K棒資料

之前有寫過Tiingo的每日OHLC資料,而shioaji有提供以分鐘為區間的OHLC(俗稱分K資料,以分鐘為單位):

kbars = api.kbars(contract_0050, start="2020-09-18", end="2020-09-18")
kbars_df = pd.DataFrame({**kbars})
kbars_df.ts = pd.to_datetime(kbars_df.ts)
kbars_df.head()

上圖中,09:01的資料是紀錄從9點到9點01分這段時間的OHLC及成交量。


這個網誌中的熱門文章

台灣股市節假日休市時間一覽表-2024

江恩分析圖表的處理 Taipei Cool Code