backsolve-miner-vs-metal-ratio-with-fundamentals
npx skills add https://github.com/fatfingererr/macro-skills --skill backsolve-miner-vs-metal-ratio-with-fundamentals
Agent 安装分布
Skill 文档
<essential_principles>
礦æ¥è¡/é屬广 ¼æ¯çå¯åè§£çºåå¤§åºæ¬é¢å åï¼
R_t â K à M_t à (1-L_t) à C_t à D_t
å ¶ä¸ï¼
- K: æ ¡æºå¸¸æ¸ï¼ç±è§æ¸¬å¼ä¼°è¨ï¼
- M_t: 忏å åï¼EV/EBITDAï¼
- (1-L_t): æ§æ¡¿å åï¼1 – NetDebt/EVï¼
- C_t: ææ¬å åï¼1 – AISC/S_tï¼
- D_t: ç¨éå åï¼Shares_base / Shares_tï¼
æ¤æè§£è®ãæ¯çè®åãæå¯æ¸å çéåè§£éã
å ¨ç¶æææ¬ï¼AISCï¼æ¯ç¤¦æ¥è¡ä¼°å¼çæ ¸å¿é© åï¼
| åªå ç´ | 便º | æ¹æ³ |
|---|---|---|
| 1 | MD&A / è²¡å ±é註 | ééµåæ½åï¼ãAISCããall-in sustainingã |
| 2 | å¹´å ±ç°¡å ± PDF | è§£æè¡¨æ ¼ï¼$/oz æ $/ounce |
| 3 | Proxy åç® | (OpCost + SustCapex + G&A – Byproduct) / Oz |
ç¶ç´æ¥æé²ä¸å¯å¾æï¼ä»¥ proxy åç®è£ç¼ºï¼è¨é aisc_method 以æ¨è¨»ä¾æºã
ç®æ¨ï¼çµ¦å®ç®æ¨æ¯ç R*ï¼å¦æ·å²é é¨ 1.7ï¼ï¼åæ¨éè¦åªäºå 忢件ã
å®å å忍ï¼åè¨å ¶ä»å åä¸è®ï¼åªèª¿æ´å®ä¸å å
M* = M_now à (R*/R_now) # éè¦ç忏
(1-L*) = (1-L_now) à (R*/R_now) # éè¦ç廿§æ¡¿
C* = C_now à (R*/R_now) # éè¦çææ¬æ¹å â 忍 AISC*
D* = D_now à (R*/R_now) # éè¦çç¨éææ£
éå åçµåï¼ä»¥ç¶²æ ¼åèå¯è¡çµåï¼å¦åæ¸ +20% + ç½é -15%ï¼ã
èå¥ãæ¯çè½å ¥åºé¨åä½ãçæ·å²äºä»¶ï¼åçäºä»¶ç¶æçå大å åçæ ï¼
- AISC æ¯å¦ä¸åï¼ææ¬å£å
- NetDebt/EV æ¯å¦æ¡åï¼æ§æ¡¿å£å
- EV/EBITDA æ¯å¦å£ç¸®ï¼åæ¸å£å
- Shares æ¯å¦ä¸åï¼ç¨éå£å
æåãåªåå åè²¢ç»æå¤§ãï¼èå¥é© ååºé¨ç主å ã
éµå¾ªãçµæ§ååªå ãååï¼
- SEC XBRL (10-K/10-Q)ï¼ç´æ¥åæ¬ä½ï¼åµåãç¾éãè¡æ¸ãCFOãCapexï¼
- SEDAR+ (å æ¿å¤§)ï¼éç¤¦å ¬å¸å¸¸å¨å æ¿å¤§ä¸å¸
- å ¬å¸ IR å¹´å ±/MD&Aï¼è£é½ AISCãç¢éçéæ¨æºæ¬ä½
- ETF Holdingsï¼å®æ¹ CSV æ SEC N-PORT
æåæä½¿ç¨ Selenium 模æ¬äººé¡è¡çºï¼é¿å 被å°éã
</essential_principles>
- æ¸ææ´åï¼æå广 ¼ãETF æè¡ã財åå ±è¡¨ãçéæé²
- å åè¨ç®ï¼è¨ç® AISCãæ§æ¡¿ã忏ãç¨éå大å å
- æ¯çæè§£ï¼å»ºç« R_t â K à M à (1-L) à C à D è¿ä¼¼å¼
- éæª»åæ¨ï¼çµ¦å®ç®æ¨æ¯çï¼åæ¨éè¦çå åçµå
- äºä»¶ç ç©¶ï¼æ·å²åºé¨äºä»¶çå åé© ååæ
- 輸åºå ±åï¼çµæ§å JSON èå¯è® Markdown
ç®æ¨ç¨æ¶ï¼çå° SIL/ç½éæ¯ç極端æï¼æ³ç¨ãçå¯¦è²¡å ±ãé©èé© åå ç´ ã
<quick_start>
æå¿«çæ¹å¼ï¼ä½¿ç¨é è¨åæ¸åæ
cd skills/backsolve-miner-vs-metal-ratio-with-fundamentals
pip install pandas numpy yfinance matplotlib # 馿¬¡ä½¿ç¨
python scripts/fundamental_analyzer.py --quick
宿´åæï¼å«è²¡å ±æåï¼
python scripts/fundamental_analyzer.py \
--metal-symbol SI=F \
--miner-universe etf:SIL \
--region-profile us_sec \
--start-date 2015-01-01 \
--output result.json
çæè¦è¦ºåå表æ¿
python scripts/visualize_factors.py --quick --output output/
# 輸åº: output/sil_silver_factor_analysis_YYYY-MM-DD.png
è¦è¦ºåå表æ¿å å«åå颿¿ï¼
- æ¯çæéåºåï¼æ·å²èµ°å¢ + å使¸åéï¼åºé¨/é é¨ï¼
- å åé·éåï¼å大å åå¥åº·åº¦ä¸è¦½
- å åè©åé·æ¢åï¼ææ¬ãæ§æ¡¿ã忏ãç¨éåé è©å
- æ å¢ç±ååï¼åæ¸æ´å¼µ à ç½éè®åççµååæ
å ±å䏿¼²æ 墿¨¡æ¬
python scripts/scenario_path_simulator.py --quick --output output/
# 輸åº: output/scenario_path_YYYY-MM-DD.png + return_heatmap_YYYY-MM-DD.png
æ ¸å¿å ¬å¼ï¼ç¤¦æ¥è¡æ¼²å¹ = (1 + é广¼²å¹ ) à (Râ/Râ) – 1
èªè¨åæ¸ï¼
python scripts/scenario_path_simulator.py \
--silver-monthly 5 \ # é广¯ææ¼²å¹
5%
--ratio-start 1.10 \ # æ¯çèµ·é»
--ratio-end 1.20 \ # æ¯ççµé»
--months 6 \ # æ¨¡æ¬ 6 åæ
--heatmap # åæçæç±åå
輸åºç¯ä¾ï¼
{
"now": {
"metal_price": 94.4,
"miner_price": 103.4,
"ratio": 1.13,
"ratio_percentile": 0.111
},
"thresholds": {
"bottom_ratio": 1.20,
"top_ratio": 1.70,
"median_ratio": 1.51
},
"fundamentals_weighted": {
"aisc_usd_per_oz": 28.0,
"net_debt_to_ev": 0.25,
"ev_to_ebitda": 6.4,
"shares_yoy_change": 0.12
},
"factors_now": {
"cost_factor_C": 0.7034,
"leverage_factor_1_minus_L": 0.75,
"multiple_M": 6.4,
"dilution_discount_D": 0.89
},
"backsolve_to_top": {
"multiple_only_need": 9.1,
"deleverage_only_need_1_minus_L": 1.12,
"cost_only_implied_aisc": 15.6,
"dilution_only_need_D": 1.26
}
}
</quick_start>
- å¿«éåæ – 使ç¨é è¨åæ¸ï¼SIL / SI=Fï¼è¨ç®ç¶åå åçæ
- 宿´åæ – æåè²¡å ±ãè¨ç®å åãåæ¨éæª»
- å åæè§£ – æ·±å ¥äºè§£å大å åçè¨ç®é輯
- éæª»åæ¨ – 給å®ç®æ¨æ¯çï¼è¨ç®éè¦çå åçµå
- äºä»¶ç ç©¶ – æ·å²åºé¨äºä»¶çå åé© åæå
- æ¹æ³è«å¸ç¿ – äºè§£åç®éè¼¯èæ¸æä¾æº
- è¦è¦ºå – çæå颿¿å表æ¿å表
- å ±å䏿¼²æ å¢ – 模æ¬éå¹è礦æ¥è¡åæ¼²æçæ¯ä¾éä¿èè·¯å¾
è«é¸ææç´æ¥æä¾åæåæ¸ã
è·¯ç±å¾ï¼é±è®å°ææä»¶ä¸¦å·è¡ã
<directory_structure>
backsolve-miner-vs-metal-ratio-with-fundamentals/
âââ SKILL.md # æ¬æä»¶ï¼è·¯ç±å¨ï¼
âââ skill.yaml # å端å±ç¤ºå
æ¸æ
âââ manifest.json # æè½å
æ¸æ
âââ workflows/
â âââ analyze.md # 宿´åæå·¥ä½æµ
â âââ data-fetch.md # æ¸ææå工使µ
âââ references/
â âââ input-schema.md # 宿´è¼¸å
¥åæ¸å®ç¾©
â âââ data-sources.md # æ¸æä¾æºèªªæ
â âââ fundamental-factors.md # å大å åè¨ç®é輯
â âââ backsolve-math.md # 忍æ¸å¸å
¬å¼
âââ templates/
â âââ output-json.md # JSON è¼¸åºæ¨¡æ¿
â âââ output-markdown.md # Markdown å ±åæ¨¡æ¿
âââ scripts/
â âââ fundamental_analyzer.py # 主è¨ç®è
³æ¬
â âââ visualize_factors.py # è¦è¦ºåå表æ¿è
³æ¬
â âââ scenario_path_simulator.py # å
±å䏿¼²æ
墿¨¡æ¬å¨
âââ examples/
âââ sample-output.json # ç¯ä¾è¼¸åº
</directory_structure>
<reference_index>
è¼¸å ¥åæ¸: references/input-schema.md
- 宿´åæ¸å®ç¾©
- é è¨å¼è建è°ç¯å
- åæ¹æ³é¸é 說æ
æ¸æä¾æº: references/data-sources.md
- 广 ¼æ¸æï¼yfinance / stooq / alphavantageï¼
- è²¡å ±æ¸æï¼SEC EDGAR / SEDAR+ / å ¬å¸ IRï¼
- ETF æè¡ï¼å®æ¹ CSV / N-PORT / æå URLï¼
å åè¨ç®: references/fundamental-factors.md
- AISC ææ¬å å
- æ§æ¡¿å å
- 忏å å
- ç¨éå å
忍æ¸å¸: references/backsolve-math.md
- å®å ååæ¨å ¬å¼
- éå åçµåç¶²æ ¼
- æ ¡æºå¸¸æ¸ä¼°è¨
</reference_index>
<workflows_index>
| Workflow | Purpose | ä½¿ç¨ææ© |
|---|---|---|
| analyze.md | 宿´åæ | éè¦æåè²¡å ±ä¸¦è¨ç®å å |
| data-fetch.md | æ¸ææå | äºè§£å¦ä½æå ETF æè¡èè²¡å ± |
| </workflows_index> |
<templates_index>
| Template | Purpose |
|---|---|
| output-json.md | JSON 輸åºçµæ§å®ç¾© |
| output-markdown.md | Markdown å ±åæ¨¡æ¿ |
| </templates_index> |
<scripts_index>
| Script | Command | Purpose |
|---|---|---|
| fundamental_analyzer.py | --quick |
å¿«éåæ SIL/SI=F |
| fundamental_analyzer.py | --miner-universe etf:SILJ |
èªè¨ç¤¦æ¥è¡ ETF |
| fundamental_analyzer.py | --backsolve-target 1.7 |
æå®åæ¨ç®æ¨æ¯ç |
| fundamental_analyzer.py | --event-study --min-separation 180 |
å·è¡äºä»¶ç ç©¶ |
| visualize_factors.py | --quick --output output/ |
çæå颿¿è¦è¦ºååè¡¨æ¿ |
| visualize_factors.py | --input result.json |
å¾ JSON çµæçæå表 |
| scenario_path_simulator.py | --quick |
å ±å䏿¼²æ å¢è·¯å¾æ¨¡æ¬ |
| scenario_path_simulator.py | --silver-monthly 5 --months 6 |
èªè¨éå¹ææ¼²å¹ èæ¨¡æ¬ææ¸ |
| scenario_path_simulator.py | --ratio-start 1.10 --ratio-end 1.20 |
èªè¨æ¯çèµ·çµé» |
| scenario_path_simulator.py | --heatmap |
åæçææ¶ççç±åå |
| </scripts_index> |
<input_schema_summary>
æ ¸å¿åæ¸
| 忏 | é¡å | é è¨å¼ | 說æ |
|---|---|---|---|
| metal_symbol | string | SI=F | é屬广 ¼ä»£ç¢¼ï¼SI=F ç½éãGC=F é»éï¼ |
| miner_universe | object | etf:SIL | 礦æ¥è¡/ETF å®ç¾© |
| region_profile | string | us_sec | ç£ç®¡èæé²ä¾æºï¼us_sec / canada_sedarï¼ |
| time_range.start | string | 5 å¹´å | åæèµ·é»ï¼YYYY-MM-DDï¼ |
| time_range.end | string | today | åæçµé» |
| time_range.frequency | string | weekly | 忍£é »çï¼daily/weekly/monthlyï¼ |
å åæ¹æ³é¸æ
| 忏 | é¡å | é è¨å¼ | 說æ |
|---|---|---|---|
| fundamental_methods.aisc | string | hybrid | AISC æ½åæ¹æ³ |
| fundamental_methods.leverage | string | net_debt_to_ev | æ§æ¡¿è¨ç®æ¹æ³ |
| fundamental_methods.multiple | string | ev_to_ebitda | 忏è¨ç®æ¹æ³ |
| fundamental_methods.dilution | string | weighted_avg_shares | ç¨éè¨ç®æ¹æ³ |
åä½é檻
| 忏 | é¡å | é è¨å¼ | 說æ |
|---|---|---|---|
| ratio_thresholds.bottom | float | 0.20 | åºé¨å使¸é檻 |
| ratio_thresholds.top | float | 0.80 | é é¨å使¸é檻 |
宿´åæ¸å®ç¾©è¦ references/input-schema.mdã
</input_schema_summary>
<output_schema_summary>
{
"skill": "backsolve_miner_vs_metal_ratio_with_fundamentals",
"inputs": {
"metal_symbol": "SI=F",
"miner_universe": {"type": "etf_holdings", "etf_ticker": "SIL"},
"region_profile": "us_sec"
},
"now": {
"metal_price": 94.4,
"miner_price": 103.4,
"ratio": 1.13,
"ratio_percentile": 0.111
},
"thresholds": {
"bottom_ratio": 1.20,
"top_ratio": 1.70,
"median_ratio": 1.51
},
"fundamentals_weighted": {
"aisc_usd_per_oz": 28.0,
"net_debt_to_ev": 0.25,
"ev_to_ebitda": 6.4,
"shares_yoy_change": 0.12
},
"factors_now": {
"cost_factor_C": 0.7034,
"leverage_factor_1_minus_L": 0.75,
"multiple_M": 6.4,
"dilution_discount_D": 0.89
},
"backsolve_to_top": {
"multiple_only_need": 9.1,
"deleverage_only_need_1_minus_L": 1.12,
"cost_only_implied_aisc": 15.6,
"dilution_only_need_D": 1.26,
"two_factor_grid_examples": [
{"multiple_up": 1.20, "metal_down": -0.15, "hits_top": true},
{"deleverage": -0.10, "multiple_up": 1.15, "hits_top": true}
]
},
"event_study": {
"bottom_events": [
{
"date": "2026-01-02",
"ratio": 1.13,
"aisc": 29.1,
"net_debt_to_ev": 0.27,
"ev_to_ebitda": 5.8,
"shares_yoy": 0.14,
"dominant_driver": "multiple_compression"
}
]
},
"summary": "æ¯çèæ¼æ·å²åºé¨ï¼ä¸»è¦é©
åçºåæ¸å£ç¸®...",
"notes": [
"AISC ä½¿ç¨ hybrid æ¹æ³åç®ï¼é¨åå
¬å¸çº proxy å¼",
"建è°äº¤åé©èï¼COT æåãETF æµéãç¾å
/實質å©ç"
]
}
宿´è¼¸åºçµæ§è¦ templates/output-json.mdã
</output_schema_summary>
<success_criteria> å·è¡æåææç¢åºï¼
- ç¶åæ¯çèæ·å²å使¸
- åå¤§åºæ¬é¢å åï¼AISCãæ§æ¡¿ã忏ãç¨éï¼
- æ¬éå 總å¾ççµåå å
- éæª»åæ¨çµæï¼å®å å + éå åçµåï¼
- æ·å²åºé¨äºä»¶çå åé© åæå
- çµæè¼¸åºçºæå®æ ¼å¼ï¼JSON æ Markdownï¼
- æ¸æä¾æºèæ¹æ³æ¨è¨»ï¼aisc_method çï¼
- é¢¨éªæç¤ºèå¾çºç 究建è°
- è¦è¦ºåå表æ¿ï¼PNG æ ¼å¼ï¼æªå嫿¥æï¼ </success_criteria>