跳轉到

過濾 KY 股財報(台股)

美股版本

本策略的美股版本請見 English page,改為過濾 ADR 與外國註冊公司(以 us_company_profilecountry 欄位判斷)。

在台灣第一上市的海外公司(KY 股)經常爆出財報疑慮,對此敏感的投資人可以在財報策略中排除 KY 股。本範例以現金流量策略為基礎,示範如何過濾 KY 股。

現金流量選股策略

策略篩選同時滿足以下條件的標的:

  1. 營業現金流 > 0 -- 本業有實際現金流入
  2. 投資現金流 > 0 -- 投資活動帶來正向現金流(例如處分資產)
  3. 融資現金流 < 0 -- 公司正在償還借款或減資,財務趨於保守
  4. ROE > 5 -- 股東權益報酬率高於 5%,具備基本獲利能力
  5. 股價 > 10 元 -- 排除低價股

基本面指標使用 .deadline() 對齊財報公告截止日,確保不使用未來資訊。

過濾 KY 股

透過 security_categories 資料表,找出公司名稱包含「KY」的標的,從持股中剔除。

程式碼

現金流量選股

from finlab import data
from finlab.backtest import sim

營業現金流 = data.get("financial_statement:營業活動之淨現金流入_流出").deadline()
投資現金流 = data.get("financial_statement:投資活動之淨現金流入_流出").deadline()
融資現金流 = data.get("financial_statement:籌資活動之淨現金流入_流出").deadline()
roe = data.get("fundamental_features:ROE稅後").deadline()
close = data.get("price:收盤價")

position = (營業現金流 > 0) & (投資現金流 > 0) & (融資現金流 < 0) & (roe > 5) & (close > 10)

過濾 KY 股

# 過濾 KY股
sc = data.get("security_categories")
position_col = position.columns
ky_filter = position_col[
    ~position_col.isin(list(sc[sc["name"].str.contains("KY")]["stock_id"]))
]
position = position[ky_filter]

report = sim(position, resample="M", upload=False)
report.display()

策略特色

  • 使用 .deadline() 將財報資料對齊公告截止日,避免前視偏誤(look-ahead bias)
  • KY 股過濾透過公司名稱比對實現,因為 KY 股的公司名稱固定包含「KY」字樣
  • 每月換股(resample='M'),等權重持有所有符合條件的標的
  • 此過濾方法可套用於任何基本面策略,只需在最終 position 上執行 KY 股過濾即可

關鍵參數

  • .deadline():將季度財報資料對齊至公告截止日,確保當下只能使用當時已公開的財報,避免前視偏誤。
  • 營業現金流 > 0 且 投資現金流 > 0 且 融資現金流 < 0:經典的「現金流三角」品質條件,對應本業賺現金、投資活動淨流入(例如處分資產)、公司同時在償還負債或減資,財務結構趨於保守健康。
  • roe > 5:ROE 高於 5% 的獲利門檻,排除低效率或虧損企業。
  • close > 10:股價大於 10 元,濾掉低價股與殭屍股。
  • security_categories 搭配 name.str.contains("KY"):用公司名稱欄位判斷 KY 股,因為所有 KY 股在台股資料中命名都固定帶有「KY」字樣。
  • resample='M':每月換股,對應季報節奏並兼顧交易成本。

預期行為

此策略預期在財報品質分散、現金流造假風險較高的階段展現明顯的過濾效果:排除 KY 股之後,持股的財報品質與會計透明度會顯著提升,長期能降低財報爆雷造成的極端回撤。但同時也會犧牲某些 KY 股真實成長帶來的報酬(並非所有 KY 股都有問題),因此這是一個「降低尾端風險、略微壓低平均報酬」的保守型設計。若在整體市場強勢期間,這項過濾會讓策略略微跑輸大盤;但在空頭與財報爆雷季時,避開問題股所獲得的保護通常大於錯失的機會。