finance-dashboard/lib/glossary.js

477 lines
22 KiB
JavaScript
Raw Normal View History

2026-06-03 16:42:07 +00:00
// 白話名詞解釋 — 供 ? 浮動卡片使用(國高中生也看得懂)
function _esc(s) {
return String(s == null ? '' : s)
.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
.replace(/"/g, '&quot;').replace(/'/g, '&#39;');
}
const TERM_TIPS = {
market_cap: {
label: '市值',
what: '把這家公司所有股票加起來,現在市場願意付多少錢。就像整間店「全部股份」的標價。',
how: '市值大通常代表公司規模大、影響力大,但不代表一定貴或一定好賺。',
},
ev: {
label: '企業價值 EV',
what: '如果要「整間買下來」,大概要花多少。算法是:市值 欠的債 手邊現金。',
how: '比只看市值更公平,因為有些公司欠很多債、有些現金很多,真正價值會不一樣。',
},
pe: {
label: '市盈率 P/E',
what: '你願意用「公司一年淨利」的幾倍價格來買。P/E20 代表:公司一年賺 1 元,你願意花 20 元買。',
how: '數字高=大家期待它未來賺更多;數字低=比較便宜或大家不看好。要搭配成長速度一起看。',
example: '一年淨利 5 元、股價 100 元 → P/E20 倍。',
},
shares: {
label: '流通股數',
what: '可以在市場上自由買賣的股票總張數(或總股數)。',
how: '股數越多,同樣的獲利要分給更多人,每股賺到的錢可能較少。',
},
dividend_yield: {
label: '股息殖利率',
what: '如果公司發現金股息,依現在股價算,一年能領回多少%。',
how: '像定存利率的概念,但股價會漲會跌,股息也可能增減,不是保證收入。',
example: '股價 100、一年股息 3 → 殖利率 3%。',
},
rev_growth: {
label: '營收成長',
what: '公司賣東西/提供服務的收入,跟去年同期比,增加了多少%。',
how: '成長快通常代表生意在擴張;但如果賺不到錢,營收高也不等於好投資。',
},
ma: {
label: '均線 MA',
what: '把最近 N 天的收盤價平均起來畫成一條線。MA20最近 20 天平均僡。',
how: '股價在均線上方,通常代表短中期偏強;在下方則偏弱。常用來看趨勢方向。',
},
rsi: {
label: 'RSI',
what: '最近漲跌力道強不強的指標0100 分。算的是「漲的日子 vs 跌的日子」誰比較猛。',
how: '超過 70 常說「偏熱」、低於 30 常說「偏冷」。只是參考,不是買賣鐵律。',
},
macd: {
label: 'MACD',
what: '用兩條不同速度的均線相減,看動能是在變強還是變弱。',
how: '柱狀圖由負轉正,常被解讀為動能轉多;由正轉負則偏空。適合搭配趨勢一起看。',
},
boll: {
label: '布林通道',
what: '在均線上下各畫一條「正常波動範圍」的界線,像橡皮筋包著股價。',
how: '貼近上緣可能偏貴、貼近下緣可能偏便宜,但強勢股可以一直沿上緣走。',
},
pos52: {
label: '52 週位置',
what: '現在股價落在過去一年最高價和最低價之間的哪個位置0最低、100最高。',
how: '接近 100 代表在一年高檔,追價要小心;接近 0 可能便宜,但要確認為什麼跌。',
},
volume_ratio: {
label: '成交量 / 均量',
what: '今天成交的股數,是平常平均的幾倍。',
how: '放量(比平常多很多)常代表大家特別關心,可能是好消息或壞消息在發酵。',
},
debt_assets: {
label: '負債 / 總資產',
what: '公司欠的錢,占全部家當的幾%。',
how: '比例越高,景氣不好或利率升時,還債壓力越大。',
},
debt_equity: {
label: '負債股本比',
what: '公司欠多少錢,跟股東投入的錢比,是幾倍。',
how: '大於 1 代表債比股東權益還多,槓桿較高,風險要留意。',
},
current_ratio: {
label: '流動比率',
what: '一年內能變現的資產,夠不夠還一年內要還的債。公式:流動資產 ÷ 流動負債。',
how: '大於 1 代表短期還債能力 OK太低可能有資金週轉問題。',
},
cash_debt: {
label: '現金 / 債務',
what: '手邊現金,跟總負債比,是幾倍。',
how: '大於 1 代表現金就夠還債,財務較有緩衝;太低則景氣差時較危險。',
},
volatility: {
label: '年化波動',
what: '股價每天上上下下的幅度,換算成「一年大概會晃多兇」。',
how: '數字越大,心臟要越大顆;部位要小一點或分批進出。',
},
max_drawdown: {
label: '最大回撤',
what: '從過去某個高點跌到最低點,最多跌了多少%。',
how: '幫你想像「最慘曾經虧多少」。回撤大代表坐雲霄飛車,要評估自己受不受得了。',
},
gross_margin: {
label: '毛利率',
what: '賣 100 元東西,扣掉直接成本後,還剩多少。越高代表產品越「有價錢」。',
how: '科技、品牌公司通常較高;原物料、零售可能較低。',
},
op_margin: {
label: '營業利潤率',
what: '本業賺錢效率:營業利益 ÷ 營收。扣掉管銷等日常開銷後,本業還剩多少%。',
how: '比毛利率更能反映公司「真正會做生意」的程度。',
},
net_margin: {
label: '淨利率',
what: '最後真正落袋的利潤,占營收幾%(扣完稅、利息等所有費用)。',
how: '這才是股東最終能分到的獲利比例。',
},
roa: {
label: 'ROA 資產報酬率',
what: '公司用全部資產(不管誰的錢),一年幫你賺了幾%的淨利。',
how: '看「整盤生意」用資產賺錢的效率,適合比較同產業公司。',
},
roe: {
label: 'ROE 股東權益報酬率',
what: '股東投入的錢,一年幫你賺了幾%的淨利。',
how: '長期 ROE 高且穩,常代表是好公司;但太高可能是借很多債撐出來的,要搭配負債一起看。',
},
fcf_margin: {
label: 'FCF Margin',
what: '自由現金流占營收的%。自由現金流=營運賺到的現金,扣掉維修、擴廠等必要支出後,真正自由運用的錢。',
how: '比「帳上淨利」更難造假,長期為正且成長,通常是健康訊號。',
},
target_price: {
label: '1 年目標價',
what: '券商分析師預測,這檔股票一年後「合理價位」大概在哪。',
how: '只是預測,常偏樂觀;當參考就好,不要當成一定會到的價格。',
},
dcf: {
label: 'DCF 公允價值',
what: '把公司未來可能賺到的現金,一筆一筆折現加總,估算「現在值多少錢」。',
how: '假設(成長率、折現率)一改,結果差很多;適合看區間,不適合當精準股價。',
},
margin_of_safety: {
label: '安全邊際',
what: '估算的合理價值,比現在股價高多少%。代表「便宜緩衝」有多大。',
how: '正值代表現價低於估算值;負值代表可能偏貴。留安全邊際是為了估錯還有退路。',
},
dcf_assumption: {
label: '估值假設',
what: 'DCF 裡你猜的:未來幾年成長多快、折現率(要求報酬)多少、長期成長率多少。',
how: '假設越樂觀,算出來的價值越高;看這行是在提醒「這只是模型,不是真理」。',
},
cagr: {
label: 'CAGR 年化報酬',
what: '如果每年穩穩複利,要多少%才會從起點賺到終點。把整段報酬平均成「每年幾%」。',
how: '回測策略時常用來比「這方法長期平均一年賺多少」。',
},
sma_strategy: {
label: '均線趨勢策略',
what: '短均線在上、長均線在下就持有;反過來就空手。用來跟著大趨勢走。',
how: '震盪盤容易來回被洗;趨勢明顯時較有用。',
},
dip_strategy: {
label: '回落買進',
what: '從近期高點跌達一定幅度(例如 15才買不追在高點。',
how: '可能買在半山腰;適合願意分批、有耐心等回檔的人。',
},
dca_strategy: {
label: '分批投入(定期定額)',
what: '不管高低,固定時間、固定金額買進,不猜最低點。',
how: '降低「一次買在最高點」的風險,但牛市可能平均成本偏高。',
},
fomc: {
label: 'FOMC',
what: '美國聯準會開會決定「要不要調利率、調多少」。全球資金成本都跟著動。',
how: '升息通常打壓估值高的成長股;降息則常有利風險資產。公布當天波動常很大。',
},
dot_plot: {
label: '點陣圖',
what: 'Fed 官員各自預測「未來利率會在哪」的圖,一個點代表一位官員的預期。',
how: '市場會看「中位數」和上次比有沒有變高,來猜還會不會升息。',
},
cpi: {
label: 'CPI 通膨',
what: '一籃子日常用品(食衣住行)跟去年比,平均貴了多少%。就是大家說的「通膨率」。',
how: 'CPI 比預期高 → 市場怕 Fed 繼續升息;比預期低 → 可能降息期待升溫。',
},
nfp: {
label: '非農就業',
what: '美國非農業新增多少工作、失業率多少。看勞動市場健不健康。',
how: '就業太強通膨高Fed 可能不敢降息;就業轉弱則可能刺激降息預期。',
},
pce: {
label: 'PCE',
what: 'Fed 最在意的通膨指標之一,看個人花了多少錢、物價漲多少。比 CPI 範圍更廣一點。',
how: 'Fed 的 2 通膨目標常看 PCE公布時市場反應可能很大。',
},
gdp: {
label: 'GDP',
what: '一個國家一段時間內,所有商品和服務的總價值。看經濟是在成長還是衰退。',
how: 'GDP 成長放緩或負成長,通常代表景氣轉弱,企業獲利可能受壓。',
},
earnings: {
label: '財報',
what: '上市公司每季公布的成績單:賺多少、花多少、展望如何。',
how: '數字或展望不如預期,股價常大跌;超預期則可能大漲。公布前後波動大。',
},
eps: {
label: 'EPS',
what: '每股賺多少錢。把公司淨利除以流通股數,看「每一股」分到多少利潤。',
how: '財報常比「EPS 有沒有 beat 預期」beat比分析師猜的還好。',
},
ppi: {
label: 'PPI',
what: '工廠、批發端賣出去的東西,價格跟去年比漲多少。可當 CPI 的領先指標。',
how: 'PPI 先漲,有時之後 CPI 也會跟著漲。',
},
jolts: {
label: 'JOLTS 職缺',
what: '美國有多少職缺、多少人自願離職。看勞動市場是緊還是鬆。',
how: '職缺多、離職率高,常代表工人議價力強,可能推升薪資和通膨。',
},
quadruple_witching: {
label: '四巫日',
what: '每年 3、6、9、12 月「第三個週五」,期指、指數選擇權、個股選擇權等多種衍生品同一天到期結算。',
how: '到期日前後常見換倉、成交量放大、股價晃動加劇;大型權值股有時波動更明顯。',
},
monthly_opex: {
label: '月選擇權結算',
what: '每個月第三個週五,大量股票與指數選擇權到期,投資人常在此前後調整部位。',
how: '非四巫日的月份仍有結算壓力,但通常比四巫日溫和一些。',
},
adp_employment: {
label: 'ADP 私部門就業',
what: '民間機構統計的「私企新增工作」人數,比官方非農早幾天公布。',
how: '常被當成非農就業的預演;方向一致時市場較安心,差很多則會重新定價。',
},
jobless_claims: {
label: '初領失業救濟金',
what: '每週有多少人第一次申請失業救濟。看裁員是否在升溫。',
how: '每週都有,突然大增代表勞動市場轉弱,可能推升降息預期。',
},
retail_sales: {
label: '零售銷售',
what: '美國商店、餐廳賣了多少東西,看老百姓有沒有在花钱。',
how: '數字強代表內需好;弱則擔心經濟放緩,也可能影響 Fed 政策預期。',
},
industrial_production: {
label: '工業生產',
what: '工廠、礦場、電力等產出量,反映實體經濟是否在擴張。',
how: '下滑常代表製造業轉弱,對原物料、工業股情緒偏空。',
},
michigan_sentiment: {
label: '密西根消費者信心',
what: '問一般家庭對景氣、通膨、購屋的看法,是「信心」指標。',
how: '信心下滑時,市場常擔心消費會縮,對零售、可選消費類股偏空。',
},
housing_data: {
label: '房市數據',
what: '新屋開工、營建許可、成屋銷售等,看住宅市場活不活躍。',
how: '房市對利率很敏感;數據轉弱常代表高利率正在壓抑需求。',
},
durable_goods: {
label: '耐久財訂單',
what: '能用好幾年的大件商品(機器、飛機、電腦等)訂單,看企業投資意願。',
how: '訂單增代表企業願意擴產;大減則暗示景氣與資本支出轉冷。',
},
consumer_credit: {
label: '消費信貸',
what: '信用卡、汽車貸款等借款餘額,看家庭是否靠借錢消費。',
how: '借貸快速增加有時代表需求強,但也可能暗示財務壓力上升。',
},
eci: {
label: '就業成本指數 ECI',
what: '企業付給員工的薪資與福利漲多少Fed 用它看「薪資通膨」。',
how: '薪資漲太快Fed 可能更不敢降息;降溫則有利降息預期。',
},
productivity: {
label: '生產力 / 單位成本',
what: '工人產出效率與每單位產出成本,看通膨是來自薪資還是效率。',
how: '生產力高、成本可控,對企業獲利與通膨都是好消息。',
},
philly_fed: {
label: '費城 Fed 製造業調查',
what: '美國東部製造業經理人的景氣問卷,類似 PMI 的先行指標。',
how: '高於 0 代表擴張、低於 0 代表收縮;公布時短線波動常見。',
},
services_pmi: {
label: '非製造業景氣調查',
what: '服務業(占美國 GDP 大部分)的景氣問卷,看活動是在擴張還是收縮。',
how: '服務業強,通常代表整體經濟仍有支撐;轉弱則偏空。',
},
trade_balance: {
label: '國際貿易',
what: '美國出口、進口與貿易逆差數字,看對外需求與美元流向。',
how: '逆差擴大不一定壞,但會影響 GDP 與匯率討論;公布時市場會快速反應。',
},
import_export_prices: {
label: '進出口物價',
what: '進口與出口商品的價格變化,可當通膨的領先或補充線索。',
how: '進口物價漲,有時預告國內通膨壓力將來會升高。',
},
real_earnings: {
label: '實質薪資',
what: '把通膨扣掉之後,工人薪水實際能買到多少東西。',
how: '實質薪資在漲,消費較有支撐;若通膨吃掉加薪,則消費可能轉弱。',
},
market_holiday: {
label: '美股休市',
what: '紐約證交所休市或提早收盤,當天(或前後)成交量通常較低。',
how: '休市日前後常見部位調整;重要數據若撞上休市,反應可能延後到 reopen。',
},
jackson_hole: {
label: 'Jackson Hole 央行年會',
what: '全球央行官員與經濟學者的大會Fed 主席常發表重要政策談話。',
how: '講話若偏鷹(抗通膨),股市常承壓;偏鴿(願降息)則風險資產較受益。',
},
ecb_rate: {
label: '歐洲央行利率決議',
what: '歐元區的「央行開會決定要不要調利率」,影響歐股、歐元、全球資金。',
how: '升息打壓估值、降息通常有利風險資產;記者會語氣也會被放大解讀。',
},
boj_rate: {
label: '日本央行利率決議',
what: '日本央行的貨幣政策決議,決定是否調整利率或購債。',
how: '日圓、日股、套息交易都會動;若傳出升息或收緊,全球市場常波動。',
},
boe_rate: {
label: '英央行 MPC 決議',
what: '英格蘭銀行貨幣政策委員會決定英國利率,影響英鎊與英股。',
how: '與 Fed、ECB 類似:偏鷹偏空風險資產,偏鴿則相反。',
},
section_market: {
label: '市場總覽',
what: '這一區看「這檔股票現在市場怎麼定價」:股價、大小、貴不貴、成長快不快。',
how: '先建立第一印象,再往下挖財報和技術面。',
},
section_technical: {
label: '技術面',
what: '用股價和成交量的圖表、指標,看短中期趨勢和熱度。',
how: '不能預測公司長期價值,但可幫你決定「現在進場會不會太追」。',
},
section_risk: {
label: '風險',
what: '公司財務健不健康、股價晃多兇。看「最壞情況可能多慘」。',
how: '風險高不代表不能買,但要控制部位、知道自己在賭什麼。',
},
section_return: {
label: '回報',
what: '不同時間長度,買這檔股票賺或虧了多少%。',
how: '看長期15 年)比只看最近一個月更能反映趨勢。',
},
section_efficiency: {
label: '效率',
what: '公司賺錢的「品質」:毛利高不高、用資產和股東的錢賺錢效率高不高。',
how: '好公司通常毛利率、ROE 長期都不錯,且自由現金流跟得上。',
},
section_forecast: {
label: '預測',
what: '分析師目標價、DCF 估算等「向前看」的數字,都是模型和猜測。',
how: '當參考區間,不要當成精準預言。',
},
section_robust: {
label: '穩健度',
what: '把前面各項整理成紅綠燈和簡短結論,方便快速掃描。',
how: '紅燈多就要更保守;綠燈多也要記得沒有百分之百。',
},
};
function termTipBtn(key, label) {
if (!TERM_TIPS[key]) return '';
const aria = label || TERM_TIPS[key].label || key;
return `<button type="button" class="info-btn" data-term-key="${_esc(key)}" aria-label="說明:${_esc(aria)}" tabindex="0">?</button>`;
}
function termTipHTML(t) {
let html = `<div class="tip-title">${_esc(t.label)}</div>`;
html += `<div class="tip-row"><span class="tip-k">白話說</span>${_esc(t.what)}</div>`;
if (t.how) html += `<div class="tip-row"><span class="tip-k">怎麼看</span>${_esc(t.how)}</div>`;
if (t.example) html += `<div class="tip-row"><span class="tip-k">舉例</span>${_esc(t.example)}</div>`;
return html;
}
function termTipContent(key) {
const t = TERM_TIPS[key];
return t ? termTipHTML(t) : '';
}
function showTermTip(btn) {
const el = document.getElementById('tooltip');
if (!el) return;
const html = termTipContent(btn.dataset.termKey);
if (!html) return;
el.innerHTML = html;
el.classList.add('show');
const r = btn.getBoundingClientRect();
const tw = el.offsetWidth, th = el.offsetHeight;
let left = r.left + r.width / 2 - tw / 2;
left = Math.max(10, Math.min(left, window.innerWidth - tw - 10));
let top = r.top - th - 10;
if (top < 10) top = r.bottom + 10;
el.style.left = left + 'px';
el.style.top = top + 'px';
}
function hideTermTip() {
const el = document.getElementById('tooltip');
if (el) el.classList.remove('show');
}
function bindTermTips(root) {
root = root || document;
root.querySelectorAll('.info-btn[data-term-key]').forEach(btn => {
if (btn.dataset.termBound) return;
btn.dataset.termBound = '1';
btn.addEventListener('mouseenter', () => showTermTip(btn));
btn.addEventListener('mouseleave', hideTermTip);
btn.addEventListener('focus', () => showTermTip(btn));
btn.addEventListener('blur', hideTermTip);
btn.addEventListener('click', e => {
e.preventDefault();
e.stopPropagation();
const el = document.getElementById('tooltip');
el && el.classList.contains('show') ? hideTermTip() : showTermTip(btn);
});
});
}
function glossInline(text) {
const terms = [
['FOMC', 'fomc'], ['點陣圖', 'dot_plot'], ['CPI', 'cpi'], ['非農', 'nfp'],
['PCE', 'pce'], ['GDP', 'gdp'], ['財報', 'earnings'], ['四巫', 'quadruple_witching'],
];
let out = _esc(text);
for (const [word, key] of terms) {
if (!TERM_TIPS[key]) continue;
const re = new RegExp(_esc(word).replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
out = out.replace(re, `${_esc(word)}${termTipBtn(key, word)}`);
}
return out;
}
function eventTipKey(title, note) {
const t = `${title || ''} ${note || ''}`;
if (/點陣|SEP|dot plot/i.test(t)) return 'dot_plot';
if (/ADP/i.test(t)) return 'adp_employment';
if (/初領失業|jobless claims/i.test(t)) return 'jobless_claims';
if (/密西根|surveys of consumers/i.test(t)) return 'michigan_sentiment';
if (/零售銷售|retail sales/i.test(t)) return 'retail_sales';
if (/工業生產|industrial production/i.test(t)) return 'industrial_production';
if (/新屋開工|成屋|營建許可|housing starts/i.test(t)) return 'housing_data';
if (/耐久財|manufacturer.*shipments/i.test(t)) return 'durable_goods';
if (/消費信貸|consumer credit/i.test(t)) return 'consumer_credit';
if (/就業成本|\beci\b/i.test(t)) return 'eci';
if (/生產力|productivity and costs/i.test(t)) return 'productivity';
if (/費城 Fed|製造業指數|manufacturing business outlook/i.test(t)) return 'philly_fed';
if (/非製造業|nonmanufacturing business outlook/i.test(t)) return 'services_pmi';
if (/國際貿易|international trade/i.test(t)) return 'trade_balance';
if (/進出口物價|import and export price/i.test(t)) return 'import_export_prices';
if (/實質薪資|real earnings/i.test(t)) return 'real_earnings';
if (/Jackson Hole/i.test(t)) return 'jackson_hole';
if (/歐洲央行|\bECB\b/i.test(t)) return 'ecb_rate';
if (/日本央行|\bBOJ\b/i.test(t)) return 'boj_rate';
if (/英央行|MPC/i.test(t)) return 'boe_rate';
if (/四巫|衍生品結算/i.test(t)) return 'quadruple_witching';
if (/月選擇權結算/i.test(t)) return 'monthly_opex';
if (/美股休市/i.test(t)) return 'market_holiday';
if (/FOMC|聯準會.*利率/i.test(t)) return 'fomc';
if (/CPI|消費者物價/i.test(t)) return 'cpi';
if (/非農|employment situation/i.test(t)) return 'nfp';
if (/PCE|個人收入/i.test(t)) return 'pce';
if (/GDP|國內生產/i.test(t)) return 'gdp';
if (/PPI|生產者物價/i.test(t)) return 'ppi';
if (/JOLTS|職缺/i.test(t)) return 'jolts';
if (/財報/i.test(t)) return 'earnings';
if (/EPS/i.test(t)) return 'eps';
return null;
}