【資料科學】客製化金融儀錶板

TEJ 台灣經濟新報
TEJ-API 金融資料分析
10 min readApr 26, 2021

運用 python 製作屬於自己的金融儀表板 ( 外資買賣超排行、法人買賣超和股價整合圖表 )

前言

延續前幾集對於 python 常用的套件,如 numpy, pandas 和 matplotlib 進行介紹,本次將結合上述套件的功能,提出實用的案例分享。

作為一個投資人,每天的例行公事就是要花時間觀看一些市場的統計資訊,而每次要觀看時都要先去證交所下載資料,再透過excel拉出圖表,這作業實在很繁瑣。比起每日執行一連串重複動作,使用程式執行明顯更有效率!

本篇文章的目的就是要教大家如何運用 python 整理資料並繪製出想要的資訊,客製化屬於自己的金融儀錶板 🏄🏄~

本文重點概要

  • 🌟 matplotlib 繪製儀錶板

🚪本次使用的相關網站連結🚪

✔️ 使用 matplotlib 繪製儀錶板

📝 匯入套件

import tejapi
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
tejapi.ApiConfig.api_key = 'your key'

📝資料撈取

1️⃣ 撈取上市所有普通股證券代碼

# 撈取上市所有普通股證券代碼
stk = tejapi.get('TWN/EWNPRCSTD'
,paginate = True
,chinese_column_name = True)
code = stk['證券碼'][(stk['證券種類名稱']=='普通股')&(stk['上市別']=='TSE')].to_list()
code
上市所有普通股代碼

2️⃣ 撈取法人買賣超(日)

# 撈取法人買賣超(日)
buyover = tejapi.get('TWN/EWTINST1'
             ,coid=code
             ,mdate = {'gte':'2021-01-01'}
             ,paginate = True
             ,chinese_column_name = True)
# 修改日期格式
buyover['日期'] = buyover['日期'].apply(lambda x: pd.to_datetime(x).date())
buyover['日期'] = buyover['日期'].astype('datetime64')
buyover[buyover['日期']>='2021-03-20']
法人買賣超(日)

3️⃣撈取股價資料

# 撈取股價資料
stock_price = tejapi.get('TWN/EWPRCD',
coid = code,
mdate={'gte':'2021-03-20'},
opts={'columns':['coid','mdate','open_d', 'high_d','low_d','close_d','volume']}
,paginate = True,chinese_column_name = True)
# 調整日期格式
stock_price['日期'] = stock_price['日期'].apply(lambda x: pd.to_datetime(x).date())
stock_price['日期'] = stock_price['日期'].astype('datetime64')
stock_price
股價資料

📝資料彙整

分別以外資、投信和自營買賣超為排序標準,計算一個月以來的累積買賣超,下圖以排序前10名為例。

外資買超前10名的個股為彩晶、中信金、新光金、華邦電、佳世達、宏碁、國泰金、日月光、京元電、富邦金和南亞,金融、面板半導體相關產業類股占大多數。

投信買超前10名之標的為群創、友達、中鋼、華航、聯電、長榮、華邦電、南紡、彩晶、裕民,與外資的投資風格迥異,除了面板記憶體外,其他皆為傳產(航運、鋼鐵和紡織)

自營買超前10名之標的為中鋼、聯電、新光金、中石化、友達、台泥、彩晶、群創、大成鋼、開發金,與投信的看法較接近,資金主要分布在面板以及傳產(鋼鐵和石化),同時也有部分資金投入金融類股。

綜合上述,三者的交集為面板產業,目前內資在籌碼面上看法一致,多在傳產上下了重注,外資則更多分配在金融與科技類股。

