文件
開啟 Studio

策略範例

過濾 KY 股財報

本頁內容5

在台灣第一上市的海外公司(KY 股)經常爆出財報疑慮,對此敏感的投資人可以在財報策略中排除 KY 股。這一頁以現金流量策略為基礎,示範怎麼過濾 KY 股;同樣的做法可以套用在任何基本面策略。

策略邏輯

同時滿足以下條件才買進:

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

最後用 security_categories 資料表找出公司名稱包含「KY」的股票,從持股中剔除。每月換股,等權重持有所有符合條件的股票。

基本面指標用 .deadline() 把日期對齊財報公告截止日,確保當下只用到當時已公開的財報,避免前視偏誤(look-ahead bias)。

完整程式碼

strategy.py
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股
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()

report.display() 會畫出完整的回測報告。

怎麼調整

  • 現金流三角 營業現金流 > 0、投資現金流 > 0、融資現金流 < 0:經典的現金流品質條件,對應本業賺現金、投資活動淨流入(例如處分資產)、公司同時在償還負債或減資,財務結構趨於保守健康。
  • 獲利門檻 roe > 5:ROE 高於 5%,排除低效率或虧損企業。
  • 股價門檻 close > 10:股價大於 10 元,濾掉低價股與殭屍股。
  • KY 股判斷 sc["name"].str.contains("KY"):用公司名稱判斷,因為所有 KY 股在台股資料中的名稱都固定帶有「KY」字樣。
  • 換股頻率 resample='M':每月換股,對應季報節奏並兼顧交易成本。
  • 套用到其他策略:KY 股過濾可以接在任何基本面策略後面,只要在最終的 position 上執行同樣的過濾即可。

什麼行情有效

排除 KY 股之後,持股的財報品質與會計透明度會顯著提升,長期能降低財報爆雷造成的極端回撤,在財報品質分散、現金流造假風險較高的階段過濾效果最明顯。這是一個「降低尾端風險、略微壓低平均報酬」的保守型設計。

下一步

↑↓ 選擇 Enter 開啟 Esc 關閉