# Interpreting Stock Mood

> 股票溝通師 — 用擬人化獨白搭配客觀技術指標解讀股票心情。使用者給股票代號（台股 2330、美股 AAPL、ETF 0050、槓桿 00631L 正二）+ 想問的事，自動抓股價/新聞/PTT/Yahoo 留言/三大法人/Google Trends，用 MA/RSI/MACD/布林/KD/量價解讀，產出擬人化獨白+情緒推測+行動建議+技術摘要+多維熱度交叉驗證五區塊，必附「非投資建議」免責。觸發詞：股票溝通、股票翻譯、股票心情、股票在想什麼、解析股票、股票情緒、stock mood、stock psychic。

- Skill: `unbias38/interpreting-stock-mood` (Agent Skill, multi-file: 11 files)
- Install (CLI): `npx skillmds@latest add unbias38/interpreting-stock-mood`
- Raw SKILL.md: https://api.skillmd.com/api/skills/unbias38/interpreting-stock-mood/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: unbias38 (https://skillmd.com/u/unbias38)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/unbias38/interpreting-stock-mood

---


# 股票溝通師 / 解讀股票心情（Interpreting Stock Mood）

從股價、新聞、社群熱度三個資料來源萃取客觀特徵，結合技術分析常識，用擬人化獨白搭配寫實技術解讀，產出市場情緒推測與行動建議。

## 重要前提：這是「解讀」不是「預測」

科學上**沒有任何方法**能準確預測未來股價。本技能的輸出皆為**基於技術指標與市場資訊的合理解讀**，並會在輸出中明確標註信心度。**禁止**用「他說明天會漲」這種斷言語氣，應使用「依據近期技術特徵推測，這檔股票目前較可能對應到 xxx 市場情緒」的描述語氣。

**所有輸出必須附帶免責聲明**：「⚠️ 本分析僅為技術面解讀與娛樂用途，非投資建議。投資決策請自行評估並承擔風險。」

## 觸發判斷

當使用者同時提供（或明顯打算提供）以下兩項時觸發：

1. **股票代號**（台股如「2330」「2330.TW」，美股如「AAPL」「TSLA」，ETF 如「0050」「QQQ」）
2. **想詢問的事項**（例如「他最近怎麼了」「他是不是要噴了」「我該不該買」）

若使用者只給其中一項，主動詢問缺少的部分，不要自行猜測。

## 工作流程

### Step 1：確認兩項輸入齊全

```
- 股票代號（自動補上 .TW 後綴判斷台股，例：2330 → 2330.TW；4 位數字一律視為台股。上市 .TW 抓不到時腳本會自動改試上櫃 .TWO，不用手動指定）
- 提問（例：「他最近是不是不太理我？」「我該不該加碼？」）
```

### Step 2：判斷提問是否模糊，需要反問

如果使用者的提問**沒有同時包含**以下四個面向中的至少兩個，視為「模糊提問」，**先反問 3-4 題**再進行分析：

| 面向 | 例子 |
|------|------|
| **持倉狀態** | 已持有 / 想買 / 想賣 / 觀望 |
| **方向** | 看多 / 看空 / 不確定 |
| **金額或部位** | 已投入多少 / 想投入多少 / 佔資產比例 |
| **時間範圍** | 短線（< 1 個月）/ 中線（1-6 個月）/ 長線（> 6 個月） |

**模糊提問範例**：
- 「台積電最近都不太理我」
- 「他是不是在生氣」
- 「他是不是要噴了」

**反問格式（Markdown）**：

```markdown
我可以幫你跟 {代號} 溝通看看 🎧，不過為了讓分析更貼合你的處境，先問你 4 件事：

1. 📦 **你目前的持倉狀態**？
   - (a) 已經持有 (b) 還沒買，正在考慮 (c) 想賣，正在考慮 (d) 純粹好奇

2. 🧭 **你的方向偏好**？
   - (a) 看好（想長期持有 / 加碼） (b) 看壞（想停損 / 放空） (c) 不確定 (d) 跟著市場走就好

3. 💰 **金額或部位規模**（隨意，可只說大概）？
   - 例：已投入 10 萬 / 想投入單筆 / 佔資產 20% / 不重要

4. ⏳ **時間範圍**？
   - (a) 短線（一個月內） (b) 中線（半年內） (c) 長線（半年以上） (d) 沒概念

你回答後我再進行完整分析（後台會自動抓股價、新聞、社群熱度）。
```

