longbridge-buffett-moat-stock-screener
Prompt-only Buffett-style screener. Given a market / sector / preference query (no specific ticker), applies Buffett's two-layer model — hard quantitative filter then qualitative moat scoring — and returns a ranked candidate list (3–5 cards) with moat-type tags, Buffett-attitude verdicts, and one-click jumps into longbridge-buffett-moat-analyzer for deep diagnostics. Every figure traces to a row in the mandatory Data Source Appendix at the end of the output.
Response language: detect the user's input language (Simplified Chinese / Traditional Chinese / English) and render the entire report — every card, label, narrative paragraph, education block, appendix row, and disclaimer — in that one language. Do not mix languages within a single output. The output template in
references/output.mdis shown in English for reference; translate it as a whole into the user's language using the label-translation lookup in that file. The error/source tables inside this SKILL.md remain 3-column because they document what the skill says under each language — that 3-column form is for the skill's reference docs, not for the user-facing report.
When to use
- "帮我找几只巴菲特会买的股票" / "幫我找幾隻巴菲特會買的股票" / "find a few stocks Buffett would buy"
- "消费股里巴菲特风格的有哪些" / "消費股裡巴菲特風格的有哪些" / "which consumer names are Buffett-style"
- "我想找一只 10 年都不用动的股票" / "我想找一隻 10 年都不用動的股票" / "I want a 10-year-hold stock"
- "有没有类似茅台这种定价权强的公司" / "有沒有類似茅台這種定價權強的公司" / "any companies like Moutai with strong pricing power"
- "新能源里有没有符合巴菲特标准的" / "新能源裡有沒有符合巴菲特標準的" / "any new-energy names that meet Buffett's criteria"
- "ROE 连续 10 年超过 20%、PE 低于 25 的 A 股" / "ROE 連續 10 年超過 20%、PE 低於 25 的 A 股" / "A-shares with 10y ROE > 20% and PE < 25"
- "美股里巴菲特真实持仓过的股票" / "美股裡巴菲特真實持倉過的股票" / "US stocks Buffett has actually held"
For single-stock deep diagnostic on a name the user already picked, use longbridge-buffett-moat-analyzer. For Graham-style cigar-butt / NCAV screening, use longbridge-graham-screener. For broader low-PE / low-PB / high-ROE value (not moat-centric) use longbridge-value-screen. For high-dividend screens use longbridge-dividend-screen.
Cognitive frame (do not skip)
Screening is the upstream entry to the Buffett workflow: this skill generates candidates from zero; the downstream longbridge-buffett-moat-analyzer verifies a single name in depth. Both share the same moat lens — only the interaction shape differs.
Two principles must surface alongside every leaderboard:
- Holding-period expectation — Buffett's reference is "ideally forever, at minimum 3 years." If the user's capital horizon is < 3 years, warn that this framework is the wrong lens regardless of how clean the screen looks.
- Quality first, price second — "A great business at a fair price is far better than a fair business at a great price." A passing row tells the user the business is Buffett-grade; whether this price is sane is a Dimension-4 (valuation) check that may downgrade the verdict to "watch and wait for a better price". Never collapse quality and price into one number.
Failure modes the screener must flag honestly:
- "Great business, wait for price" → quality passes but valuation 偏贵 / 高估 → 🟡 watchlist with target-price band, not a buy.
- "Cheap but no moat" → low PE/PB but moat narrow or absent → not a Buffett candidate; redirect to
longbridge-graham-screener/longbridge-graham-stock-analysis. - Sector-disqualified industries (e.g. airlines — Buffett publicly called the industry "value-destroying") → return an honest empty result with redirect to a closer-to-Buffett sector, not a forced top-N.
Workflow
- Clarify the query in at most one quick turn. Three input shapes are supported (see §3.2 of the design doc):
- Preference-based (most common): "find me consumer stocks worth long-term holding".
- Sector / theme-based: "Buffett-style names in new energy" / "Buffett's actual US holdings".
- Condition-based (advanced): "A-shares with 10y ROE > 20% and PE < 25". If the user just says "recommend stocks" with no constraint, ask 1–2 framing questions (preferred market: A / HK / US? prefer steady — consumer/healthcare/financials — or growth — tech/new-energy?) before screening.
- Resolve the universe:
- Sector / theme query → start from the index or sector universe via
longbridge constituent <INDEX>orlongbridge sector-screenercandidate list. - Preference / condition query without a stated market → default to the market the user most often references (A-share if Mandarin / Cantonese trader signal, US for English, HK if the user mentioned 港股). Echo the chosen universe back in the Market Summary.
- Cap batch size at 300 names per screen.
- Sector / theme query → start from the index or sector universe via
- Sector triage — before any filter:
- Excluded (no scoring, drop with a one-line explanation in the Market Summary): airlines (Buffett: "value-destroying"), pre-revenue / pure-loss biotech (no track record), ST / 退市风险 names, listed < 5 years, pure-shell / negative-equity. If the user explicitly asked for one of these (e.g. "Buffett-style airline"), return an honest empty result with a redirect to the most-similar non-excluded sector (e.g. "consumer staples with pricing power" or "regulated utilities with stable returns").
- Sector-adjusted hard filter: banks / insurance / brokerage — replace FCF / leverage rules with ROA / NIM / NPL / CAR (note the substitution per row).
- Listed 5–10 years: pro-rate the earnings-stability sub-score and flag "history-limited" in the row note.
- Fetch raw data via Longbridge CLI first (parallel, ≤20 symbols per wave). See §CLI. MCP fallback if
longbridgeis missing (see §MCP fallback). WebSearch only for items genuinely outside Longbridge: industry outlook / disruption signals, brand-strength surveys, Buffett's own 13F holdings disclosure, qualitative management track record. Every WebSearch hit gets a publisher + URL + access-date row in the appendix. - Layer 1 — Hard quantitative filter (binary pass/fail). Symbols failing ≥ 2 filters drop out by default. See §Filters for the table; full thresholds in
references/criteria.md. - Per-row reconciliation gate: if balance-sheet sum / current-assets sum / shares×price mismatches the reported total by >3%, drop the row from the leaderboard with a "数据异常" note in the data-anomaly footer. Do not silently smooth.
- Layer 2 — Qualitative moat scoring on every name that passed Layer 1 plus reconciliation. Five-dimension weighted composite (0–100):
- Moat type & width (35%) · Capital allocation (20%) · Earnings predictability (20%) · Valuation reasonableness (15%) · Long-term industry runway (10%).
Full rubric in
references/criteria.md. Each dimension also gets a 1–5 star rating shown on the candidate card.
- Moat type & width (35%) · Capital allocation (20%) · Earnings predictability (20%) · Valuation reasonableness (15%) · Long-term industry runway (10%).
Full rubric in
- Verdict matrix — combine Layer 2 quality stars (moat + financials) with valuation tier. See
references/criteria.md§Verdict matrix. Maps to one of three card verdicts:- 🟢 符合巴菲特选股标准 / Meets Buffett criteria — wide moat + clean financials + price 充足/一般.
- 🟡 部分符合,关注估值变化 / Partially meets criteria — wide moat + clean financials + price 偏贵.
- 🔴 当前不符合标准 / Does not meet criteria — wide moat but price 高估, OR moat narrow at any price (redirect to Graham).
- Holding-period mapping — derive expected min hold from moat width (★★★★★ → 5y+, ★★★★ → 3–5y, ★★★ → 1–3y, ★★ or below → not a Buffett candidate). See
references/criteria.md. - Rank and emit 3–5 candidate cards (not a giant leaderboard — the design doc's deliberate cap). Follow the candidate-card template in
references/output.md. - Mandatory closing blocks (every output, no exceptions):
- Selection rationale (2–3 sentences on why these names, current market caveat, deep-dive priority).
- Holding-period & user-education block