礦業股/金屬比率(Miner-to-Metal Ratio):
ratio_t = miner_price_t / metal_price_t
其中:
- miner_price:銀礦股代表(ETF 如 SIL/SILJ,或自建礦業股指數)
- metal_price:白銀價格(期貨 SI=F、現貨 XAGUSD、ETF SLV)
此比率衡量「礦業股相對於金屬本體」的估值水位:
- 比率高:礦業股相對白銀偏貴(可能過度樂觀、槓桿溢價高)
- 比率低:礦業股相對白銀偏便宜(可能被低估、或反映成本/股權稀釋風險)
使用歷史分位數(Percentile Rank)判斷當前比率位置:
| 分位數區間 |
標籤 |
直覺 |
| ≤ 20% |
bottom (底部) |
礦業股相對白銀歷史上很便宜 |
| 20-40% |
low (偏低) |
礦業股相對估值偏低 |
| 40-60% |
neutral (中性) |
歷史中位區間 |
| 60-80% |
high (偏高) |
礦業股相對估值偏高 |
| ≥ 80% |
top (頂部) |
礦業股相對白銀歷史上很貴 |
底部區間不等於白銀必漲:可能是礦業股因成本/稀釋被合理定價。
當出現「比率低 + 白銀高」的組合:
- 比率處於底部區:礦業股相對白銀偏便宜
- 白銀處於高位:金屬價格已在歷史高檔
此「背離」意味著:
- 礦業股可能有追趕空間(均值回歸邏輯)
- 或礦業股正確反映了結構性問題(成本、稀釋、地緣風險)
需結合基本面交叉驗證,而非盲目視為買入訊號。
目標:若比率要回到歷史頂部(或中位),需要什麼條件?
假設當前比率 = 1.14,目標比率(頂部門檻)= 2.45:
情境 A:白銀不變,礦業股需漲多少?
miner_multiplier = target_ratio / current_ratio
= 2.45 / 1.14 = 2.15x (需漲 115%)
情境 B:礦業股不變,白銀需跌多少?
metal_multiplier = current_ratio / target_ratio
= 1.14 / 2.45 = 0.46 (需跌 54%)
此推演提供「極端情境」的量化參考,非預測。
- 頻率選擇:長週期訊號建議使用週頻(1wk)或月頻(1mo)
- 平滑視窗:可選 4 週或 3 個月移動平均降低雜訊
- 事件去重:類比事件間隔需 ≥ min_separation_days(如 180 天)
本 skill 使用 yfinance 取得 ETF/期貨數據,預設週頻對齊。
- 數據整合:取得礦業股代理與白銀價格序列
- 比率計算:計算相對比率並可選平滑
- 分位數判斷:當前比率在歷史的位置
- 類比事件:歷史底部區間的事件識別
- 前瞻驗證:底部事件後白銀的 1/2/3 年表現
- 情境推演:礦業股需漲多少 / 白銀需跌多少才回到頂部
輸出:當前狀態、歷史類比、情境推演、風險提示。
最快的方式:執行預設情境分析
cd skills/analyze-silver-miner-metal-ratio
pip install pandas numpy yfinance matplotlib # 首次使用
python scripts/ratio_analyzer.py --quick
生成視覺化圖表(基本版)
python scripts/ratio_plotter.py --quick --output-dir ../../output
生成完整版圖表(含底部事件、前瞻報酬統計)
python scripts/ratio_plotter.py --comprehensive --start-date 2010-01-01 --output-dir ../../output
圖表輸出路徑:
- 基本版:
output/sil_silver_ratio_YYYY-MM-DD.png
- 完整版:
output/sil_silver_ratio_comprehensive_YYYY-MM-DD.png
輸出範例:
{
"skill": "analyze_silver_miner_metal_ratio",
"current": {
"ratio": 1.14,
"ratio_percentile": 18.7,
"zone": "bottom",
"bottom_threshold": 1.16,
"top_threshold": 2.45
},
"history_analogs": {
"bottom_event_dates": ["2010-08-06", "2016-01-29", "2020-03-20"],
"forward_metal_returns": {
"252": {"count": 3, "median": 0.42, "win_rate": 1.0}
}
},
"scenarios": {
"target": "return_to_top",
"miner_multiplier_if_metal_flat": 2.15,
"metal_drop_pct_if_miner_flat": 0.54
}
}
完整情境分析:
python scripts/ratio_analyzer.py \
--miner-proxy SIL \
--metal-proxy SI=F \
--start-date 2008-01-01 \
--freq 1wk \
--smoothing-window 4 \
--bottom-quantile 0.20 \
--top-quantile 0.80 \
--output result.json
- 快速分析 - 使用預設參數(SIL / SI=F)計算當前比率狀態
- 完整分析 - 自訂參數進行情境分析(可選擇礦業股/金屬代理、分位門檻)
- 視覺化圖表 - 生成比率走勢圖,標記當前位置與分位數區間
- 歷史驗證 - 查看底部區間事件的前瞻報酬統計
- 情境推演 - 計算「回到頂部」需要的礦業股漲幅或白銀跌幅
- 方法論學習 - 了解比率邏輯與分位數解讀
請選擇或直接提供分析參數。
路由後,閱讀對應文件並執行。
方法論: references/methodology.md
- 比率定義與直覺
- 分位數解讀邏輯
- 背離訊號的意義
- 情境推演數學
- 歷史驗證方法
資料來源: references/data-sources.md
- 礦業股代理(ETF/指數)
- 白銀價格代理
- 數據對齊原則
輸入參數: references/input-schema.md
| Script |
Command |
Purpose |
| ratio_analyzer.py |
--quick |
快速分析 SIL/SI=F |
| ratio_analyzer.py |
--miner-proxy SILJ --freq 1mo |
自訂礦業股與頻率 |
| ratio_analyzer.py |
--scenario-target return_to_median |
回到中位數情境 |
| ratio_plotter.py |
--quick --output-dir ../../output |
快速生成基本版圖表 |
| ratio_plotter.py |
--comprehensive --start-date 2010-01-01 --output-dir ... |
完整版圖表(含底部事件、前瞻報酬統計) |
|
|
|
核心參數
| 參數 |
類型 |
預設值 |
說明 |
| miner_proxy |
string |
SIL |
銀礦股代表(ETF/指數代號) |
| metal_proxy |
string |
SI=F |
白銀價格代表(期貨/現貨/ETF) |
| start_date |
string |
10 年前 |
歷史回溯起點(YYYY-MM-DD) |
| end_date |
string |
today |
分析終點 |
| freq |
string |
1wk |
取樣頻率(1d/1wk/1mo) |
進階參數
| 參數 |
類型 |
預設值 |
說明 |
| smoothing_window |
int |
4 |
比率平滑視窗(週數/月數) |
| bottom_quantile |
float |
0.20 |
底部估值區分位數門檻 |
| top_quantile |
float |
0.80 |
頂部估值區分位數門檻 |
| min_separation_days |
int |
180 |
類比事件去重間隔 |
| forward_horizons |
list |
[52, 104, 156] |
前瞻期(週數,對應 1/2/3 年) |
| scenario_target |
string |
return_to_top |
情境目標(return_to_top/median) |
完整參數定義見 references/input-schema.md。
完整輸出結構見 templates/output-json.md。
1---2name: analyze-silver-miner-metal-ratio3description: 以「銀礦股價格 ÷ 白銀價格」的相對比率衡量礦業股板塊相對於金屬本體的估值區間(偏貴/偏便宜),並用歷史分位數與類比區間推導「底部/頂部」訊號與情境推演。4---56<essential_principles>78<principle name="ratio_definition">9**比率定義與意義**1011礦業股/金屬比率(Miner-to-Metal Ratio):1213```14ratio_t = miner_price_t / metal_price_t15```1617其中:18- **miner_price**:銀礦股代表(ETF 如 SIL/SILJ,或自建礦業股指數)19- **metal_price**:白銀價格(期貨 SI=F、現貨 XAGUSD、ETF SLV)2021此比率衡量「礦業股相對於金屬本體」的估值水位:22- **比率高**:礦業股相對白銀偏貴(可能過度樂觀、槓桿溢價高)23- **比率低**:礦業股相對白銀偏便宜(可能被低估、或反映成本/股權稀釋風險)24</principle>2526<principle name="quantile_interpretation">27**分位數解讀邏輯**2829使用歷史分位數(Percentile Rank)判斷當前比率位置:3031| 分位數區間 | 標籤 | 直覺 |32|------------|----------------|----------------------------|33| ≤ 20% | bottom (底部) | 礦業股相對白銀歷史上很便宜 |34| 20-40% | low (偏低) | 礦業股相對估值偏低 |35| 40-60% | neutral (中性) | 歷史中位區間 |36| 60-80% | high (偏高) | 礦業股相對估值偏高 |37| ≥ 80% | top (頂部) | 礦業股相對白銀歷史上很貴 |3839**底部區間不等於白銀必漲**:可能是礦業股因成本/稀釋被合理定價。40</principle>4142<principle name="divergence_signal">43**背離訊號的意義**4445當出現「比率低 + 白銀高」的組合:4647- **比率處於底部區**:礦業股相對白銀偏便宜48- **白銀處於高位**:金屬價格已在歷史高檔4950此「背離」意味著:511. 礦業股可能有追趕空間(均值回歸邏輯)522. 或礦業股正確反映了結構性問題(成本、稀釋、地緣風險)5354需結合基本面交叉驗證,而非盲目視為買入訊號。55</principle>5657<principle name="scenario_math">58**情境推演計算**5960目標:若比率要回到歷史頂部(或中位),需要什麼條件?6162假設當前比率 = 1.14,目標比率(頂部門檻)= 2.45:6364**情境 A:白銀不變,礦業股需漲多少?**65```66miner_multiplier = target_ratio / current_ratio67 = 2.45 / 1.14 = 2.15x (需漲 115%)68```6970**情境 B:礦業股不變,白銀需跌多少?**71```72metal_multiplier = current_ratio / target_ratio73 = 1.14 / 2.45 = 0.46 (需跌 54%)74```7576此推演提供「極端情境」的量化參考,非預測。77</principle>7879<principle name="data_alignment">80**數據對齊原則**8182- **頻率選擇**:長週期訊號建議使用週頻(1wk)或月頻(1mo)83- **平滑視窗**:可選 4 週或 3 個月移動平均降低雜訊84- **事件去重**:類比事件間隔需 ≥ min_separation_days(如 180 天)8586本 skill 使用 yfinance 取得 ETF/期貨數據,預設週頻對齊。87</principle>8889</essential_principles>9091<objective>92實作「銀礦股價 / 銀價比率」分析模型:93941. **數據整合**:取得礦業股代理與白銀價格序列952. **比率計算**:計算相對比率並可選平滑963. **分位數判斷**:當前比率在歷史的位置974. **類比事件**:歷史底部區間的事件識別985. **前瞻驗證**:底部事件後白銀的 1/2/3 年表現996. **情境推演**:礦業股需漲多少 / 白銀需跌多少才回到頂部100101輸出:當前狀態、歷史類比、情境推演、風險提示。102</objective>103104<quick_start>105106**最快的方式:執行預設情境分析**107108```bash109cd skills/analyze-silver-miner-metal-ratio110pip install pandas numpy yfinance matplotlib # 首次使用111python scripts/ratio_analyzer.py --quick112```113114**生成視覺化圖表(基本版)**115116```bash117python scripts/ratio_plotter.py --quick --output-dir ../../output118```119120**生成完整版圖表(含底部事件、前瞻報酬統計)**121122```bash123python scripts/ratio_plotter.py --comprehensive --start-date 2010-01-01 --output-dir ../../output124```125126圖表輸出路徑:127- 基本版:`output/sil_silver_ratio_YYYY-MM-DD.png`128- 完整版:`output/sil_silver_ratio_comprehensive_YYYY-MM-DD.png`129130輸出範例:131```json132{133 "skill": "analyze_silver_miner_metal_ratio",134 "current": {135 "ratio": 1.14,136 "ratio_percentile": 18.7,137 "zone": "bottom",138 "bottom_threshold": 1.16,139 "top_threshold": 2.45140 },141 "history_analogs": {142 "bottom_event_dates": ["2010-08-06", "2016-01-29", "2020-03-20"],143 "forward_metal_returns": {144 "252": {"count": 3, "median": 0.42, "win_rate": 1.0}145 }146 },147 "scenarios": {148 "target": "return_to_top",149 "miner_multiplier_if_metal_flat": 2.15,150 "metal_drop_pct_if_miner_flat": 0.54151 }152}153```154155**完整情境分析**:156```bash157python scripts/ratio_analyzer.py \158 --miner-proxy SIL \159 --metal-proxy SI=F \160 --start-date 2008-01-01 \161 --freq 1wk \162 --smoothing-window 4 \163 --bottom-quantile 0.20 \164 --top-quantile 0.80 \165 --output result.json166```167168</quick_start>169170<intake>171需要進行什麼操作?1721731. **快速分析** - 使用預設參數(SIL / SI=F)計算當前比率狀態1742. **完整分析** - 自訂參數進行情境分析(可選擇礦業股/金屬代理、分位門檻)1753. **視覺化圖表** - 生成比率走勢圖,標記當前位置與分位數區間1764. **歷史驗證** - 查看底部區間事件的前瞻報酬統計1775. **情境推演** - 計算「回到頂部」需要的礦業股漲幅或白銀跌幅1786. **方法論學習** - 了解比率邏輯與分位數解讀179180**請選擇或直接提供分析參數。**181</intake>182183<routing>184| Response | Action |185|-------------------------------|---------------------------------------------------------------------|186| 1, "快速", "quick", "分析" | 執行 `python scripts/ratio_analyzer.py --quick` |187| 2, "完整", "full", "自訂" | 閱讀 `workflows/analyze.md` 並執行 |188| 3, "圖表", "chart", "視覺化" | 執行 `python scripts/ratio_plotter.py --quick --output-dir output/` |189| 4, "歷史", "驗證", "backtest" | 閱讀 `workflows/analyze.md` 並聚焦歷史類比 |190| 5, "情境", "scenario", "推演" | 閱讀 `workflows/analyze.md` 並聚焦情境推演 |191| 6, "學習", "方法論", "why" | 閱讀 `references/methodology.md` |192| 提供參數 (如礦業股/金屬代理) | 閱讀 `workflows/analyze.md` 並使用參數執行 |193194**路由後,閱讀對應文件並執行。**195</routing>196197<directory_structure>198```199analyze-silver-miner-metal-ratio/200├── SKILL.md # 本文件(路由器)201├── skill.yaml # 前端展示元數據202├── manifest.json # 技能元數據203├── workflows/204│ ├── analyze.md # 完整情境分析工作流205│ └── data-research.md # 數據源研究與替代方案206├── references/207│ ├── methodology.md # 方法論與計算邏輯208│ ├── input-schema.md # 完整輸入參數定義209│ └── data-sources.md # 數據來源與獲取方式210├── templates/211│ ├── output-json.md # JSON 輸出模板212│ └── output-markdown.md # Markdown 報告模板213├── scripts/214│ ├── ratio_analyzer.py # 主計算腳本215│ └── ratio_plotter.py # 視覺化圖表腳本216└── examples/217 └── sample-output.json # 範例輸出218```219</directory_structure>220221<reference_index>222223**方法論**: references/methodology.md224- 比率定義與直覺225- 分位數解讀邏輯226- 背離訊號的意義227- 情境推演數學228- 歷史驗證方法229230**資料來源**: references/data-sources.md231- 礦業股代理(ETF/指數)232- 白銀價格代理233- 數據對齊原則234235**輸入參數**: references/input-schema.md236- 完整參數定義237- 預設值與建議範圍238239</reference_index>240241<workflows_index>242| Workflow | Purpose | 使用時機 |243|------------------|--------------|-----------------------------------|244| analyze.md | 完整情境分析 | 需要自訂參數計算比率與情境 |245| data-research.md | 數據源研究 | 了解如何獲取或替代礦業股/金屬數據 |246</workflows_index>247248<templates_index>249| Template | Purpose |250|--------------------|-------------------|251| output-json.md | JSON 輸出結構定義 |252| output-markdown.md | Markdown 報告模板 |253</templates_index>254255<scripts_index>256| Script | Command | Purpose |257|-------------------|------------------------------------------------------------|----------------------------------------|258| ratio_analyzer.py | `--quick` | 快速分析 SIL/SI=F |259| ratio_analyzer.py | `--miner-proxy SILJ --freq 1mo` | 自訂礦業股與頻率 |260| ratio_analyzer.py | `--scenario-target return_to_median` | 回到中位數情境 |261| ratio_plotter.py | `--quick --output-dir ../../output` | 快速生成基本版圖表 |262| ratio_plotter.py | `--comprehensive --start-date 2010-01-01 --output-dir ...` | 完整版圖表(含底部事件、前瞻報酬統計) |263</scripts_index>264265<input_schema_summary>266267**核心參數**268269| 參數 | 類型 | 預設值 | 說明 |270|-------------|--------|---------|-------------------------------|271| miner_proxy | string | SIL | 銀礦股代表(ETF/指數代號) |272| metal_proxy | string | SI=F | 白銀價格代表(期貨/現貨/ETF) |273| start_date | string | 10 年前 | 歷史回溯起點(YYYY-MM-DD) |274| end_date | string | today | 分析終點 |275| freq | string | 1wk | 取樣頻率(1d/1wk/1mo) |276277**進階參數**278279| 參數 | 類型 | 預設值 | 說明 |280|---------------------|--------|----------------|----------------------------------|281| smoothing_window | int | 4 | 比率平滑視窗(週數/月數) |282| bottom_quantile | float | 0.20 | 底部估值區分位數門檻 |283| top_quantile | float | 0.80 | 頂部估值區分位數門檻 |284| min_separation_days | int | 180 | 類比事件去重間隔 |285| forward_horizons | list | [52, 104, 156] | 前瞻期(週數,對應 1/2/3 年) |286| scenario_target | string | return_to_top | 情境目標(return_to_top/median) |287288完整參數定義見 `references/input-schema.md`。289290</input_schema_summary>291292<output_schema_summary>293```json294{295 "skill": "analyze_silver_miner_metal_ratio",296 "inputs": {297 "miner_proxy": "SIL",298 "metal_proxy": "SI=F",299 "start_date": "2010-01-01",300 "freq": "1wk"301 },302 "current": {303 "ratio": 1.14,304 "ratio_percentile": 18.7,305 "zone": "bottom",306 "bottom_threshold": 1.16,307 "top_threshold": 2.45308 },309 "history_analogs": {310 "bottom_event_dates": ["2010-08-06", "2016-01-29", "2020-03-20"],311 "forward_metal_returns": {312 "252": {"count": 3, "median": 0.42, "mean": 0.39, "win_rate": 1.0, "worst": 0.18},313 "504": {"count": 3, "median": 0.71, "mean": 0.66, "win_rate": 1.0, "worst": 0.31}314 }315 },316 "scenarios": {317 "target": "return_to_top",318 "target_ratio": 2.45,319 "miner_multiplier_if_metal_flat": 2.15,320 "metal_multiplier_if_miner_flat": 0.46,321 "metal_drop_pct_if_miner_flat": 0.54322 },323 "summary": "銀礦股價 / 銀價比率落在歷史低分位,顯示礦業股相對白銀偏便宜...",324 "notes": [325 "比率訊號衡量的是『相對估值』,不是單邊價格保證。",326 "礦業股與金屬可能同漲,但礦業股也可能因成本上升、地緣/政策風險、增發稀釋而落後。",327 "建議搭配:礦業股獲利率(成本曲線)、白銀實質利率/美元、投機部位(COT)、ETF 流量等做交叉驗證。"328 ]329}330```331332完整輸出結構見 `templates/output-json.md`。333</output_schema_summary>334335<success_criteria>336執行成功時應產出:337338- [ ] 當前比率與歷史分位數339- [ ] 估值區間判定(bottom/low/neutral/high/top)340- [ ] 歷史底部事件列表與去重341- [ ] 底部事件後的前瞻報酬統計(平均/中位/勝率/最差)342- [ ] 情境推演(礦業股需漲多少 / 白銀需跌多少)343- [ ] 結果輸出為指定格式(JSON 或 Markdown)344- [ ] 視覺化圖表輸出(若需要)345- [ ] 風險提示與後續研究建議346</success_criteria>