🏠 首頁 /
02-投資概念 /
巴菲特量化篩選清單
巴菲特量化篩選清單
10 條可程式化規則 + 4 條硬性 disqualifier。
對映到 stockTracker data/latest_prices.csv 欄位 + 補抓欄位。
機器可讀版本:/Users/apple/Projects/agentS/buffet_agent/agent/rules.json
評分制度
| 結果 |
總分 |
行動 |
| BUY |
≥ 80 |
進入估值階段,等安全邊際 |
| HOLD |
60–79 |
已持有可繼續,新進需等更佳價格 |
| WATCH |
40–59 |
加入觀察清單,等基本面好轉 |
| AVOID |
< 40 |
結構性問題,跳過 |
| OUT_OF_CIRCLE |
任意分數 |
觸發任一硬性 disqualifier,立即退出 |
滿分 110 分(100 基礎分 + 10 分 ground truth bonus)。
A. 10 條量化規則(核心評分表)
| # |
規則 |
欄位(CSV) |
條件 |
滿分 |
來源概念 |
| R1 |
ROE 持續高水準 |
roe |
≥ 0.15 |
15 |
經濟商譽 |
| R2 |
毛利率高(定價權) |
gross_margin |
≥ 0.30 |
10 |
特許經營權 |
| R3 |
淨利率達標 |
net_margin |
≥ 0.10 |
10 |
護城河 |
| R4 |
EPS 5 年成長率 |
earn_growth |
≥ 0.10 |
10 |
複利 |
| R5 |
槓桿低 |
debt_equity ⚠️補 |
< 0.5 |
15 |
槓桿與借貸 |
| R6 |
自由現金流邊際 |
fcf_margin ⚠️補 |
≥ 0.15 |
10 |
股東收益 |
| R7 |
回購紀律(有回購) |
buyback_yield ⚠️補 |
> 0 |
5 |
股票回購 |
| R8 |
估值合理 |
fwd_pe, peg |
PE < 25 OR PEG < 1.5 |
10 |
安全邊際 |
| R9 |
不在 52 週高點 |
w52_pos |
< 0.80 |
5 |
市場先生 |
| R10 |
Berkshire 持有(ground truth) |
13F |
berkshire 在 13F |
10 |
(驗證) |
⚠️補 = stockTracker 目前未抓,需 Phase 3 補進 tracker.py,細節。
B. 4 條硬性 disqualifier(觸發即 OUT_OF_CIRCLE)
| # |
規則 |
條件 |
來源概念 |
| D1 |
槓桿過高 |
debt_equity > 2.0 |
槓桿與借貸 |
| D2 |
衍生品大量曝險 |
derivative_notional / total_capital > 0.5 |
衍生性金融商品 |
| D3 |
行業在能力圈外(黑名單) |
sector ∈ |
能力圈 |
| D4 |
連續 3 年 EPS 為負 |
trailing 3y EPS < 0 |
雪茄煙蒂投資 反向 |
C. 5 條軟性加分(bonus)
| # |
規則 |
條件 |
加分 |
來源 |
| B1 |
Berkshire 重倉(>1% 組合) |
13F berkshire |
+5 |
ground truth |
| B2 |
ROIC > 20% 連續 5 年 |
roic_5y_avg ⚠️補 |
+5 |
經濟商譽 |
| B3 |
CEO 持股 / 淨值 > 5% |
insider_ownership ⚠️補 |
+3 |
經理人選擇 |
| B4 |
其他價值名家持股 (Munger trust / Li Lu / Bill Ackman) |
13F |
+2 |
ground truth |
| B5 |
連續 10 年股利成長 |
dividend_growth_10y ⚠️補 |
+3 |
複利 |
D. 評分流程(伪代碼)
def score(ticker: str) -> dict:
data = load_ticker(ticker) # stockTracker CSV + 補抓欄位
# Step 1: 硬性篩除
if data.debt_equity > 2.0: return OUT_OF_CIRCLE("D1: 槓桿過高")
if data.derivative_ratio > 0.5: return OUT_OF_CIRCLE("D2: 衍生品過大")
if data.sector in BLACKLIST: return OUT_OF_CIRCLE("D3: 能力圈外")
if data.eps_3y_negative: return OUT_OF_CIRCLE("D4: 連續虧損")
# Step 2: 跑 10 條核心規則
base = sum(rule.points for rule in RULES if rule.passes(data)) # 0-100
# Step 3: 加分項
bonus = sum(b.points for b in BONUSES if b.passes(data)) # 0-18
total = min(base + bonus, 110)
# Step 4: 結論
if total >= 80: bias = "BUY"
elif total >= 60: bias = "HOLD"
elif total >= 40: bias = "WATCH"
else: bias = "AVOID"
return {"total": total, "bias": bias, "breakdown": ...}
E. 預期回測結果(ground truth 驗證)
應該 BUY 或 HOLD(已知重倉股)
| Ticker |
預期分數 |
預期 bias |
引用 |
| AAPL |
~85 |
BUY |
蘋果 |
| KO |
~78 |
HOLD |
可口可樂 |
| AXP |
~72 |
HOLD |
美國運通 |
| MCO |
~88 |
BUY |
穆迪 |
| BAC |
~70 |
HOLD |
(Buffett 持有) |
應該 AVOID 或 OUT_OF_CIRCLE
| Ticker |
預期分數 |
預期 bias |
為什麼 |
| TSLA |
OUT_OF_CIRCLE |
— |
D3 能力圈外(Buffett 從未投資) |
| COIN |
OUT_OF_CIRCLE |
— |
D3 能力圈外(加密交易所) |
| GME |
< 30 |
AVOID |
R1/R3/R4 全敗(無 ROE、無利潤) |
| AMC |
OUT_OF_CIRCLE |
— |
D1 槓桿過高 + D4 連虧 |
| IBM |
~45 |
WATCH |
Buffett 已認錯出清;現在指標有起色但護城河疑慮 |
F. 缺值與例外處理
| 情況 |
策略 |
| 規則欄位缺值 |
該規則 graceful skip(不扣分但 confidence -10%) |
| 規則需歷史資料(如 ROE 持續 5 年) |
Phase 2 用最新單年 + 文字 caveat;Phase 3 補完整歷史 |
| 公司剛 IPO < 3 年 |
跳過 R4(成長率)+ B5(股利連續),加註「資料不足」 |
| 金融業(保險、銀行) |
R5(D/E)放寬至 < 5;R2(毛利)改用 net interest margin |
| 不是美股 ADR |
R10(Berkshire 13F)跳過 |
G. 規則調整原則
何時更新規則:
- 巴菲特公開新立場(年度股東信、大會 Q&A)
- 知識庫新增重要概念節點
- 回測發現系統性偏差(例:科技股全部低估)
每次調整需:
1. 在 巴菲特交易邏輯總綱 補新立場引用
2. 修改 rules.json
3. 跑 ground truth 回測(5+5 樣本)
4. 寫進 CHANGELOG
相關筆記
- 巴菲特交易邏輯總綱 — 整體框架
- 巴菲特定性檢查清單 — 規則之外的人工判斷
- ../_specs/Phase2_Agent實作 — 把規則變成 Python module
- ../research/Buffett 量化指標映射 — 概念 → 欄位對映原始研究