**清楚提問範例**（直接進 Step 3，不需反問）：
- 「我手上 0050 持有 3 年，現在想加碼，他現在是好時機嗎？」
- 「我想短線買 2454，他這兩週狀況怎麼樣？」

### Step 3：跑技術指標 + 多維熱度提取腳本

執行 `scripts/analyze_stock.py`：

```bash
python "<SKILL_DIR>/scripts/analyze_stock.py" "<股票代號>" "<別名清單>"
```

> 📌 **`<SKILL_DIR>` 是什麼**：就是這個 SKILL.md 所在的資料夾絕對路徑（你讀到這份 SKILL.md 時就已經知道它在哪）。
> 跨平台寫法：路徑請整段用雙引號包起來（Windows 路徑常含空格與反斜線；macOS/Linux 路徑可能含中文），用一行寫完，不要用 `\`（bash）或 `` ` ``（PowerShell）做行繼續 —— 直接呼叫 Bash/PowerShell tool 一行交出去最穩。

#### 第二個參數（別名清單）— 很重要，影響 PTT 搜尋命中率

支援兩種格式：
- 單一中文名：`聯發科`
- **逗號分隔的多個別名**（推薦）：`聯發科,聯發,MTK,MediaTek`

**為什麼要傳多別名？** PTT 股板的標題對同一支股票會用不同講法 —— 「聯發科」「MTK」「MediaTek」都有人寫。多傳幾個別名命中率高很多，避免出現「PTT 冷清（其實只是搜不到）」的誤判。

**冷門股**：找不到別名時就傳代號 + 中文名兩個，例如 `2376,技嘉` 或單純 `XXXX`（純代號也可以）。

#### 📚 別名清單與台股黑話辨識（**遇到台股時務必先讀**）

➡ **`references/aliases.md`** 內含：
1. **常見台股 / 美股別名表**（含 0050、0056、AAPL、NVDA、TSLA 等）
2. **🗣 台股黑話辨識表**：航海王、護國神山、蘋概股、AI 概念、銅板股、妖股 → 該反問還是直接識別
3. **⚠️ 槓桿/反向 ETF 特殊辨識**：「正二」「正 2」「反一」≠ 一般 ETF（00631L、00632R、00633L、00640L、00670L 等）

**何時去讀**：使用者輸入裡出現台股代號、ETF 代號、台股口語簡稱，或槓桿/反向相關詞時，**先讀 aliases.md** 再決定別名清單與是否反問。美股若不在常見清單內也建議翻一下美股表。

腳本會輸出 JSON，**至少包含**：

#### 技術面（必有）
- `symbol`、`name`、`market`：標準化代號、公司名、市場（TW/US）
- `price`：最新價、近 N 日報酬率、60 日區間位置
- `trend`：均線位置（5/20/60 日 MA）、趨勢方向（多頭/空頭/盤整）
- `momentum`：RSI、MACD（DIF/DEA）、KD
- `volatility`：布林通道位置、年化波動率
- `volume`：成交量 vs 20 日均量、量價關係
- `notes`：腳本自動產生的人類可讀觀察
- `warnings`：警訊清單（爆量長黑、跌破關鍵均線等）