sorted_fi = buyover[buyover['日期']>'2021-03-20'].groupby(by='證券碼').sum().sort_values(by='外資買賣超(千股)',ascending = False)
sorted_fi[:10]
sorted_it = buyover[buyover['日期']>'2021-03-20'].groupby(by='證券碼').sum().sort_values(by='投信買賣超(千股)',ascending = False)
sorted_it[:10]
sorted_pro = buyover[buyover['日期']>'2021-03-20'].groupby(by='證券碼').sum().sort_values(by='自營買賣超(千股)',ascending = False)
sorted_pro[:10]
近一月外資累積買超-前10名/近一月投信累積買超-前10名/近一月自營累積買超-前10名

增加濾網:三大法人之近月累積量同步買超(外資買超>0 and 投信買超>0 and 自營買超>0)

增加濾網後,可藉此觀察三大法人看法一致的個股,並同樣以外資、投信和自營商的買超量分別進行排序。

sorted_fi[(sorted_fi['外資買賣超(千股)']>0)&(sorted_fi['投信買賣超(千股)']>0)&(sorted_fi['自營買賣超(千股)']>0)][:10]sorted_it[(sorted_it['外資買賣超(千股)']>0)&(sorted_it['投信買賣超(千股)']>0)&(sorted_it['自營買賣超(千股)']>0)][:10]sorted_pro[(sorted_pro['外資買賣超(千股)']>0)&(sorted_pro['投信買賣超(千股)']>0)&(sorted_pro['自營買賣超(千股)']>0)][:10]
外資近一月累積買賣超-前10名 / 投信近一月累積買賣超-前10名/ 自營近一月累積買賣超-前10名

整理好資料後就可以開始製作我們的儀錶板了😄~

📊 繪製儀錶板

📈外資買/賣超排名前5大

  • 外資近5天買/賣超排名
  • 外資近20天買/賣超排名
  • 外資近60天買/賣超排名

buy_table : 用來存放不同週期下買超前五大的 dataframe。
sell_table : 用來存放不同週期下賣超前五大的 dataframe。
xx : 計算5, 20, 60天下每一檔個股的累積買賣超。
x.insert() : 插入名為 stock的欄位,其值設定為 xx。
x : 存放相同週期多股的累積買賣超的 dataframe。
x.loc[len(x)-1] : 呼叫最新一期的 x值。
sort_values(ascending=False)[:5] : 根據給定值,由大至小排序,排序結果之前 5名。
reset_index(drop=True) : 重設 dataframe or series 的 index。

4/19 買超排名前5大/賣超排名前5大

📈 買賣超/股價圖

plt.style.use : 設定繪圖風格。
plt.rcParams[‘font.sans-serif’]=[‘Microsoft YaHei’] : 設定字體,python內件沒有中文字體,需要額外匯入字體才能顯示中文。
stock = input() : 手動輸入欲查詢之個股代碼。
FI1.twinx() : 共用 FI1的x軸。

結語

圖表製作方法以及呈現方式可以說是百百種,我們介紹了如何將自己常看的圖表透過python來實現,畢竟學習程式很大一項好處在於能減少繁瑣的例行公事,如果大家喜歡整合圖表類的主題,可以在下方留言告訴我們,未來也會持續分享 python 在投資領域上的應用,請大家拭目以待 ❗️❗️ 此外大家也可以透過這些 package 的官方網站去探索更多功能~

最後,如果喜歡本篇文章的內容請幫我們點擊下方圖示👏 ,給予我們更多支持與鼓勵,有任何的問題都歡迎在下方留言/來信,我們會盡快回覆大家👍👍

再次附上相關網站連結 💪

🌟有任何使用上的問題都歡迎與我們聯繫:聯絡資訊🌟

附上完整程式碼 🚪

--

--

TEJ 台灣經濟新報
TEJ-API 金融資料分析

TEJ 為台灣本土第一大財經資訊公司,成立於 1990 年,提供金融市場基本分析所需資訊,以及信用風險、法遵科技、資產評價、量化分析及 ESG 等解決方案及顧問服務。鑒於財務金融領域日趨多元與複雜,TEJ 結合實務與學術界的精英人才,致力於開發機器學習、人工智慧 AI 及自然語言處理 NLP 等新技術,持續提供創新服務