finance-dashboard/lib/investmap.js

91 lines
5.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ═══════════════════════════════════════════════════════════
// investmap.js — 互動式「投資地圖」六層漏斗設定
// 內容整理自 emmy/emmy/學習分類/投資底層邏輯.md 的六層漏斗與提問清單。
// 每一層是一道篩子,任一「閘門題(gate)」答否 → 該層出局、後面先停。
// 問題上的 principles 為原則編號server 端會補上標題與 note id 供前端連結。
// ═══════════════════════════════════════════════════════════
export const CORE_QUESTION =
'市場現在相信什麼(已 price 進去的共識)?我相信而市場還沒相信的點是什麼?看錯了我會不會死?答不出「市場還沒信的點」就只是追價。';
const LAYERS = [
{
key: 'macro', title: '總經水位', ask: '現在是滿倉、半倉還是減倉的環境?覆巢之下無完卵。',
pillar: '柱二:這波是結構性還非結構性?',
out: '總經明確轉空 → 降到低水位,後面幾層先不看。',
questions: [
{ q: '利率處於升息結束的高原期或初升段,而非「降息=衰退確認」的環境?', gate: true, principles: [2, 55] },
{ q: '即時數據Truflation、訂單、貨運與官方數據一致、沒有惡化', principles: [24] },
{ q: '目前的下跌是「非結構性」恐慌(可加碼),而非結構性崩壞?', gate: true, principles: [101, 50] },
],
},
{
key: 'industry', title: '產業結構', ask: '這產業未來 3-5 年是結構性成長、循環、還是結構性衰退?',
pillar: '柱二:供給端還是需求端決定價格?',
out: '結構性衰退產業 → 再便宜也避開。',
questions: [
{ q: '這是長期不可逆的結構性成長/長多趨勢?', gate: true, principles: [13] },
{ q: '價格由「供給瓶頸」撐住,而非「需求結構性消失」?', gate: true, principles: [4, 6] },
{ q: '近期營收回升來自終端需求,而非只是補庫存?', principles: [14] },
],
},
{
key: 'moat', title: '商業模式(真假護城河)', ask: '這家公司「贏」的理由能撐多久?',
pillar: '柱二:護城河可不可複製。',
out: '護城河靠剝削/補貼撐 → 不碰。',
questions: [
{ q: '是生態/技術/資本型護城河,而非掠奪補貼型?', gate: true, principles: [12, 16] },
{ q: '若有毀滅性價格戰,它是資本最深的贏家?', principles: [15] },
{ q: '能把技術真正變現(賣得出去),而非只有技術?', principles: [66] },
],
},
{
key: 'management', title: '管理層(人對不對)', ask: '買股票就是買管理層;前三層決定局好不好打,這層決定派誰上場。',
pillar: '避開結果論:看當下決策品質 + 兌現紀錄。',
out: '判斷力差或常財測跳票 → 給折價甚至避開。',
questions: [
{ q: '重大決策用「當下資訊」看邏輯站得住(非事後諸葛)?', gate: true, principles: [96, 83] },
{ q: '過去財測穩健、說到做到(信任溢價而非折價)?', principles: [17, 103] },
{ q: '研發/資本投入誠實反映他真正相信的方向?', principles: [46] },
{ q: 'CEO 公開行為與認股條款透露對自己有信心?', principles: [93, 71] },
],
},
{
key: 'valuation', title: '估值 / 財報(價格對不對)', ask: '好公司 ≠ 好價格。現在買,賠率划算嗎?(可搭配「財報健檢」)',
pillar: '柱三前哨:別在脆弱估值上重壓。',
out: '好公司但價格爛 → 等更好的賠率。',
questions: [
{ q: '財測(未來)向上,而不是只看過去財報?', gate: true, principles: [17] },
{ q: '本益比沒有高到「一次不如預期就重摔」?', principles: [79] },
{ q: '同產業裡沒有更便宜的選擇正在吸走資金?', principles: [102] },
{ q: '毛利率/營收獲利型態揭露規模化或營運槓桿?', principles: [47, 91] },
],
},
{
key: 'discipline', title: '交易紀律(怎麼進出)', ask: '怎麼進、怎麼加、看錯怎麼退、永遠留多少現金?=柱三落地。',
pillar: '柱三:看錯時還活著,等對的幾次兌現。',
out: '沒有事前規則 → 別憑情緒進場。',
questions: [
{ q: '總經、產業、公司三面向都支持才動手?', gate: true, principles: [54] },
{ q: '減倉/停損規則「事前」就設好、能機械執行?', principles: [59] },
{ q: '有留底倉、分散到不被單一判斷錯誤打死?', principles: [97, 89] },
{ q: '計畫好「多頭讓利潤奔跑、空頭虧一半就斷」?', principles: [63] },
],
},
];
// 由 server 呼叫:用知識庫把 principles(編號) 補成 {num,title,id}
export function getInvestMap(principlesByNum) {
const enrichOne = (n) => {
const p = principlesByNum[n];
return p ? { num: n, title: p.title, id: p.id } : { num: n, title: `原則 ${n}`, id: null };
};
return {
coreQuestion: CORE_QUESTION,
layers: LAYERS.map(L => ({
key: L.key, title: L.title, ask: L.ask, pillar: L.pillar, out: L.out,
questions: L.questions.map(q => ({ q: q.q, gate: !!q.gate, principles: (q.principles || []).map(enrichOne) })),
})),
};
}