Architecture
twquant 大致拆成三個部分
- stockindc : 爬取資料並清理成可用的格式
- gen : 合併各資料源以產生年度報表
- drv : 跨年度間運算以計算指標的年度變化,並提供回測的模組
用 pip 安裝完後,輸入
from twquant import stockindc as si
from twquant import gen, drv
就能用啦
How to access data
回顧一下之前的 SQL 版偽代碼
對應到實際代碼的 class / function
財務比率 (FROM 損益表) - FinanceRatio
財務比率 (FROM 資產負債表 / 現金流量表) - FinanceRatio
營業收入 - Revenue
財報公布後收盤價 - Price
(optional) TEJ 公司資料 - join_tej
合成物件 - YearlyRatio, YearlyFinanceReport
按照需求不同也可以獨立使用,不一定要把各部份都合起來,以下解釋
FinanceRatio
這是報表的核心,依據輸入的不同條件,可產生不同類型的財報數字。刻 code 時要注意的是上市櫃對應的網頁不同,ifrs 準則調整前後的網頁亦不同,來源 url 要先做好 mapping。 另外也因為要映射的屬性很多,用 class 來處理可以減少 duplicate code,也容易 debug 。
首先輸入條件以建立物件,四個條件分別對應 「市場別 / 年 / 月 / 用途」,「用途」目前限定輸入 「營益分析 / 財務結構分析」(來源網站還有其他資料可以抓但暫時用不到就沒寫)
特別說明:台灣證券交易所提供的財務比率資料不包括 金控股/銀行股,這是因為前述類型的公司財報跟其他公司差很多,用一般計算公式所得出的財務比率,用來看這些公司其實沒什麼意義(可以參考 讀懂「金融業、營建業」的財務報表),如果還是想看的朋友就需要抓財務三表下來自己算了
TwRevenue
輸入條件以建立物件,三個條件分別對應 「市場別 / 年 / 月」
Price
因為結構比較簡單就直接以 function 處理,輸入日期作條件即可
(optional) join_tej
合併 TEJ 的公司資料庫,目的是要加入公司產業,增加產業這分析維度,並可以衍生計算出同業本益比。
因為並不是每個財報分析都會這樣做,我把他列成 optional 。使用上需要先到 TEJ 官網申請試用 API KEY,使用說明可以參考 官網說明,或是在 Python x MySQL — 從營收出發的產業間分析 前半段中有寫。把資料存到本地端後,用 join_tej 去呼叫,請注意「檔名」和「欄位名稱」跟 code 中的要一樣不然就會報錯。
Generate Data
來看看怎麼把各個小零件拼在一起
YearlyRatio
這個 function 的目的,是合併所有的財務比率(市場/類型),使用上只要直接輸入年份就可以。
YearlyFinanceReport
呼叫這個函式就可以把所有的元素合起來了,按下列三個條件的說明填入適當的值
y: 年份
import_ratio: 預設是 False,也可以把 YearlyRatio 產出的財務比率資料在 local 端存成 [f’./fnt/fnt_{y}.csv’],就可填 True,省去再一次爬蟲時間
tej: 預設是 True, local 端需要有 ‘tej.csv’,(可以用 twquant github 上的文件來套,但須注意最新資料建議從 tej 公司取得) ,若沒有則請輸入 False
以下代碼執行
股利 or 減資
這部分一般比較少用到,但如果你要做回測的話是一定要有,詳細可看 twquant github
Summary
這一篇文章講如何取得及合併資料,如果你只是想看財報數字的話到這邊就很夠用了,若想要回測的話就還有不少關要解 (當然 twquant 解決掉了ㄏㄏ),下一篇進入寫策略跟回測的部分,開始有一點鈔票的味道了喔