Table of Contents
三大法人是台股市場中重要的參與者,個股的三大法人每日買賣超、累積買賣超與持股比例資訊,都是投資人參考的依據。故本文透過分析三大法人在整體股市與各產業的持股市值變化,來梳理三大法人從2015年至今的產業偏好與投資策略差異,期待能為讀者帶來交易上的靈感。
三大法人詳細的說明如下:
本文使用 Windows OS 並以 Jupyter Notebook 作為編輯器
# 功能模組
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] # 解決 plot中文問題
plt.rcParams['axes.unicode_minus'] = False
#TEJ API
import tejapi
tejapi.ApiConfig.api_key = "your key"
Step 1. 資料撈取
撈取上市上櫃公司代碼,並排除金融業、存託憑證。
industry = tejapi.get("TWN/AIND",
paginate=True,
opts={'columns':['coid','mdate','mkt','tejinm4_c','tejinm3_c']},
chinese_column_name=True)
industry = industry[~industry['TSE新產業_名稱'].isin(['金融業','','存託憑證']) &
(industry['上市別'].isin(['TSE']))]
security_list = industry['公司簡稱'].tolist()
撈取上市上櫃公司的市值、三大法人持股市值。
# TEJ為維持主機運行的穩定,總筆數單次最多為1,000,000筆。故我們可以將公司以50家分一組,以便迴圈分次撈取資料
groups = []
while True:
if len(security_list) >= 50:
groups.append(security_list[:50])
security_list = security_list[50:]
elif 0 <= len(security_list) < 50:
groups.append(security_list)
break
market_value = pd.DataFrame()
for group in groups:
market_value = market_value.append(tejapi.get('TWN/APRCD',
coid = group,
mdate= {'gte': '2015-01-01','lte':'2021-01-19'},
opts={'columns':['coid','mdate','mv']},
chinese_column_name=True,paginate=True)).reset_index(drop=True)
data = pd.DataFrame()
for group in groups:
data = data.append(tejapi.get('TWN/ATINST1',
coid = group,
mdate= {'gte': '2015-01-01','lte':'2021-01-19'},
opts={'columns':['coid','mdate','qfiimv','fundmv','dlrmv']},
chinese_column_name=True,paginate=True)).reset_index(drop=True)
Step 2. 合併資料
合併上述公司資料與相對應的產業名稱。
data = pd.merge(data,industry, how='left', left_on='證券名稱', right_on='公司簡稱')
data = pd.merge(data,market_value, how='left', left_on=['證券名稱','年月日'], right_on=['證券代碼','年月日'])
data.head(10)
Step 3. 計算籌碼持股市值
我們直接從 TEJ獲得的三大法人持股市值,然後去計算其他
持股市值,其他 = 市值-(外資+投信+自營)
,如散戶、董監事持股、公司法人、壽險業與私募基金的持股市值。
# 計算籌碼持股市值
data['其他(百萬元)'] = data['市值(百萬元)'] - data['外資總投資市值(百萬)'] - data['投信持股數市值(百萬)']
- data['自營持股數市值(百萬)']
data = data[['證券代碼','TSE新產業_名稱', 'TEJ子產業_名稱', '年月日', '外資總投資市值(百萬)',
'投信持股數市值(百萬)', '自營持股數市值(百萬)','其他(百萬元)']]
# 改欄位名稱
data = data.rename(columns={'外資總投資市值(百萬)':'外資',
'投信持股數市值(百萬)':'投信',
'自營持股數市值(百萬)':'自營',
'其他(百萬元)':'其他'})
Step 1. 籌碼持股市值百分比
透過groupby
功能能輕鬆將資料分組,以便分析不同分組下的敘述性統計,如下方程式碼,便是將日期分組,然後加總不同日期下整體上市櫃公司的持股市值比例。
從下圖發現2015年開始外資在台股的持股市值比例穩定上升,即使外資從2021年初至今買賣超-4,470億,但外資的持股市值仍將近4成,相較於投信與自營則只有較少的持股市值比例。
# 繪製籌碼持股市值百分比
figure_table1 = data.groupby(['年月日'])[['外資','投信','自營','其他']].sum()
figure_table1 = figure_table1.divide(figure_table1.sum(axis=1), axis=0)
fig, ax = plt.subplots(figsize = (14,8))
ax.set_title('籌碼持股市值百分比', fontsize=16, fontweight='bold')
ax.set_ylabel('Percentage', fontsize=12,rotation=0)
ax = ax.stackplot(figure_table1.index, figure_table1.T)
plt.legend(figure_table1.columns,loc=2, prop={'size': 12})
plt.show()
# 要反過來看圖例去對照圖形
Step 2. 三大法人在不同產業的持股市值百分比
下圖由左到右依序是外資、投信與自營,可以發現外資與投信有較相近的產業持有市值趨勢,半導體產業的部位都持續放大,而外資又比投信更集中於半導體產業。自營則有相當波動的產業持股市值,反映自營有較靈活且短線的投資策略,不同產業的持股市值比較為相近。
Step 3. 外資在半導體產業鏈的持股市值百分比
外資在半導體產業的持股市值比例從2015年至今,持股市值比例從40%上升至70%,故我們想透過 TEJ資料庫分類的子產業別,進一步分析外資在半導體產業鏈的持股市值分配比例。發現在23個半導體子產業別中,晶圓代工佔80%,而 2330台積電又在晶圓代工中佔95%以上。
外資與投信在台灣有60%的持有市值比例在半導體產業,自營雖然也有較高的持有市值比例在半導體產業,但整體產業持有市值比例有劇烈的波動,反映自營靈活的投資策略與短線操作。另外我們也進一步分析外資在半導體產業鏈的持有市值比例,發現外資的產業選股布局體現80/20法則,外資持股市值比例主要由 2330台積電貢獻。
最後若讀者對籌碼面與產業別分組的分析感興趣,歡迎讀者至 TEJ E-Shop選購符合自身需求的資料包組合。
電子報訂閱