【資料科學】客製化金融儀錶板
運用 python 製作屬於自己的金融儀表板 ( 外資買賣超排行、法人買賣超和股價整合圖表 )
前言
延續前幾集對於 python 常用的套件,如 numpy, pandas 和 matplotlib 進行介紹,本次將結合上述套件的功能,提出實用的案例分享。
作為一個投資人,每天的例行公事就是要花時間觀看一些市場的統計資訊,而每次要觀看時都要先去證交所下載資料,再透過excel拉出圖表,這作業實在很繁瑣。比起每日執行一連串重複動作,使用程式執行明顯更有效率!
本篇文章的目的就是要教大家如何運用 python 整理資料並繪製出想要的資訊,客製化屬於自己的金融儀錶板 🏄🏄~
本文重點概要
- 🌟 matplotlib 繪製儀錶板
🚪本次使用的相關網站連結🚪
- 1️⃣ API官方網站:TEJ API 官網
- 2️⃣本文範例產品包:TEJ E SHOP
- 3️⃣本文完整程式:TEJ GITHUB
✔️ 使用 matplotlib 繪製儀錶板
📝 匯入套件
import tejapi
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
tejapi.ApiConfig.api_key = 'your key'
📝資料撈取
- 上市所有普通股證券代碼 ➡️ TEJ E SHOP 小資方案 證券屬性表(TWN/EWNPRCSTD)
- 股價資料 ➡️ TEJ E SHOP 小資方案 證券交易資料表(TWN/EWPRCD)
- 法人買賣超(日) ➡️ TEJ E SHOP 達人方案 三大法人資料(TWN/EWTINST1)
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]
增加濾網:三大法人之近月累積量同步買超(外資買超>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]
整理好資料後就可以開始製作我們的儀錶板了😄~
📊 繪製儀錶板
📈外資買/賣超排名前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。
📈 買賣超/股價圖
plt.style.use : 設定繪圖風格。
plt.rcParams[‘font.sans-serif’]=[‘Microsoft YaHei’] : 設定字體,python內件沒有中文字體,需要額外匯入字體才能顯示中文。
stock = input() : 手動輸入欲查詢之個股代碼。
FI1.twinx() : 共用 FI1的x軸。
結語
圖表製作方法以及呈現方式可以說是百百種,我們介紹了如何將自己常看的圖表透過python來實現,畢竟學習程式很大一項好處在於能減少繁瑣的例行公事,如果大家喜歡整合圖表類的主題,可以在下方留言告訴我們,未來也會持續分享 python 在投資領域上的應用,請大家拭目以待 ❗️❗️ 此外大家也可以透過這些 package 的官方網站去探索更多功能~
最後,如果喜歡本篇文章的內容請幫我們點擊下方圖示👏 ,給予我們更多支持與鼓勵,有任何的問題都歡迎在下方留言/來信,我們會盡快回覆大家👍👍
再次附上相關網站連結 💪
- API官方網站:TEJ API 官網
- 本文範例產品包:TEJ E SHOP
- 本文完整程式:TEJ GITHUB
🌟有任何使用上的問題都歡迎與我們聯繫:聯絡資訊🌟
附上完整程式碼 🚪