從 +211% 年化到 −8% 年化 — 一個散戶做量化研究的失敗報告
這是一個誠實記錄失敗的公開量化研究專案。
2026 年 4 月,我用 9 天時間建了一套包含 142 個特徵、LightGBM + SHAP + FinBERT 情緒引擎、規則式 regime gate 的台股主動策略系統。
頭條 backtest 數字:年化 +211.8%、Sharpe 3.99。
修正執行偏差後:年化 −8% 到 +5%、Sharpe 常常為負。
在三輪嚴格 pre-commit 紀律的實驗下,我系統性地證明:以我當前的資源和技術、在 2018-2026 的歷史時段、在散戶實務執行條件下,我無法做出穩定超越 0050 Buy&Hold 的主動策略。
最終決定:100% 0050 Buy&Hold 就好。
這份 repo 完整公開了整個失敗過程 — 程式碼、資料設計、三輪實驗報告、十層 Alpha 死亡模型、以及給未來研究者的 break-even alpha 公式。
如果你對量化交易感興趣、正在學 ML 做交易、或已經做了但還沒賺錢 — 這兩份文件是我在這 9 天裡最想告訴過去的自己的話。
| 文件 | 內容 |
|---|---|
article/ |
公開文章(給一般讀者) |
docs/PROJECT_FINAL_REPORT.md |
完整技術結論報告(三輪實驗整合 + 10 層模型 + 文獻) |
docs/ROUND_1_VERDICT.md |
Round 1:日頻 ML + ETF 輪動 + Revenue Event 三條路徑失敗 |
docs/ROUND_2_DESIGN.md / ROUND_2_VERDICT.md |
Round 2:Revenue Event + TTM 平滑(反直覺失敗) |
docs/ROUND_3_DESIGN.md |
Round 3:90/10 Core-Satellite + Vol Targeting |
| 模組 | 說明 |
|---|---|
data/ |
FinMind + yfinance + TWSE 資料管道 |
features/ |
142 個特徵(技術、跨市場、籌碼、導數、情緒) |
models/ |
LightGBM ranker + 機率校準 + SHAP 篩選 |
strategy/ |
Regime gate + 停損 + 資金管理 |
backtest/ |
Walk-forward 回測(6 個版本,每輪一個) |
scripts/ |
每個 round 的 CLI 入口 |
main.py |
Live 每日預測主入口 |
output/reports/ 保留了每輪的 backtest 完整報告 — 數字是真的,包括所有失敗。
這是本專案最重要的產出。三輪實驗 + 三方交叉驗證(Claude + Codex + web-search subagent)整合出的通用診斷框架:
| # | 失敗層 | 核心機制 | 我的案例 |
|---|---|---|---|
| 1 | 執行摩擦 | Raw alpha < TC + slippage | Round 1 Daily ML |
| 2 | Universe 相關性 | 選股宇宙過於類似 benchmark | Round 1 ETF |
| 3 | 波動承受度 | Alpha 真實但 MaxDD 超出承受 | Round 1 Revenue Event |
| 4 | 訊號處理 | Smoothing 反而洗掉 edge | Round 2 TTM |
| 5 | 部位調節 | Vol targeting + hard stops 讓衛星休眠 | Round 3 Core-Satellite |
| 6 | 資料真實性 | Look-ahead / survivorship | 初期 +211% 假象 |
| 7 | Alpha Decay | 已發表 anomaly 衰退 32-58% | 動能因子 |
| 8 | Multiple Testing | N 次試誤致 deflated SR 下修 | 累積 20+ 實驗 |
| 9 | Regime Shift | 2020/2022/2024 alpha 符號不同 | 全時段 |
| 10 | 容量/擁擠 | AUM 上去後滑價非線性惡化 | 未直接驗證 |
完整版本含學術文獻:docs/PROJECT_FINAL_REPORT.md
break_even_alpha = benchmark_return + TC + slippage + √(2 ln N) × σ_SR
以散戶做台股為例:
benchmark_return = 20% (0050 長期均值)
TC = 0.585% (來回)
slippage = 0.3% (小資金估)
N = 20 (你試過的策略數)
σ_SR = 0.5
√(2 ln 20) ≈ 2.45
break_even_alpha ≈ 22.1%
意義:如果你試了 20 個策略,最好的那個必須年化達到 22.1% 才剛好越過多重檢定的最低科學門檻。要真正有 alpha 證據,還要 × 3 ≈ 66%。
公式出處:Bailey & López de Prado 2014 的 Deflated Sharpe Ratio。
「若 alpha 只能在忽略成本、容量與風控時成立,它不是可部署優勢,只是樣本內現象。」
「一旦需要事後改參數才能過關,該淘汰的是策略,不是修改敘事。」
「下次動手寫 ranker 之前,先計算 break-even alpha。若估不到 3 倍這個數字,關掉 IDE,加碼 0050。」
git clone git@github.com:Zachariah9420/the-0050-project.git
cd the-0050-project
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt至 FinMind 免費註冊取得 token,然後:
# Linux/macOS
export FINMIND_TOKEN="your_token_here"
# Windows PowerShell
$env:FINMIND_TOKEN = "your_token_here"或建立 .env 檔案(已在 .gitignore):
FINMIND_TOKEN=your_token_here
python main.py --download-only# Round 1a: 日頻 ML (hold=10)
python main.py --backtest-ranker --start 2018-01-01 --end 2026-04-15 --hold 10
# Round 1b: ETF 輪動
python scripts/run_etf_rotation.py
# Round 1c: Revenue Event YoY
python scripts/run_revenue_rotation.py
# Round 2: TTM + filter
python scripts/run_revenue_round2.py
# Round 3: Core-Satellite
python scripts/run_core_satellite.py所有 backtest 會輸出到 output/reports/。
這不是投資建議。
本 repo 記錄的是一個失敗的研究專案。所有程式、分析、結論均以「現狀」提供,僅供教育與研究目的。
作者明確得出「100% 0050 Buy&Hold 是當前最佳配置」的結論 — 這是個人研究發現,不是給任何人的投資建議。
過去績效不保證未來表現。做任何投資決策前,請:
- 自己研究
- 諮詢合格的理財顧問
- 清楚了解風險承受度
如果你:
- 發現了邏輯漏洞
- 想分享你自己的量化失敗/成功經驗
- 對十層模型有補充
- 有能打敗 0050 的想法想試驗
歡迎開 Issue 或直接聯絡。
這個 repo 的目的不是終結討論,是開啟一個誠實的對話。
文章、程式碼、分析報告都採用 Creative Commons Attribution 4.0 International License。
你可以:轉載、翻譯、引用、商業使用 唯一要求:註明來源(作者 + 本 repo 連結)
- Claude (Anthropic) — 專案主要協作 AI,9 天的研究夥伴
- Codex (OpenAI) — 獨立 AI reviewer,挑戰了多個錯誤解讀並重跑資料驗證
- Web-search subagent — 帶入學術文獻外部觀點
- FinMind — 提供免費台股資料 API
- Marcos López de Prado — 《Advances in Financial Machine Learning》一書影響整個專案的研究紀律
- Campbell Harvey — 他 2017 AFA Presidential Address 是這個專案靈魂的學術源頭
作者:Zachariah Liu 專案狀態:正式結案(2026-04-21) 最終建議:100% 0050 Buy&Hold
研究者的勝利不是找到 alpha,是在 pre-commit 紀律下保持誠實。