財務報表與選股
技術指標告訴你「價格在做什麼」,財務報表告訴你「這家公司體質好不好」。這一頁介紹如何抓取上市公司的財務報表與財務比率,並示範一個最基本的財報選股邏輯:只挑 ROE 長期穩定的公司。
財報資料哪裡找
| 來源 | 內容 |
|---|---|
| 公開資訊觀測站(MOPS) | 台灣上市櫃公司財報、公告的官方彙整站 |
| 政府資料開放平台 | 上市公司基本資料的公開資料集 |
| 券商財報頁面(如個股速覽頁) | 部分券商會把資產負債表、損益表整理成單一 HTML 表格,方便用 pandas.read_html 直接讀取 |
券商網頁屬於第三方整理
範例中讀取的券商財報頁面(如個股速覽頁)是第三方整理後的資料,網頁結構可能隨時調整。正式使用前建議以公開資訊觀測站的原始財報為準做交叉核對。
讀取財務報表
網頁上的財報表格,可以直接用 pandas.read_html() 整批讀進來,不需要一格一格複製貼上:
import pandas as pd
url = "券商個股財報頁面網址"
dfs = pd.read_html(url, index_col=0) # 一次讀出頁面中所有表格
df = dfs[2] # 依實際頁面結構挑出資產負債表
df.columns = df.loc["期別"] # 把「期別」列設成欄位名稱
df.index.name = "科目"
df.loc["資產總額"] # 取出單一會計科目、各期的數字
用財務比率做簡單選股
常見的財報選股邏輯,是設定一個財務比率的門檻,只留下長期符合條件的公司。以 ROE(股東權益報酬率) 為例:連續 5 年中,至少有 4 年 ROE 超過 15%,代表公司長期獲利能力穩定。
import numpy as np
import pandas as pd
def roe_strategy(stock_no):
url = f"券商個股財務比率頁面網址?a={stock_no}"
dfs = pd.read_html(url)
df = dfs[2]
years = df[df[0] == "期別"].iloc[0][1:].astype(int)
roe = df[df[0] == "ROE(B)─常續利益"].iloc[0][1:].astype(float)
# 近 5 年中,ROE > 15% 的年數是否達到 4 年
qualified_years = sum(np.array(roe)[:5] > 15)
return qualified_years >= 4
companies = pd.read_csv("https://dts.twse.com.tw/opendata/t187ap03_L.csv", encoding="utf8")
selected = [code for code in companies["公司代號"] if roe_strategy(code)]
這只是最簡單的單指標選股示範;實務上通常會同時檢查獲利能力(ROE、毛利率)、財務結構(負債比)與成長性(營收成長率)等多個面向,並留意個別公司財報結構的例外情況。
動手做
| Notebook | 內容 |
|---|---|
| 3-1 抓取財務報表 | 用 pandas.read_html 讀取個股資產負債表並繪製走勢 |
| 3-2 抓取財務比率 | 讀取 ROE 等財務比率資料 |
| 3-3 簡單財報選股 | 完整示範用 ROE 門檻篩選出全市場符合條件的公司 |