將不同單位的估值指標(PE、PB、CAPE 等)統一成「0-100 的歷史分位數」:
- 分位數 = 100 × (歷史中 ≤ 當前值的樣本數 / 總樣本數)
- 例:CAPE 位於歷史第 98 分位 → 過去 130 年只有 2% 的時間比現在更貴
- 統一單位後,可跨指標合成「綜合估值分位數」
合成公式:composite_percentile = 加權平均(各指標分位數)
支援三種合成方式:
| 方式 |
公式 |
適用場景 |
| mean |
算術平均 |
各指標同等重要 |
| median |
中位數 |
抵抗單一指標異常拉升 |
| trimmed_mean |
去極端平均 |
穩健估計 |
重要:各指標可能有不同歷史長度,預設使用「各自歷史」計算分位數再合成。
if composite_percentile >= extreme_threshold (預設 95):
→ 判定「歷史極端高估」
→ 觸發風險解讀流程
歷史類比事件識別:
- 找出合成分位數超過門檻的峰值
- 用
episode_min_gap_days 去重(預設 10 年內只保留最高點)
- 輸出:1929、1965、1999、2021、當前...
「估值極端高」≠「明天崩盤」,但歷史特徵是:
- 風險分布不對稱:下跌尾巴變厚
- 未來中期報酬壓縮:估值均值回歸壓低長期報酬上限
- 波動先升後跌:事件後 6-12 月波動率通常上升
輸出事後統計:
- 未來 180/365/1095 天報酬分布
- 最大回撤中位數與尾部風險
- 波動率變化機率
本 skill 使用公開替代資料,非彭博原始數據:
- Shiller CAPE: Robert Shiller 公開資料集(可回溯至 1871 年)
- 市值/GDP: FRED 公開數據(可回溯至 1950 年代)
- PE/PB/PS: 公開金融資料(歷史較短,約 30-50 年)
必須揭露:
- 各指標可得期間不同
- 合成分位數為「近似重建」,非精確複製
- 收集估值指標:從公開數據源取得 PE、CAPE、PB、PS、市值/GDP 等
- 計算分位數:將各指標轉換為歷史分位數(0-100)
- 合成總分:加權平均(或中位數)得到綜合估值分位數
- 判定極端:若總分 ≥ 門檻(預設 95),觸發極端高估警報
- 歷史類比:找出歷史上的類似事件(1929、1965、1999 等)
- 事後統計:計算這些事件後的報酬、回撤、波動變化
輸出:當前狀態、各指標分位數、歷史類比事件、風險解讀。
最快的方式:執行視覺化分析
cd skills/detect-us-equity-valuation-percentile-extreme
pip install pandas numpy yfinance requests matplotlib openpyxl xlrd # 首次使用
python scripts/visualize_valuation.py -o output
輸出:
output/us_valuation_percentile_YYYY-MM-DD.png - 歷史走勢圖(類似 @ekwufinance 風格)
output/us_valuation_breakdown_YYYY-MM-DD.png - 各指標分位數分解圖
output/us_valuation_analysis_YYYY-MM-DD.json - JSON 結果
圖表特色:
- 多指標合成分位數的歷史走勢(非單一時間點)
- 歷史峰值標記:1929、1965、1999、2021
- S&P 500 指數疊加(對數刻度)
- 當前「新高」標註
快速檢查(純 JSON):
python scripts/valuation_percentile.py --quick
完整分析:
python scripts/valuation_percentile.py \
--as_of_date 2026-01-21 \
--universe "^GSPC" \
--metrics "cape,mktcap_to_gdp,trailing_pe,pb" \
--output result.json
- 視覺化分析(推薦) - 生成歷史走勢圖表,標記歷史峰值
- 快速檢查 - 查看目前的估值分位數與極端狀態
- 完整分析 - 執行完整的歷史分位數分析與風險解讀
- 歷史類比 - 深入分析歷史極端高估事件與事後表現
- 方法論學習 - 了解估值分位數模型的邏輯
- 自訂參數 - 指定估值指標、門檻、合成方式等
請選擇或直接提供分析參數。
路由後,閱讀對應文件並執行。
方法論: references/methodology.md
- 分位數標準化原理
- 多指標合成邏輯
- 極端偵測與歷史類比
資料來源: references/data-sources.md
- Shiller CAPE 資料集
- FRED 系列代碼
- 公開替代資料說明
估值指標: references/valuation-metrics.md
- PE、Forward PE、CAPE 定義
- PB、PS、EV/EBITDA 定義
- Q Ratio、市值/GDP 定義
輸入參數: references/input-schema.md
| Script |
Command |
Purpose |
| visualize_valuation.py |
-o output |
視覺化分析(推薦) |
| valuation_percentile.py |
--quick |
快速檢查當前狀態 |
| valuation_percentile.py |
--as_of_date DATE --output FILE |
完整分析 |
| fetch_valuation_data.py |
--metrics cape,pe |
抓取估值資料 |
|
|
|
核心參數
| 參數 |
類型 |
預設值 |
說明 |
| as_of_date |
string |
today |
評估日期 |
| universe |
string |
^GSPC |
市場代碼 |
| history_start |
string |
1900-01-01 |
歷史起算日 |
| metrics |
array |
[cape, ...] |
估值指標清單 |
| aggregation |
string |
mean |
合成方法 |
門檻參數
| 參數 |
類型 |
預設值 |
說明 |
| extreme_threshold |
number |
95 |
極端高估門檻(分位數) |
| episode_min_gap_days |
int |
3650 |
歷史事件去重間隔 |
| forward_windows_days |
array |
[180, 365, 1095] |
事後統計視窗 |
完整參數定義見 references/input-schema.md。
完整輸出結構見 templates/output-json.md。
視覺化輸出(使用 visualize_valuation.py):
1---2name: detect-us-equity-valuation-percentile-extreme3description: 把多個股票估值指標統一轉成在過去百年歷史中的分位數,再合成一個總分,判斷目前是否處於歷史極端高估區間,並用歷史類比(如 1929、1965、1999)給出風險解讀。4---5
6<essential_principles>
7
8<principle name="percentile_normalization">
9**分位數標準化核心**
10
11將不同單位的估值指標(PE、PB、CAPE 等)統一成「0-100 的歷史分位數」:
12- **分位數 = 100 × (歷史中 ≤ 當前值的樣本數 / 總樣本數)**
13- 例:CAPE 位於歷史第 98 分位 → 過去 130 年只有 2% 的時間比現在更貴
14- 統一單位後,可跨指標合成「綜合估值分位數」
15</principle>
16
17<principle name="composite_aggregation">
18**多指標合成邏輯**
19
20合成公式:`composite_percentile = 加權平均(各指標分位數)`
21
22支援三種合成方式:
23| 方式 | 公式 | 適用場景 |
24|------|------|----------|
25| mean | 算術平均 | 各指標同等重要 |
26| median | 中位數 | 抵抗單一指標異常拉升 |
27| trimmed_mean | 去極端平均 | 穩健估計 |
28
29**重要**:各指標可能有不同歷史長度,預設使用「各自歷史」計算分位數再合成。
30</principle>
31
32<principle name="extreme_detection">
33**極端高估偵測邏輯**
34
35```
36if composite_percentile >= extreme_threshold (預設 95):
37 → 判定「歷史極端高估」
38 → 觸發風險解讀流程
39```
40
41歷史類比事件識別:
421. 找出合成分位數超過門檻的峰值
432. 用 `episode_min_gap_days` 去重(預設 10 年內只保留最高點)
443. 輸出:1929、1965、1999、2021、當前...
45</principle>
46
47<principle name="risk_interpretation">
48**風險解讀框架**
49
50「估值極端高」≠「明天崩盤」,但歷史特徵是:
51- **風險分布不對稱**:下跌尾巴變厚
52- **未來中期報酬壓縮**:估值均值回歸壓低長期報酬上限
53- **波動先升後跌**:事件後 6-12 月波動率通常上升
54
55輸出事後統計:
56- 未來 180/365/1095 天報酬分布
57- 最大回撤中位數與尾部風險
58- 波動率變化機率
59</principle>
60
61<principle name="data_transparency">
62**資料來源與限制揭露**
63
64本 skill 使用**公開替代資料**,非彭博原始數據:
65- **Shiller CAPE**: Robert Shiller 公開資料集(可回溯至 1871 年)
66- **市值/GDP**: FRED 公開數據(可回溯至 1950 年代)
67- **PE/PB/PS**: 公開金融資料(歷史較短,約 30-50 年)
68
69**必須揭露**:
70- 各指標可得期間不同
71- 合成分位數為「近似重建」,非精確複製
72</principle>
73
74</essential_principles>
75
76<objective>
77偵測美股估值是否處於歷史極端區間:
78
791. **收集估值指標**:從公開數據源取得 PE、CAPE、PB、PS、市值/GDP 等
802. **計算分位數**:將各指標轉換為歷史分位數(0-100)
813. **合成總分**:加權平均(或中位數)得到綜合估值分位數
824. **判定極端**:若總分 ≥ 門檻(預設 95),觸發極端高估警報
835. **歷史類比**:找出歷史上的類似事件(1929、1965、1999 等)
846. **事後統計**:計算這些事件後的報酬、回撤、波動變化
85
86輸出:當前狀態、各指標分位數、歷史類比事件、風險解讀。
87</objective>
88
89<quick_start>
90
91**最快的方式:執行視覺化分析**
92
93```bash
94cd skills/detect-us-equity-valuation-percentile-extreme
95pip install pandas numpy yfinance requests matplotlib openpyxl xlrd # 首次使用
96python scripts/visualize_valuation.py -o output
97```
98
99輸出:
100- `output/us_valuation_percentile_YYYY-MM-DD.png` - 歷史走勢圖(類似 @ekwufinance 風格)
101- `output/us_valuation_breakdown_YYYY-MM-DD.png` - 各指標分位數分解圖
102- `output/us_valuation_analysis_YYYY-MM-DD.json` - JSON 結果
103
104**圖表特色**:
105- 多指標合成分位數的**歷史走勢**(非單一時間點)
106- **歷史峰值標記**:1929、1965、1999、2021
107- S&P 500 指數疊加(對數刻度)
108- 當前「新高」標註
109
110**快速檢查(純 JSON)**:
111```bash
112python scripts/valuation_percentile.py --quick
113```
114
115**完整分析**:
116```bash
117python scripts/valuation_percentile.py \
118 --as_of_date 2026-01-21 \
119 --universe "^GSPC" \
120 --metrics "cape,mktcap_to_gdp,trailing_pe,pb" \
121 --output result.json
122```
123
124</quick_start>
125
126<intake>
127需要進行什麼操作?
128
1291. **視覺化分析(推薦)** - 生成歷史走勢圖表,標記歷史峰值
1302. **快速檢查** - 查看目前的估值分位數與極端狀態
1313. **完整分析** - 執行完整的歷史分位數分析與風險解讀
1324. **歷史類比** - 深入分析歷史極端高估事件與事後表現
1335. **方法論學習** - 了解估值分位數模型的邏輯
1346. **自訂參數** - 指定估值指標、門檻、合成方式等
135
136**請選擇或直接提供分析參數。**
137</intake>
138
139<routing>
140| Response | Action |
141|----------------------------------|----------------------------------------------|
142| 1, "視覺化", "圖表", "chart" | 執行 `python scripts/visualize_valuation.py -o output` |
143| 2, "快速", "quick", "check" | 執行 `python scripts/valuation_percentile.py --quick` |
144| 3, "完整", "full", "analysis" | 閱讀 `workflows/execute-analysis.md` 並執行 |
145| 4, "歷史", "類比", "episodes" | 閱讀 `workflows/historical-episodes.md` 並執行 |
146| 5, "學習", "方法論", "why" | 閱讀 `references/methodology.md` |
147| 6, "自訂", "custom", 提供參數 | 閱讀 `workflows/execute-analysis.md` 並使用參數執行 |
148
149**路由後,閱讀對應文件並執行。**
150</routing>
151
152<directory_structure>
153```
154detect-us-equity-valuation-percentile-extreme/
155├── SKILL.md # 本文件(路由器)
156├── skill.yaml # 前端展示元數據
157├── manifest.json # 技能元數據
158├── workflows/
159│ ├── execute-analysis.md # 完整分析工作流
160│ ├── visualize-analysis.md # 視覺化分析工作流
161│ └── historical-episodes.md # 歷史類比分析工作流
162├── references/
163│ ├── methodology.md # 估值分位數方法論
164│ ├── data-sources.md # 資料來源與代碼
165│ ├── valuation-metrics.md # 估值指標定義
166│ └── input-schema.md # 完整輸入參數定義
167├── templates/
168│ ├── output-json.md # JSON 輸出模板
169│ └── output-markdown.md # Markdown 報告模板
170├── scripts/
171│ ├── valuation_percentile.py # 主分析腳本
172│ ├── visualize_valuation.py # 視覺化腳本(歷史走勢圖)
173│ └── fetch_valuation_data.py # 資料抓取工具
174└── examples/
175 └── sample_output.json # 範例輸出
176```
177</directory_structure>
178
179<reference_index>
180
181**方法論**: references/methodology.md
182- 分位數標準化原理
183- 多指標合成邏輯
184- 極端偵測與歷史類比
185
186**資料來源**: references/data-sources.md
187- Shiller CAPE 資料集
188- FRED 系列代碼
189- 公開替代資料說明
190
191**估值指標**: references/valuation-metrics.md
192- PE、Forward PE、CAPE 定義
193- PB、PS、EV/EBITDA 定義
194- Q Ratio、市值/GDP 定義
195
196**輸入參數**: references/input-schema.md
197- 完整參數定義
198- 預設值與建議範圍
199
200</reference_index>
201
202<workflows_index>
203| Workflow | Purpose | 使用時機 |
204|-------------------------|------------------|------------------------|
205| execute-analysis.md | 完整估值分析 | 需要完整報告時 |
206| historical-episodes.md | 歷史事件深度分析 | 理解歷史類比與事後統計 |
207</workflows_index>
208
209<templates_index>
210| Template | Purpose |
211|--------------------|----------------------|
212| output-json.md | JSON 輸出結構定義 |
213| output-markdown.md | Markdown 報告模板 |
214</templates_index>
215
216<scripts_index>
217| Script | Command | Purpose |
218|---------------------------|-----------------------------------|----------------------|
219| visualize_valuation.py | `-o output` | **視覺化分析(推薦)** |
220| valuation_percentile.py | `--quick` | 快速檢查當前狀態 |
221| valuation_percentile.py | `--as_of_date DATE --output FILE` | 完整分析 |
222| fetch_valuation_data.py | `--metrics cape,pe` | 抓取估值資料 |
223</scripts_index>
224
225<input_schema_summary>
226
227**核心參數**
228
229| 參數 | 類型 | 預設值 | 說明 |
230|----------------|--------|--------------|------------------|
231| as_of_date | string | today | 評估日期 |
232| universe | string | ^GSPC | 市場代碼 |
233| history_start | string | 1900-01-01 | 歷史起算日 |
234| metrics | array | [cape, ...] | 估值指標清單 |
235| aggregation | string | mean | 合成方法 |
236
237**門檻參數**
238
239| 參數 | 類型 | 預設值 | 說明 |
240|-----------------------|--------|--------|------------------------|
241| extreme_threshold | number | 95 | 極端高估門檻(分位數) |
242| episode_min_gap_days | int | 3650 | 歷史事件去重間隔 |
243| forward_windows_days | array | [180, 365, 1095] | 事後統計視窗 |
244
245完整參數定義見 `references/input-schema.md`。
246
247</input_schema_summary>
248
249<output_schema_summary>
250```json
251{
252 "skill": "detect-us-equity-valuation-percentile-extreme",
253 "as_of_date": "2026-01-21",
254 "universe": "^GSPC",
255 "composite_percentile": 97.3,
256 "extreme_threshold": 95,
257 "is_extreme": true,
258 "metric_percentiles": {
259 "cape": 98.2,
260 "mktcap_to_gdp": 96.5,
261 "trailing_pe": 94.1
262 },
263 "historical_episodes": [
264 {"date": "1929-09-01", "composite_percentile": 97.8},
265 {"date": "1999-12-01", "composite_percentile": 98.5}
266 ],
267 "forward_stats": {
268 "365d_forward_return": {"median": -8.2, "p25": -22.1, "p10": -38.5},
269 "1095d_max_drawdown": {"median": -28.4, "p75": -42.1}
270 },
271 "data_quality_notes": [
272 "CAPE 資料可回溯至 1871 年",
273 "市值/GDP 資料可回溯至 1950 年代",
274 "合成分位數使用各指標自身歷史分布"
275 ]
276}
277```
278
279完整輸出結構見 `templates/output-json.md`。
280</output_schema_summary>
281
282<success_criteria>
283執行成功時應產出:
284
285- [ ] 當前綜合估值分位數(0-100)
286- [ ] 各指標個別分位數
287- [ ] 極端高估判定(是/否)
288- [ ] 歷史類比事件清單(日期、分位數)
289- [ ] 事後統計(報酬、回撤、波動)
290- [ ] 資料品質說明(各指標可得期間)
291- [ ] 風險解讀框架(可選,輸出至 Markdown)
292
293**視覺化輸出**(使用 visualize_valuation.py):
294
295- [ ] 歷史走勢圖(`us_valuation_percentile_YYYY-MM-DD.png`)
296 - 多指標合成分位數時間序列
297 - 歷史峰值標記(1929、1965、1999、2021)
298 - S&P 500 指數疊加(對數刻度)
299 - 當前位置標註
300- [ ] 指標分解圖(`us_valuation_breakdown_YYYY-MM-DD.png`)
301 - 各指標分位數橫向條形圖
302 - 極端門檻參考線
303- [ ] JSON 結果檔(`us_valuation_analysis_YYYY-MM-DD.json`)
304</success_criteria>