目前正逢財報季,有些公司已經上傳第三季財報,許多已基本面為選股主軸的用戶都開始緊盯自己的程式是否跑出新的指引?藉於新手用戶對財報資料的發佈時間和資料操作不熟悉,這篇文章將娓娓道來台股財報資料的時序細節,花幾分鐘,你會了解財報「發布日、截止日、FinlabDataFrame的資料索引轉換方法,讓你上手財報資料選股策略的前處理。
財報發布日定義
FinLab 資料庫系統會每天更新、檢查財報資料,財報發布日以財報電子檔內的資料上傳日當基準資料。你可能疑惑怎麼在新聞或公司重訊已看到 EPS 多少了,但抓下的財報或財報電子檔卻沒有當季資料?那是因為有些公司的財報電子檔上傳日會比董事會重訊發布晚個幾天,通常是因為公司內部或會計作業問題,某些會計項目可能還會再校對或微調等等,實際數字以公司財報完整電子檔上傳才是比較穩當的做法。 大部分的公司會在財報截止日前一週內才上傳完畢。
財報截止日定義
所有公司都必須在每季財報截止日前上傳財報電子書,若沒有即時上傳,通常代表財務狀況出問題、會計師審核上出狀況…若沒在規定期限內補正,後續面臨暫停交易或下市風險。
台股上市櫃公司一年要上傳4次財報,興櫃只要上傳第二季和第四季財報,監理強度不同。各產業截止日細節如下列供參:
上市櫃一般公司
季別/財報截止日對應為下列對應,遇假日則遞延到次一個交易日。
- Q1:當年5/15
- Q2:當年8/14。若為2021年後的KY股,因監管法規改變,改成8/31。
- Q3:當年11/14
- Q4:次年3/31
保險業
季別/財報截止日對應為下列對應,遇假日則遞延到次一個交易日。
- Q1:當年4/30
- Q2:當年8/31
- Q3:當年10/30
- Q4:次年3/31
金融業
這邊指的是非保險的金融業,如銀行、證券、票券、金控業者。季別/財報截止日對應為下列對應,遇假日則遞延到次一個交易日。
- Q1:當年5/15
- Q2:當年8/31
- Q3:當年11/14
- Q4:次年3/31
量化平台財報資料操作
取得資料
至財報資料庫複製財報項目的使用方法,即可取得財報資料。
欄位是每家公司的股號,包含所有公開發行公司,索引則是每季的季別,ex : 2013Q1。
新手會疑惑為什麼看到一堆NaN ?不要緊張,不是資料出問題,而是這些公司當時未上市櫃或按規定不用發布財報。
另外提一個小技巧,如果你想要拿掉未上市櫃公司來方便觀察資料,可以使用pandas的dropna進行操作。下面的例子會排除掉每一欄位沒有20格有數值的欄位,篩出上市櫃有較久歷史的公司,就可以顯示中間部分的資料,像是1101台泥等等。
時序轉換
上面原始財報數據的日期索引是如「2022-Q1」這類的文字格式,雖然回測將不同尺度的資料取交集時會自動將時序轉成財報發布日的datetime格式,但若有其他用途,想將時序索引從文字轉換成財報發布日的datetime格式,該如何做呢?
季別文字轉財報發佈日
轉非常的簡單,只要加上 index_str_to_date()
,就能將資料轉換,這是FinlabDataFrame類別內建的方法。
從下圖所示,可以看到加完 index_str_to_date()
後,索引改變了。
要注意的是,如果公司還沒有正式上傳「財報電子書」,雖然XBRL資訊平台已經有數值可下載,但由於財報電子書上傳日資料未定,資料仍會被歸到截止日的欄位。
現在正臨2022-Q3財報季,沒有財報電子書上傳日的數值都會放到最後兩欄的財報截止日,2022-10-31是保險業Q3截止日、2022-11-14則是一般上市櫃公司的Q3截止日,不用擔心回測會用到未來資料,回測會再去與收盤價的交易日索引做對應,遇假日會遞延到下一個交易日。
你可能會好奇,公司每季只會發布一次財報,為何日期會那麼多天?那是因為只要A日有任一家公司有上傳紀錄,為方便回測,索引都會加入發布日,如果其他公司在A日沒發布財報,其他公司則會套用近一期數值做填充。
季別文字轉財報截止日
若想使用財報截止日做回測與選股,可以使用 deadline()
,就能將資料轉換,這是FinlabDataFrame 類別內建的方法。注意財報資料與其他時間尺度的資料做交集時,預設是使用財報發布日,所以若要使用截止日當條件,一定要加上 deadline()
,使用範例如下。
截止日日期索引包括一般公司、保險業、金融業的規定日期,若當日沒數值,則會拿近一筆數值來補,以方便回測。
結論
經過上述說明,是不是對 FinLab 量化平台的財報資料操作與原理更為熟悉了呢?
如果想進一步學習用財報來選股,可參考這篇財務指標計分法的教學~
如果還有其他相關問題,歡迎隨時與我們討論喔!