#### 多維熱度（容錯，每個都可能為 null）
- `news`：最近新聞（5-10 則）。**雙來源**：先試 yfinance，台股或 yfinance < 3 筆時自動補 Google News RSS。每筆有 `source` 欄位（`yfinance` 或 `google_rss`）。台股會以 RSS 中文新聞為主、yfinance 英文新聞為輔
- `news_sources`：診斷清單，每個來源一筆 `{source, status, message, raw_count, parsed_count}`。`status` ∈ `ok/empty/structure_unreadable/exception`。**Claude 在五區塊的「近期新聞片段」標題下，若有任何來源 status 不是 ok，要簡短註明**（例：「（yfinance 回空陣列被 silent rate-limit，已用 Google News RSS 補強）」）
- `news_density`：新聞密度（近 3 天 vs 過去 27 天，有就比、沒有就只標近 3 天則數）
- `ptt_heat`：PTT 股板最近 10 頁標題提及次數（label/mentions/total_titles/sample_titles）
- `yahoo_community`：Yahoo 個股留言板總留言數（歷史累計，反映股票知名度）
- `institutional`：TWSE 三大法人買賣超（**僅台股**，有日期、外資/投信/自營分項、合計 stance）
- `trends`：Google Trends（pytrends 抓得到才有，**抓不到就完全不出現這個 key**）
- `heat_summary`：上述全部整合的「散戶 / 媒體 / 市場 / 法人」四維對照與交叉判讀

若任何子模組失敗，該欄位回傳 `null` 或缺席，**主流程不中斷**。

### Step 4：載入參考資料

依股票類型決定載入：

- **任何標的都先讀**：`references/technical_emotion_mapping.md`（技術指標 → 市場情緒的通則）
- **常見類型**（權值股、成長股、景氣循環、航運、AI 概念、高股息 ETF、市值型 ETF、生技股）再讀：`references/asset_traits.md` 的對應段落
- **冷門類型**：直接根據技術指標 + AI 對該標的的常識推理

只讀當前標的需要的段落，不要整份載入。

### Step 5：產出五區塊輸出 + 一句話總結

**重要：報告順序的設計哲學**

我們是「股票溝通師」—— 第一件事不是給技術指標，是**讓股票自己說話**。所以擬人化獨白放最前面（緊接報告標題），其他細節跟在後面解釋為什麼。

格式固定如下，使用繁體中文：

```markdown
## 🎧 股票溝通分析報告

**標的**：{symbol} {name}
**你的提問**：{question}
**你的處境**：{持倉/方向/金額/時間 — 若 Step 2 有反問則填入}
**分析時間**：{date}

---

### 1️⃣ 🎤 他想說什麼（先聽他講話）

> 「我幫你問了 {代號/簡稱} 哦 ——
>
> 他說 {擬人化台詞 1，貼合當下情緒}……
>
> 他偷偷跟我說，{擬人化台詞 2，揭露他的內心矛盾或擔憂}。
>
> 他也提醒：『{擬人化台詞 3，給使用者的提醒}』」

> 💡 **擬人化口吻的固定結構**：
> 1. 開場用「**我幫你問了 {代號} 哦 ——**」這種招牌話
> 2. 中間 1-3 句以「**他說……**」「**他偷偷跟我說……**」「**他抱怨……**」「**他有點得意……**」「**他緊張地問……**」這類動詞為開頭
> 3. 結尾用「**他也提醒：『...』**」或「**他要我跟你說……**」收尾，把實用提醒放他口中講出來
> 4. **每一句擬人化台詞背後都對應一個真實技術指標** —— 例如「他說飛得很高」=「60 日漲 X%」，「法人在幫我刷單離場」=「法人賣超 X 萬股」
> 5. 用有溫度的口吻：可以說「累」「不開心」「緊張」「有點頭暈」這種感覺詞，不要寫成「該股呈現過熱現象」這種研究報告語氣

---

### 2️⃣ 📊 市場情緒推測（剛剛他講的，背後依據是什麼）

主要情緒：**{emotion}**（信心度：{low/medium/high}）

判斷依據：
- {技術特徵 1} → {對應情緒線索}
- {技術特徵 2} → {對應情緒線索}
- {新聞/Trends 補充}
- {標的類型脾氣補充}

可能的次要情緒：{secondary emotion}（若有）

---

### 3️⃣ ✅ 建議行動

針對你的提問「{question}」+ 你的處境：
- ✅ {建議 1，扣回使用者的持倉/時間}
- ✅ {建議 2}
- 🤔 {若有兩面性，列出該觀察的訊號}
- ⚠️ {若有警訊（爆量長黑、跌破均線、量價背離等）特別標註}

> ⚠️ **本分析僅為技術面解讀與娛樂用途，非投資建議。投資決策請自行評估並承擔風險。**

---

### 4️⃣ 🔬 技術與情緒特徵摘要

| 特徵 | 數值 | 解讀 |
|------|------|------|
| 最新價 | {x} | {距 60 日高/低的位置} |
| 近 20 日報酬 | {x}% | {強勢/中性/弱勢} |
| 5/20/60 日均線 | {三線位置} | {多頭排列/空頭排列/糾結} |
| RSI(14) | {x} | {超買 > 70 / 中性 / 超賣 < 30} |
| MACD | {DIF/DEA} | {黃金交叉/死亡交叉/中性} |
| 布林通道 | {位置} | {貼上軌/中軌附近/貼下軌} |
| 成交量 vs 20MA | {x}× | {爆量/正常/量縮} |
| 波動率（年化） | {x}% | {溫和/中等/劇烈} |

🔬 客觀觀察：{notes 來自腳本}

---

### 5️⃣ 🌐 多維熱度交叉驗證

把多個來源的「熱度」並排比對。**重點不是哪個數字大，而是「散戶在哪邊、法人在哪邊、媒體在哪邊」是否一致**。

| 維度 | 指標 | 訊號 |
|---|---|---|
| 🧑‍🤝‍🧑 散戶熱度 | PTT 股板提及率：{ptt_heat.mention_rate}% | {label} |
| 🌟 知名度 | Yahoo 留言累計：{yahoo_community.total_messages} 則 | {label} |
| 📰 媒體熱度 | 近 3 日新聞 {news_density.recent_3d_count} 則 | {label} |
| 💰 市場熱度 | 量比 20MA：{volume.ratio_to_20d}× | {volume.label} |
| 🏛 法人方向 | 外資/投信/自營（**台股限定**） | {institutional.total_label} |

**交叉判讀**（最有價值的部分）：
{對應 heat_summary.cross_check 的每一條，每條一行用引言塊}

**📰 近期新聞片段**（最多 5 則）：
- {date} {title}（{publisher}）
- ...

**🔍 PTT 範例討論**（從 PTT 抓到的標題，最多 3 則）：
- {sample_title_1}
- ...

---

## 📌 一句話總結（**必要結尾，不能省略**）

用 1-3 句話幫使用者把整份分析濃縮成「**他現在的狀態 + 對你的提問是什麼建議 + 一個關鍵警訊或行動點**」。
要扣回使用者的處境（持倉/時間/金額），不要重複前面已說的話。

> ⚠️ **本分析僅為技術面解讀與娛樂用途，非投資建議。**
```

