跳轉到

小資族優等生策略

小資族也能用基本面指標篩選出優質股票。這個策略結合了市值、現金流、獲利能力、成長性和估值五個維度,從中小型股中挑選出體質良好的標的。

策略邏輯

選股條件共五項,全部同時滿足才會納入持股:

  1. 市值 < 100 億 -- 鎖定中小型股,這類標的較容易有超額報酬空間
  2. 自由現金流 > 0 -- 公司有實際產生現金的能力,而非帳面獲利
  3. 股東權益報酬率 > 0 -- 公司有正向獲利,ROE 為正
  4. 營業利益成長率 > 0 -- 本業獲利持續成長
  5. 市值營收比 < 5 -- 估值不過高,避免追高

自由現金流取近四季移動平均,以平滑季節性波動。市值營收比則以近四個月累積營收作為分母,搭配每日市值計算。

程式碼

from finlab import data
from finlab.backtest import sim

股本 = data.get('financial_statement:股本')
price = data.get('price:收盤價')
市值 = 股本 * price / 10 * 1000

df1 = data.get('financial_statement:投資活動之淨現金流入_流出')
df2 = data.get('financial_statement:營業活動之淨現金流入_流出')
自由現金流 = (df1 + df2).rolling(4).mean()

稅後淨利 = data.get('fundamental_features:經常稅後淨利')
權益總計 = data.get('financial_statement:股東權益總額')
股東權益報酬率 = 稅後淨利 / 權益總計

營業利益成長率 = data.get('fundamental_features:營業利益成長率')

當月營收 = data.get('monthly_revenue:當月營收') * 1000
當季營收 = 當月營收.rolling(4).sum()
市值營收比 = 市值 / 當季營收

condition1 = (市值 < 1e10)
condition2 = 自由現金流 > 0
condition3 = 股東權益報酬率 > 0
condition4 = 營業利益成長率 > 0
condition5 = 市值營收比 < 5

position = condition1 & condition2 & condition3 & condition4 & condition5
report = sim(position, resample='M', upload=False)
report.display()

策略特色

  • 每月換股(resample='M'),等權重持有所有符合條件的標的
  • 持股數量隨市場狀況動態變化,多頭市場時符合條件的標的較多
  • 適合小資族,因為鎖定市值較小的標的,所需資金門檻較低