當台灣的上市公司宣布有關股票的特別消息,比如說要分紅或者調整股票的價值(這種情況我們稱之為除權或除息),這通常會對公司的股票價格造成一些波動。我們的研究就是要搞清楚,這些宣布到底對股票價格有什麼影響。
本例用 finlab package 取得除權息公告,包括公告日期、生效日與股票交易資料,再用事件研究比較除權息前後的股價表現。
將資料按日期和股票代號整理成表格。
然後我們用一種叫做事件研究的方法,來計算這些特別宣布前後,股票的價格變動情況。我們會比較這個變動和一般市場的變動有什麼不同,從而評估這個宣布的影響力度。
查看事件前後的異常報酬率
我們將用簡單的 Python 語法來分析:
- 從財務資料庫中提取除權息公告數據。
- 清洗和轉換數據,創建事件矩陣。
- 進行事件研究,計算異常收益率。
- 將結果以視覺化的方式呈現,分析事件對股價的影響。
只需要簡單的幾行,就能知道事件前後的異常報酬率了。舉例而言,如果想知道除權前後的異常報酬率,只需要執行下面的程式碼,就能輸出圖表了。
拿取財務資料
這裡把除權除息日期當作事件,檢查事件前後的股價變化。
用 finlab 讀取除權息公告,顯示前幾筆資料:
顯示程式碼
from finlab import data
data.get('dividend_announcement').head()執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
幫我設定 FinLab,重現這篇文章,請讀:https://finlab.finance/setup?relatedUrl=/blog/event-study-usage

- 從
finlab庫導入data模組。 - 調用
get函數來檢索dividend_announcement數據集,這是一個包含公司除權息公告的數據集。 - 顯示了包含多個欄位的 DataFrame,這些欄位包括股票代號、公告日期、基準日期、公司名稱、所屬期間、增資配股等資訊。
移除重複資料及缺少股票代號、除權交易日的列,再轉成以日期為索引、股票代號為欄位的事件表格。
顯示程式碼
from finlab import data
event = data.get('dividend_announcement')\
.drop_duplicates(subset=['stock_id', '除權交易日'])\
.dropna(subset=['stock_id', '除權交易日'])\
.pivot(index='除權交易日', columns='stock_id', values='市場別')\
.rename_axis('date')\
.notna()
event.head()- 這段程式碼進一步處理上述提取的數據。
.drop_duplicates()移除重複的行。.dropna()刪除含有空值的行。.pivot()將數據重塑成一個以除權交易日為索引,股票代號為欄位的新 DataFrame。.rename_axis('date')更改索引名稱為date。.notna()將所有的 NaN 值轉換為布林值 False。

這樣就可以產生一張表格,True,對應到就是除權的股票和日期,我們可以用簡易的程式來驗證,來看除權息通常都是每年的夏天發生:
顯示程式碼
event.sum(axis=1).plot()
用以下函數計算除權息後五日、十日、二十日、六十日的報酬率:
顯示程式碼
from finlab.tools.event_study import create_factor_data
adj_close = data.get('etl:adj_close')
factor_data = create_factor_data(event, adj_close, event=event)
factor_data
用 event_study 計算並呈現事件發生後的異常報酬率:
顯示程式碼
from finlab.tools import event_study
benchmark = data.get('benchmark_return:發行量加權股價報酬指數')
r = event_study.event_study(factor_data, benchmark, adj_close.ffill())
r.head()
這樣就產生出一張表格,其中 y 軸是每一次除權息,x 軸是除權息的前後幾天的報酬率。我們可以用簡易的方式來將報酬率繪製出來:
顯示程式碼
r.mul(100).mean().plot.bar(use_index=False)
ax = r.mean().mul(100).cumsum().plot(use_index=False)
Y軸是報酬百分比,X軸是天,第零天為事件發生日。直條圖為扣除大盤的報酬率,線段為累計報酬率。
執行完上面的程式後,就能把數據視覺化呈現出來,運用起來相當方便。更甚者,FinLab 已經提供完整的資料集了,不用自己再用爬蟲去慢慢爬資料了!
VIP 區域接著會示範除權息事件研究:比較事件後 5、10、20、60 日報酬,並用 OLS 檢查 PE、PB 因子對 10 日報酬的影響。
VIP 區域包含策略細節
登入後可看策略優化、完整程式碼與互動式回測報告
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