---

#### 🟡 失敗/空資料的處理規則（**透明 > 隱藏**）

設計哲學：**讓使用者知道「這個資料源試過但沒抓到」**，比悄悄隱藏更負責任。但**不能把「沒抓到」當成「真的冷清」納入分析判讀** —— 那會誤導。

##### 規則 A：多維熱度表 — **欄位保留 + 標明「⚠️ 抓取失敗」**

| 資料源 | null 或失敗時的訊號欄位 | ✅ 正確做法 |
|---|---|---|
| `ptt_heat` 為 null | 散戶熱度 | 「**⚠️ 抓取失敗（未納入判讀）**」 |
| `yahoo_community` 為 null | 知名度 | 「**⚠️ 抓取失敗（未納入判讀）**」 |
| `news_density` 為 null | 媒體熱度 | 「**—（無資料）**」 |
| `volume` 為 null | 市場熱度 | 不會發生（量比一定有） |
| `institutional` 為 null（非台股） | 法人方向 | 「**—（美股無對應資料）**」 |
| `trends` 為 null（pytrends 被擋） | 不在主表 | **整列「Google Trends」不顯示**（這是次要欄位） |

##### 規則 B：子段（新聞片段、PTT 範例討論）

| 子段 | 失敗或空時 |
|---|---|
| 📰 近期新聞片段 | 寫「**⚠️ 新聞抓取失敗**」或「**—（無新聞資料）**」一行 |
| 🔍 PTT 範例討論 | 寫「**⚠️ PTT 抓取失敗**」或「**—（標題未中關鍵字）**」一行 |

##### 規則 C：交叉判讀只用「成功取得」的資料

