實作財報選股及回測 — Code Explain

PHIL
Stock Analysis
Published in
5 min readJan 5, 2020

twquant 已發布囉! 在 terminal 輸入 pip install twquant 即可安裝

在系列文的第一篇文章中有討論了方法論並貼出代碼 ,這一篇算是使用手冊,解釋代碼的邏輯,並將說明如何使用

Yeah let’s dig it through

Architecture

twquant 大致拆成三個部分

  • stockindc : 爬取資料並清理成可用的格式
  • gen : 合併各資料源以產生年度報表
  • drv : 跨年度間運算以計算指標的年度變化,並提供回測的模組

用 pip 安裝完後,輸入

from twquant import stockindc as si
from twquant import gen, drv

就能用啦

How to access data

回顧一下之前的 SQL 版偽代碼

Pseudo Code

對應到實際代碼的 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 解決掉了ㄏㄏ),下一篇進入寫策略跟回測的部分,開始有一點鈔票的味道了喔

--

--