策略範例
小資族優等生
本頁內容4
小資族也能用基本面指標篩選出優質股票。這個策略結合市值、現金流、獲利能力、成長性和估值五個維度,從中小型股中挑出體質良好的公司。因為鎖定市值較小的股票,所需資金門檻較低,適合小資族。
策略邏輯
五個條件全部同時滿足才會納入持股:
- 市值 < 100 億:鎖定中小型股,這類股票較容易有超額報酬空間。
- 自由現金流 > 0:公司有實際產生現金的能力,而非帳面獲利。自由現金流是投資活動與營業活動淨現金流的和,取近四季移動平均,以平滑季節性波動。
- 股東權益報酬率 > 0:公司有正向獲利,ROE 為正。
- 營業利益成長率 > 0:本業獲利持續成長。
- 市值營收比 < 5:估值不過高,避免追高。以近四個月累積營收作為分母,搭配每日市值計算。
每月換股,等權重持有所有符合條件的股票。持股數量隨市場狀況變化,多頭市場時符合條件的股票較多。
完整程式碼
strategy.py
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()report.display() 會畫出完整的回測報告。
怎麼調整
- 市值上限
市值 < 1e10:1e10就是 100 億。改這個數字,就改變「中小型股」的範圍。 - 平滑的期數
rolling(4):自由現金流取近 4 季平均;程式裡的當季營收是近 4 個月營收的加總。 - 估值門檻
市值營收比 < 5:數字越小,挑的股票估值越低。 - 換股頻率
resample='M':每月換股。
下一步
這一頁有幫到你嗎?