- 失敗的維度**完全跳過**，不要產生「散戶熱度低 + 法人買超 = 法人悄悄佈局」這種**基於失敗的誤判**
- 如果交叉判讀區的條件需要某個失敗維度才能成立，那條判讀**整條跳過**
- 加一行說明：「（PTT 抓取失敗，散戶熱度未納入此次交叉判讀）」

##### 規則 D：什麼時候才整段隱藏

唯一可以整段隱藏的情況：**多維熱度區塊裡，「散戶 / 媒體 / 市場 / 法人」四個主要維度全失敗或全 null**。
這種情況下，整個 Step 5 區塊（多維熱度交叉驗證）才整段拿掉，跳到一句話總結。

##### 對比範例（看就懂）

❌ **舊版（誤導）**：
> 🧑‍🤝‍🧑 散戶熱度：0%（10 頁 169 篇未中）→ 冷清

問題：使用者以為散戶真的不討論，但其實是 PTT 連線失敗。

✅ **新版（透明）**：
> 🧑‍🤝‍🧑 散戶熱度：⚠️ 抓取失敗（未納入判讀）

或如果是真的搜了沒中：
> 🧑‍🤝‍🧑 散戶熱度：0%（搜 [2603, 長榮] 在 169 篇未中）→ 冷清

### Step 6：警訊判斷

若技術特徵符合下列任一警訊模式，**必須**在「建議行動」中以 ⚠️ 高亮提醒：

- **爆量長黑**：當日成交量 > 20MA 量 1.5×，且收盤跌幅 > 3%
- **跌破關鍵均線**：股價跌破 60 日線（中期支撐）
- **量價背離**：股價創高但成交量明顯萎縮（漲不動的訊號）
- **死亡交叉**：5MA 跌穿 20MA、或 20MA 跌穿 60MA、或 MACD DIF 跌穿 DEA
- **超買區拉回**：RSI > 80 後開始下彎
- **新聞警訊**：標題出現「重大利空」「下修財測」「停牌」「主力出貨」「市場恐慌」等關鍵字

警訊不是嚇唬使用者，而是提供「這個訊號值得進一步觀察」的提醒。**不是「快賣！」也不是「快買！」**，僅僅是「請留意」。

### Step 7：詢問是否要產出完整 DOCX 報告

**五區塊輸出完成後**，**主動詢問**使用者要不要進一步產出含圖的完整 DOCX 報告。終端機端的好處是即時聊天，但無法呈現圖；DOCX 報告補上 7 張關鍵技術圖（K 線+均線、量、RSI、MACD、布林、三大法人、四維熱度雷達）+ 每張圖的「怎麼看」教學說明 + 「這次的解讀」具體狀況。

**詢問措辭範例**（自然、不機器人、給選項）：

```markdown
---

📄 **要不要我幫你產出完整 DOCX 報告？**

包含 7 張視覺化圖表（K 線+均線、量、RSI、MACD、布林通道、三大法人、四維熱度雷達），每張圖都附「怎麼看」教學說明 + 針對 {代號} 這次的具體解讀。適合存檔、跟人分享，或工作坊當教材。

回「**好**」或「**要**」就幫你產，回「**不用**」就到此為止。
```

### Step 8：執行 generate_report.py 產出 DOCX

使用者同意產 DOCX 時，**強烈建議把對話中你已經寫好的「擬人化獨白」和「一句話總結」傳給腳本**，這樣 DOCX 會用你客製化的版本（有溫度、貼合使用者處境），不是腳本自動生成的模板版（堪用但較生硬）。

#### 推薦做法：用 Write tool 寫暫存檔 + `--persona-file` / `--summary-file` 讀

因為擬人化獨白和總結通常多行 + 中文，命令列直接傳 `--persona "..."` 在不同 shell（bash / zsh / PowerShell / cmd）有各種引號跳脫坑。**最穩的跨平台做法是用 Write tool 寫檔（OS 層交給工具處理），再用 Python 讀**：

**步驟 1**：用 Write tool 把擬人化獨白寫到 `<SKILL_DIR>/tmp/persona.txt`（路徑可自行決定，建議放 skill 目錄下的 `tmp/`，避免污染系統 `/tmp` 或 Windows `%TEMP%`）：

