不管是在做學術研究或個人投資時,股價變動與公司財報揭露的關係,都是大家考慮的一個重點,例如當公司發布超出市場預期的每股盈餘時,股價隔天往往會有上漲的反應。因此為了研究兩者之間的關係,就需要一組時間序列資料,也就是當時間軸日期變動時,要能同時紀錄股價與財務資料的變化。
這邊就會有一些值得注意的地方,財報的編製必定需要時間,因此我們不會在當下就看到即時的數據,證交所會公告不同季度的財報發佈期限,目前台灣一般公司(金融業較特殊)的規範是每年的 5/15、8/14、11/14 前要發布第一、二、三季的財報,而隔年的 3/31 前則要發布整年的年度財報。
因此如果我們想比對每天的股價變化,是否有受到財報揭露的影響,就要正確地把以「日」為頻率的股價,跟以「季」為頻率的財報做結合,以鴻海(2317-TW)為例,2018 年 Q3 的財報是等到 11/14 時才公布,此時我們才能取得鴻海 Q3 的財務資料。
而這件事可以利用 TEJ 的以下三個資料表結合完成。
- 上市(櫃)未調整股價(日)
- IFRS 以合併為主簡表(累計)— 全產業
- IFRS 以合併為主簡表(累計)— 全產業 報表封面資料
首先我們可以用下列語法查詢這三個資料表的資料。
在財報資料庫「IFRS 以合併為主簡表(累計)-全產業」中雖然有 mdate 這個日期欄位,但 mdate 代表的是財報的「季」別,如 2018/9/1 代表的是 Q3 的財報、2018/12/1 代表的是 Q4 的,如果直接用財報的 mdate 來跟股價資料合併,就會出現 2018/9/1 可以觀察到 Q3 財報數據的不合理現象,正確的作法是應該先將各季的財報資料給予額外欄位,用來記錄揭露日的資訊,如下面的程式碼處理。
如此一來,就可以在股價資料中併入財務資料了,只要依序根據不同的財報揭露日,把財務資料換成最新的數據即可,像下圖這樣。
執行的程式碼就如同下面的範例。
註:’a0003’就是財報揭露日的資料欄位
由於 TEJ 的財務資料庫中,欄位的值是用代碼 acc_code 來查詢,而不是名稱。
如上圖一般,欄位名稱會是代碼而不是一般熟知的會計科目,用 pandas 指令查詢欄位名稱果然都是代碼如下。
因此我們可以用「財務科目代碼名稱對照表」,來把原本的 acc_code 都替換為中文名稱 cname,也可以把下面語法中標示說明可以替換的地方更換成 ename,換成英文名稱。
再看一次 price_data 中的欄位名稱,果然都換成中文了。
最後我們來畫圖看看合併後的結果,當我們把鴻海股價跟 EPS 放在一起時,看 EPS 是不是真的隨著公告日出現變化。
果然 EPS 在 8/14、11/13 這兩個日期出現變化,財報資料跟股價正確地按照時間結合了。
註:此地方之 EPS 是 TEJ 所計算之近四季常續性 EPS
本篇文章所展示之內容係由 TEJ API 工具撈取。
【延伸閱讀】