Zeberg–Salomon 模型將市場簡化為兩種狀態:
- RISK_ON: 持有股票(SPY),景氣擴張期
- RISK_OFF: 持有長債(TLT),景氣收縮期
切換邏輯基於「領先指標先轉弱,同時指標後確認」的景氣循環規律。
| 類型 |
作用 |
典型成分 |
領先時間 |
| Leading |
預警 |
殖利率曲線、新訂單、房市許可 |
6-12 月 |
| Coincident |
確認 |
就業、工業生產、實質收入 |
同步 |
合成方式:
- 各序列做 transform(yoy/mom/diff)
- 統一方向(direction +1/-1)
- Rolling z-score 標準化
- EMA 平滑
- 加權合成
Iceberg Event: LeadingIndex < iceberg_threshold
→ 預警:景氣開始轉弱
→ 搭配「領先指標下降」+ 可選「市場亢奮」濾鏡
Sinking Event: CoincidentIndex < sinking_threshold
→ 確認:實體經濟收縮
→ 通常在 Iceberg 之後數月發生
狀態機邏輯:
- RISK_ON → RISK_OFF:Iceberg 連續確認 + 斜率為負
- RISK_OFF → RISK_ON:領先指標回升超過 (threshold + hysteresis)
本 skill 使用無需 API key 的資料來源:
- FRED CSV:
https://fred.stlouisfed.org/graph/fredgraph.csv?id={SERIES_ID}
- Yahoo Finance:
yfinance 套件抓取 SPY, TLT, VIX
腳本位於 scripts/ 目錄,可直接執行。
- 建構指標:從 FRED 數據合成 LeadingIndex 與 CoincidentIndex
- 偵測事件:識別「冰山」(領先轉弱)與「下沉」(同時確認)
- 切換訊號:產生 RISK_ON ↔ RISK_OFF 切換事件
- 回測績效:計算累積報酬、MaxDD、CAGR、與 benchmark 比較
輸出:切換事件清單、指標時間序列、回測摘要、診斷資訊。
最快的方式:執行預設回測
cd skills/zeberg-salomon-rotator
pip install pandas numpy yfinance pandas-datareader # 首次使用
python scripts/rotator.py --quick
輸出範例:
{
"state": "RISK_ON",
"latest_indices": {"LeadingIndex": 0.41, "CoincidentIndex": 0.22},
"iceberg_event": false,
"sinking_event": false,
"last_switch": {"date": "2023-06-30", "action": "EXIT_LONG_BOND_ENTER_EQUITY"}
}
完整回測:
python scripts/rotator.py --start 2000-01-01 --end 2026-01-01 --output result.json
- 快速檢查 - 查看目前的景氣狀態與最新指標
- 完整回測 - 執行完整的歷史回測與績效分析
- 視覺化圖表 - 生成多面板回測結果圖表
- 監控模式 - 設定持續監控與切換警報
- 方法論學習 - 了解 Zeberg-Salomon 模型的邏輯
請選擇或直接提供分析參數。
路由後,閱讀對應文件並執行。
方法論: references/methodology.md
- Zeberg-Salomon 模型概念
- 冰山/下沉事件定義
- 兩態切換邏輯
資料來源: references/data-sources.md
- FRED 系列代碼(領先/同時)
- Yahoo Finance 資產代碼
- 數據頻率與對齊
輸入參數: references/input-schema.md
| Script |
Command |
Purpose |
| rotator.py |
--quick |
快速檢查當前狀態 |
| rotator.py |
--start DATE --end DATE |
完整回測 |
| visualize.py |
-i result.json -o chart.png |
生成視覺化圖表 |
| fetch_data.py |
--series T10Y3M,PAYEMS |
抓取 FRED 資料 |
|
|
|
核心參數
| 參數 |
類型 |
預設值 |
說明 |
| start_date |
string |
2000-01-01 |
回測起始日 |
| end_date |
string |
today |
回測結束日 |
| freq |
string |
M |
頻率(M=月) |
| equity_proxy |
string |
SPY |
風險資產代理 |
| bond_proxy |
string |
TLT |
長債代理 |
門檻參數
| 參數 |
類型 |
預設值 |
說明 |
| iceberg_threshold |
number |
-0.3 |
領先指標門檻 |
| sinking_threshold |
number |
-0.5 |
同時指標門檻 |
| confirm_periods |
int |
2 |
連續確認期數 |
| hysteresis |
number |
0.15 |
進出場間距 |
完整參數定義見 references/input-schema.md。
完整輸出結構見 templates/output-json.md。
1---2name: zeberg-salomon-rotator3description: 用領先和同時指標建構景氣模型,並判讀兩種景氣階段:景氣擴張期 (Risk-On) 與景氣收縮期 (Risk-Off),並根據理論給出 "撞冰山" 與 "下沉" 事件訊號。4---5
6<essential_principles>
7
8<principle name="two_state_model">
9**兩態切換模型核心**
10
11Zeberg–Salomon 模型將市場簡化為兩種狀態:
12- **RISK_ON**: 持有股票(SPY),景氣擴張期
13- **RISK_OFF**: 持有長債(TLT),景氣收縮期
14
15切換邏輯基於「領先指標先轉弱,同時指標後確認」的景氣循環規律。
16</principle>
17
18<principle name="leading_coincident">
19**領先 vs 同時指標**
20
21| 類型 | 作用 | 典型成分 | 領先時間 |
22|------------|------|------------------------------|----------|
23| Leading | 預警 | 殖利率曲線、新訂單、房市許可 | 6-12 月 |
24| Coincident | 確認 | 就業、工業生產、實質收入 | 同步 |
25
26**合成方式**:
271. 各序列做 transform(yoy/mom/diff)
282. 統一方向(direction +1/-1)
293. Rolling z-score 標準化
304. EMA 平滑
315. 加權合成
32</principle>
33
34<principle name="iceberg_sinking">
35**冰山事件 vs 下沉事件**
36
37```
38Iceberg Event: LeadingIndex < iceberg_threshold
39 → 預警:景氣開始轉弱
40 → 搭配「領先指標下降」+ 可選「市場亢奮」濾鏡
41
42Sinking Event: CoincidentIndex < sinking_threshold
43 → 確認:實體經濟收縮
44 → 通常在 Iceberg 之後數月發生
45```
46
47**狀態機邏輯**:
48- RISK_ON → RISK_OFF:Iceberg 連續確認 + 斜率為負
49- RISK_OFF → RISK_ON:領先指標回升超過 (threshold + hysteresis)
50</principle>
51
52<principle name="data_access">
53**資料取得方式**
54
55本 skill 使用**無需 API key** 的資料來源:
56- **FRED CSV**: `https://fred.stlouisfed.org/graph/fredgraph.csv?id={SERIES_ID}`
57- **Yahoo Finance**: `yfinance` 套件抓取 SPY, TLT, VIX
58
59腳本位於 `scripts/` 目錄,可直接執行。
60</principle>
61
62</essential_principles>
63
64<objective>
65實作 Zeberg–Salomon 兩態輪動策略:
66
671. **建構指標**:從 FRED 數據合成 LeadingIndex 與 CoincidentIndex
682. **偵測事件**:識別「冰山」(領先轉弱)與「下沉」(同時確認)
693. **切換訊號**:產生 RISK_ON ↔ RISK_OFF 切換事件
704. **回測績效**:計算累積報酬、MaxDD、CAGR、與 benchmark 比較
71
72輸出:切換事件清單、指標時間序列、回測摘要、診斷資訊。
73</objective>
74
75<quick_start>
76
77**最快的方式:執行預設回測**
78
79```bash
80cd skills/zeberg-salomon-rotator
81pip install pandas numpy yfinance pandas-datareader # 首次使用
82python scripts/rotator.py --quick
83```
84
85輸出範例:
86```json
87{
88 "state": "RISK_ON",
89 "latest_indices": {"LeadingIndex": 0.41, "CoincidentIndex": 0.22},
90 "iceberg_event": false,
91 "sinking_event": false,
92 "last_switch": {"date": "2023-06-30", "action": "EXIT_LONG_BOND_ENTER_EQUITY"}
93}
94```
95
96**完整回測**:
97```bash
98python scripts/rotator.py --start 2000-01-01 --end 2026-01-01 --output result.json
99```
100
101</quick_start>
102
103<intake>
104需要進行什麼操作?
105
1061. **快速檢查** - 查看目前的景氣狀態與最新指標
1072. **完整回測** - 執行完整的歷史回測與績效分析
1083. **視覺化圖表** - 生成多面板回測結果圖表
1094. **監控模式** - 設定持續監控與切換警報
1105. **方法論學習** - 了解 Zeberg-Salomon 模型的邏輯
111
112**請選擇或直接提供分析參數。**
113</intake>
114
115<routing>
116| Response | Action |
117|-------------------------------|---------------------------------------------|
118| 1, "快速", "quick", "check" | 執行 `python scripts/rotator.py --quick` |
119| 2, "回測", "backtest", "full" | 閱讀 `workflows/backtest.md` 並執行 |
120| 3, "視覺化", "chart", "plot" | 閱讀 `workflows/visualize.md` 並執行 |
121| 4, "監控", "monitor", "alert" | 閱讀 `workflows/monitor.md` 並執行 |
122| 5, "學習", "方法論", "why" | 閱讀 `references/methodology.md` |
123| 提供參數 (如日期範圍) | 閱讀 `workflows/backtest.md` 並使用參數執行 |
124
125**路由後,閱讀對應文件並執行。**
126</routing>
127
128<directory_structure>
129```
130zeberg-salomon-rotator/
131├── SKILL.md # 本文件(路由器)
132├── skill.yaml # 前端展示元數據
133├── manifest.json # 技能元數據
134├── workflows/
135│ ├── backtest.md # 完整回測工作流
136│ ├── visualize.md # 視覺化工作流
137│ ├── monitor.md # 持續監控工作流
138│ └── analyze.md # 深度分析工作流
139├── references/
140│ ├── data-sources.md # FRED 系列代碼與資料來源
141│ ├── methodology.md # Zeberg-Salomon 方法論解析
142│ └── input-schema.md # 完整輸入參數定義
143├── templates/
144│ ├── output-json.md # JSON 輸出模板
145│ └── output-markdown.md # Markdown 報告模板
146└── scripts/
147 ├── rotator.py # 主輪動腳本
148 ├── visualize.py # 視覺化繪圖工具
149 └── fetch_data.py # 數據抓取工具
150```
151</directory_structure>
152
153<reference_index>
154
155**方法論**: references/methodology.md
156- Zeberg-Salomon 模型概念
157- 冰山/下沉事件定義
158- 兩態切換邏輯
159
160**資料來源**: references/data-sources.md
161- FRED 系列代碼(領先/同時)
162- Yahoo Finance 資產代碼
163- 數據頻率與對齊
164
165**輸入參數**: references/input-schema.md
166- 完整參數定義
167- 預設值與建議範圍
168
169</reference_index>
170
171<workflows_index>
172| Workflow | Purpose | 使用時機 |
173|--------------|----------------|------------------|
174| backtest.md | 完整歷史回測 | 需要績效分析時 |
175| visualize.md | 生成視覺化圖表 | 需要圖表展示時 |
176| monitor.md | 持續監控狀態 | 日常監控或警報 |
177| analyze.md | 深度指標分析 | 理解當前市場狀態 |
178</workflows_index>
179
180<templates_index>
181| Template | Purpose |
182|--------------------|-------------------|
183| output-json.md | JSON 輸出結構定義 |
184| output-markdown.md | Markdown 報告模板 |
185</templates_index>
186
187<scripts_index>
188| Script | Command | Purpose |
189|---------------|-------------------------------|------------------|
190| rotator.py | `--quick` | 快速檢查當前狀態 |
191| rotator.py | `--start DATE --end DATE` | 完整回測 |
192| visualize.py | `-i result.json -o chart.png` | 生成視覺化圖表 |
193| fetch_data.py | `--series T10Y3M,PAYEMS` | 抓取 FRED 資料 |
194</scripts_index>
195
196<input_schema_summary>
197
198**核心參數**
199
200| 參數 | 類型 | 預設值 | 說明 |
201|--------------|--------|------------|--------------|
202| start_date | string | 2000-01-01 | 回測起始日 |
203| end_date | string | today | 回測結束日 |
204| freq | string | M | 頻率(M=月) |
205| equity_proxy | string | SPY | 風險資產代理 |
206| bond_proxy | string | TLT | 長債代理 |
207
208**門檻參數**
209
210| 參數 | 類型 | 預設值 | 說明 |
211|-------------------|--------|--------|--------------|
212| iceberg_threshold | number | -0.3 | 領先指標門檻 |
213| sinking_threshold | number | -0.5 | 同時指標門檻 |
214| confirm_periods | int | 2 | 連續確認期數 |
215| hysteresis | number | 0.15 | 進出場間距 |
216
217完整參數定義見 `references/input-schema.md`。
218
219</input_schema_summary>
220
221<output_schema_summary>
222```json
223{
224 "skill": "zeberg-salomon-rotator",
225 "as_of": "2026-01-14",
226 "state": "RISK_ON",
227 "latest_indices": {
228 "LeadingIndex": 0.41,
229 "CoincidentIndex": 0.22,
230 "iceberg_event": false,
231 "sinking_event": false
232 },
233 "switch_events": [...],
234 "backtest_summary": {
235 "cagr": 0.123,
236 "max_drawdown": -0.27,
237 "turnovers": 10
238 }
239}
240```
241
242完整輸出結構見 `templates/output-json.md`。
243</output_schema_summary>
244
245<success_criteria>
246執行成功時應產出:
247
248- [ ] 當前狀態(RISK_ON 或 RISK_OFF)
249- [ ] LeadingIndex 與 CoincidentIndex 數值
250- [ ] 冰山/下沉事件判定
251- [ ] 切換事件清單(含日期、原因)
252- [ ] 回測績效摘要(CAGR, MaxDD, 換手次數)
253- [ ] 與 benchmark 比較(買入持有、60/40)
254- [ ] 診斷資訊(各指標貢獻)
255- [ ] 視覺化圖表(可選,輸出至 `output/` 目錄)
256</success_criteria>