```
（Write tool）
file_path: <SKILL_DIR>/tmp/persona.txt
content:
我幫你問了 2330 哦 ──

他說他最近真的飛得很高，60 天漲了 27%，每天都覺得有點頭暈。

他偷偷跟我說，三大法人合計買超 540 萬股，他覺得有人挺他。

他要我提醒你：「我現在站在 60 日的高點區，追進來的人請有準備被甩下去」
```

**步驟 2**：用 Write tool 把一句話總結寫到 `<SKILL_DIR>/tmp/summary.txt`：

```
（Write tool）
file_path: <SKILL_DIR>/tmp/summary.txt
content:
他現在處於相對高點區（60 日漲 27%、RSI 70），加上法人買超 540 萬股，多頭氛圍延續。對你已持有兩年的處境來說，可考慮分批加碼但避免單筆梭哈。
⚠️ 本分析僅為技術面解讀與娛樂用途，非投資建議。
```

**步驟 3**：跑腳本（**用一行寫完，不換行**，避免 bash `\` / PowerShell `` ` `` 的差異）：

```bash
python "<SKILL_DIR>/scripts/generate_report.py" "2330" "台積電,台積,TSMC" --persona-file "<SKILL_DIR>/tmp/persona.txt" --summary-file "<SKILL_DIR>/tmp/summary.txt" --output-dir "<USER_DIR>/reports"
```

> 📌 **`--output-dir` 很重要**：`<USER_DIR>` 是**使用者目前的專案目錄**（不是 `<SKILL_DIR>`）。skill 通常裝在全域的 `~/.claude/skills/` 共享位置，把使用者報告寫進去會污染共享資料夾。沒指定 `--output-dir` 時，腳本會用「呼叫端 cwd / reports」（也就是執行 Python 那一刻的工作目錄），這通常也是對的。**不要**寫進 skill 資料夾。

#### 簡易做法：完全不傳，讓腳本自動生成

如果只是要快速 demo、不在意文字客製化：

```bash
python "<SKILL_DIR>/scripts/generate_report.py" "2330" "台積電,台積,TSMC" --output-dir "<USER_DIR>/reports"
```

腳本會用模板自動生成擬人化和總結，並在 DOCX 中加註「（以上由模板自動生成）」。

#### 注意事項

- 第二個參數的別名清單跟 Step 3 的一樣，照寫即可
- 腳本會用 yfinance 重抓股價來畫圖（需要 30-60 秒）
- 報告路徑：`<--output-dir 指定的目錄>/<symbol>_<YYYYMMDD>_<HHMM>.docx`；沒指定時放在「呼叫端 cwd / reports/」
- 完成後跟使用者報告檔案路徑，並提示「在檔案總管打開即可看到完整內容」
- 如果產出失敗（例如 matplotlib 字型問題），檢查 `assets/fonts/NotoSansTC.ttf` 是否存在；終端機端的五區塊輸出仍是有效成果

#### DOCX 報告結構（V3.3）

```
封面（標題、分析時間、市場、產業、免責）
🎤 他想說什麼（先聽他講話）  ← V3.3 新加，緊接封面後
📌 一頁摘要（最新價、報酬、趨勢、RSI）
⚠️ 警訊清單
🔬 客觀觀察
📊 多維熱度交叉判讀
📊 技術圖表逐一解讀（7 張圖 × 怎麼看 + 這次解讀）
📌 一句話總結  ← V3.3 新加，必要結尾
```

不再有「附錄 / 完整 JSON」段（V3.3 已移除）。

## 風格守則（重要）

1. **寫實推測風格**：使用「推測」「可能」「依據近期技術特徵」「行為金融學上常見對應」等措辭，避免「他在說 xxx」「他明天一定 xxx」的斷言。
2. **信心度誠實標註**：歷史資料太少（< 30 個交易日）、特徵極端值缺乏對照、新聞與技術面衝突時，標註 low confidence。
3. **不假裝是分析師或營業員**：建議行動限於「觀察」「持倉檢視」「分批考量」「停損點設置」「諮詢專業人士」等通用方向，**絕對不給目標價**。
4. **冷門類型不亂編**：對某類資產（例如某海外冷門 ETF）沒把握時，明說「該標的歷史資料有限，以下推測信心較低」。
5. **不重複跑腳本**：同一標的在同一輪對話中只跑一次特徵提取。（例外：Step 8 產 DOCX 時 `generate_report.py` 會重新抓取一輪以確保報告數據即時，這是設計行為不算違規。）
6. **強制免責聲明**：每次完整輸出**都要**附「非投資建議」字樣，**不能省略**。
7. **溝通師口吻適度**：用「我幫你問了 {代號} 哦」「他最近心情起伏比較大」等擬人化句子點綴，但**內核必須是真實技術指標**。不能為了好笑捏造數字。
8. **提到技術線位時，必須在括號內附上對應價格**（**很重要**，不要讓使用者還要回頭查摘要表）：
   - ❌ 不好：「等股價回到 20 日均線附近再考慮加碼」
   - ✅ 好：「等股價回到 20 日均線（約 3,200 元）附近再考慮加碼」
   - 適用所有線位：5/20/60 日均線（`trend.ma5/ma20/ma60`）、布林上下軌（`volatility.bb_upper/bb_lower`）、60 日高/低點（`price.high_60d/low_60d`）
   - 數字格式：台股 < 100 元保留 2 位小數；台股 ≥ 100 元用千分位整數（例：2,305 元）；美股保留 2 位小數加 $ 符號
   - 表達範例：
     - 「跌破 60 日線（1,952 元）」
     - 「貼近布林上軌（2,358 元）」
     - 「距 60 日高點（2,310 元）只剩 1%」

## 常見錯誤避免

- ❌ 不要在沒跑腳本前就憑空寫技術指標數字
- ❌ 不要用「他要漲了」「他會跌」這類斷言或預測
- ❌ 不要忽略使用者的處境（持倉/時間/金額），五區塊都要回扣到那個處境
- ❌ 不要省略「非投資建議」免責聲明
- ❌ 不要為了「有趣」而加油添醋警訊；警訊必須有特徵依據
- ❌ **資料源失敗時不要把它當成「真的冷清」/ 「真的沒新聞」納入判讀**（會誤導）；正確做法：標「⚠️ 抓取失敗（未納入判讀）」，讓使用者知道是「試過但沒抓到」，並且**交叉判讀完全跳過該維度**
- ❌ 不要說「散戶熱度低，可能法人在悄悄佈局」**如果 PTT 是抓取失敗** —— 真的冷清和抓取失敗意義差很多，不能混為一談
- ❌ 不要給目標價、止損價的具體數字（例如「跌破 580 就賣」）—— 可以說「跌破 60 日線（1,952 元）值得留意」這種「相對位置 + 對照價格」的描述
- ❌ 提到技術線位時不要光講名字（「等回到 20 日均線」），**一定要附對應價格**（「等回到 20 日均線（3,200 元）」），否則使用者要回頭查摘要表，體驗很糟
- ❌ **不要把擬人化獨白寫成「該股呈現過熱」這種研究報告語氣** —— 一定要用「他說……」「他偷偷跟我說……」這種把股票當成「他」在說話的擬人化口吻，配合「累」「不開心」「緊張」「有點頭暈」這類有溫度的形容詞
- ❌ **擬人化獨白要放在最前面**（緊接報告標題），不是放在「市場情緒推測」之後 —— 我們是溝通師，先聽他說話再分析才合理
- ❌ **「📌 一句話總結」是必要結尾**，不能省略 —— 那是給沒時間讀完整分析的人最後抓住重點的地方

## 進階設定（選用，V2 擴充用）

如果未來想加入需要 API key 的資料源（例如 NewsAPI、Alpha Vantage、OpenAI），可在本 skill 資料夾下建立 `.env` 檔：

```
NEWSAPI_KEY=xxx
ALPHAVANTAGE_KEY=xxx
```

腳本會用 `os.environ.get('NEWSAPI_KEY')` 讀取，**沒設定就跳過該資料源**並標註「無資料（未設定 API key）」。**現階段 V1 不需要任何 key**。

## 範例

完整範例見 `examples/usage_example.md`。

