用 20 個因子幫你看清每支股票的「體質」,再用 AI 幫你寫出一份看得懂的分析報告。
想像你有一個全天候的股票分析助手:
- 每天自動掃描 80+ 支台股,從法人買賣、技術指標、國際市場到新聞情緒,一口氣看完
- 用 20 個面向幫股票打分數(0-100 分),而且會根據現在是多頭、空頭還是盤整,自動調整各面向的重要性
- AI 寫分析報告,告訴你「為什麼」給這個分數,可能的風險和機會在哪裡
- 風控自動把關,設停損、控倉位,避免單一股票賠太多
一句話版本: 數據收集 → 20 因子打分 → AI 寫報告 → 風控把關 → 推播警報
你輸入一支股票(如 2330 台積電)
│
▼
┌─ Phase 1: 收集資料(同時進行,約 5 秒)─────────────┐
│ • 股價走勢(FinMind API) │
│ • 三大法人買賣(證交所 T86) │
│ • 月營收數據(FinMind 營收 API) │
│ • 國際市場(費城半導體、台積電ADR、ASML) │
│ • 總經指標(VIX恐慌指數、美國公債、銅價) │
│ • 新聞 & 社群情緒(鉅亨網、PTT 等) │
│ • 基本面(本益比、股價淨值比、殖利率) │
└──────────────────────────────────────────────────┘
│
▼
┌─ Phase 2: 分析特徵 ─────────────────────────────┐
│ • 計算 20 個評分因子(全部用公式,不靠 AI 猜) │
│ • HMM 判斷現在是多頭/空頭/盤整 │
│ • ML 模型預測(LSTM + XGBoost 集成) │
│ • AI 從新聞中萃取情緒分數 │
└──────────────────────────────────────────────────┘
│
▼
┌─ Phase 3: 打分數 ───────────────────────────────┐
│ 根據市場狀態調整 20 因子權重 → 加權算出總分 │
│ → 判定: 強力買進 / 買進 / 持有 / 賣出 / 強力賣出 │
└──────────────────────────────────────────────────┘
│
▼
┌─ Phase 4: AI 寫分析報告 ─────────────────────────┐
│ Claude AI 根據所有分數寫出: │
│ 展望、主要驅動因素、風險、可能催化劑、關鍵價位 │
└──────────────────────────────────────────────────┘
│
▼
┌─ Phase 5-6: 風控 + 儲存 + 警報 ─────────────────┐
│ • 建議倉位大小(最多 20%) │
│ • 自動停損(追蹤式,只升不降) │
│ • 存入資料庫、發送警報 │
└──────────────────────────────────────────────────┘
系統用 20 個不同面向 分析每支股票,分成三類:
| 因子 | 權重 | 白話說明 | 資料來源 |
|---|---|---|---|
| 外資動向 | 11% | 外資最近在買還是賣?買了多少? | 證交所 T86 |
| 技術訊號 | 8% | RSI、KD、MACD 等指標是否出現買賣訊號 | 股價計算 |
| 短期動能 | 7% | 最近 5 天股價是往上還是往下? | 股價計算 |
| 投信動向 | 5% | 投信(基金公司)在買還是賣? | 證交所 T86 |
| 量能異常 | 4% | 成交量突然放大或萎縮? | 股價計算 |
| 散戶情緒 | 4% | 融資增加(散戶看多)還是融券增加(看空)? | FinMind |
| 因子 | 權重 | 白話說明 | 資料來源 |
|---|---|---|---|
| 趨勢動能 | 7% | 20 天趨勢是上升還是下降? | 股價計算 |
| 營收動能 | 4% | 最新月營收比去年同期成長還是衰退? | FinMind 月營收 |
| 法人同步 | 4% | 外資和投信是否同時在買?(同步買=強訊號) | 證交所 T86 |
| 波動狀態 | 4% | 股價最近是穩定還是劇烈震盪? | 股價計算 |
| 新聞情緒 | 3% | 新聞報導偏正面還是負面? | AI 萃取 |
| 國際連動 | 3% | 費城半導體、台積電 ADR、ASML 走勢如何? | yfinance |
| 獲利品質 | 4% | 毛利率是在改善還是惡化? | yfinance 季報 |
| 類股輪動 | 3% | 資金正在流入還是流出這個產業? | T86 + TWSE 產業指數 |
| 因子 | 權重 | 白話說明 | 資料來源 |
|---|---|---|---|
| ML 預測 | 7% | 機器學習模型認為未來走勢如何? | LSTM + XGBoost |
| 基本面 | 6% | 本益比合理嗎?殖利率高嗎?ROE 好嗎? | FinMind P/E → yfinance 備援 |
| 流動性 | 4% | 好不好買賣?(成交量太低的股票風險高) | 股價計算 |
| 總經風險 | 4% | VIX 恐慌指數、殖利率曲線、銅價、匯率走勢 | yfinance (含備援) |
| 出口動能 | 4% | 台灣整體出口趨勢(用 EWT / 0050 追蹤) | yfinance (含備援) |
| 美製造業 | 4% | 美國製造業景氣(影響台灣電子出口) | yfinance (含備援) |
系統會用 HMM(隱馬可夫模型)判斷現在的市場狀態,自動調整權重:
| 狀態 | 策略 | 舉例 |
|---|---|---|
| 🟢 多頭 | 加重短期動能,降低防禦因子 | 技術訊號、趨勢動能權重提高 |
| 🔴 空頭 | 加重風控因子,降低追漲因子 | VIX、波動、外資流向權重提高 |
| 🟡 盤整 | 均衡權重,注重類股輪動 | 技術訊號、類股輪動權重提高 |
系統從多個外部服務抓資料,任何一個掛掉都不應該讓整個分析失效。
| 主要來源 | 如果掛了... | 備援來源 |
|---|---|---|
| yfinance 費城半導體 (^SOX) | → | SOXX ETF |
| yfinance 台積電 ADR (TSM) | → | 2330.TW(本地) |
| yfinance EWT 台灣 ETF | → | 0050.TW 元大台灣50 |
| yfinance VIX 恐慌指數 | → | VIXY ETF |
| yfinance XLI 工業 ETF | → | IYJ 工業 ETF |
| yfinance 美 10Y 公債 (^TNX) | → | TLT 債券 ETF |
| yfinance 基本面 (P/E) | → | FinMind 每日 P/E(台灣本地 API) |
原則:FinMind(台灣本地 API)優先,yfinance(國際)為輔助或備援。
| 用途 | AI 模型 | 呼叫次數 | 說明 |
|---|---|---|---|
| 從新聞萃取情緒分數 | Claude Haiku(快又便宜) | 1 次 | 把新聞標題轉成 0-1 分的情緒分數 |
| 寫分析報告 | Claude Sonnet(聰明) | 1 次 | 用所有數據寫出人類看得懂的分析 |
| 總計 | 2 次 | 成本約 NT$1-2 / 次分析 |
💡 技術分析、籌碼分析全部由演算法(20 因子系統)完成。AI 只負責「萃取情緒」和「寫報告」——這才是 AI 擅長的事。
| 研究 | 發現 |
|---|---|
| FINSABER (KDD 2026) | LLM 策略的優勢在長期回測中完全消失 |
| StockBench (2025) | 最好的 AI 交易策略僅比「買了不動」多賺 1.9% |
| TradeTrap (2025) | AI 交易決策容易被操縱(記憶攻擊成功率 78%) |
| 模型 | 擅長什麼 | 說明 |
|---|---|---|
| LSTM + Attention | 捕捉時間序列規律 | 雙層 LSTM + 注意力機制,看歷史走勢預測 |
| XGBoost | 處理各種數據特徵 | 500 棵決策樹,處理法人籌碼等表格數據 |
| Stacking Ensemble | 綜合兩者優勢 | 用 Ridge 回歸把兩個模型的預測合併 |
防止作弊的機制:
- Triple Barrier 標籤:不只看漲跌,還看「什麼時候到達目標」
- PurgedTimeSeriesSplit:訓練時確保不會「偷看未來的資料」
- Meta-Labeling:用額外的模型評估「這次預測有多可信」
| 規則 | 限制 | 白話說明 |
|---|---|---|
| 單一倉位上限 | 20% | 再看好也不能全押一支股票 |
| 回撤熔斷 | 15% | 虧損超過 15% 就暫停交易,先冷靜 |
| 追蹤式停損 | 2.5×ATR | 股價漲,停損點跟著往上移(只升不降) |
| 體制轉換減倉 | 自動 | 市場從多頭轉空頭時,自動減少持股 |
| 單筆停損 | ≤ 8% | 單筆交易最多虧 8% |
| 風險報酬比 | ≥ 2:1 | 預期報酬至少是風險的 2 倍才進場 |
| 類別 | 技術 |
|---|---|
| 後端 API | FastAPI + SSE 即時串流 |
| 前端介面 | Next.js 15 + TailwindCSS + Recharts 圖表 |
| 機器學習 | PyTorch (LSTM), XGBoost, scikit-learn, hmmlearn |
| AI 助手 | Anthropic Claude (Haiku + Sonnet) |
| 台股資料 | FinMind API, 證交所 T86 API, yfinance (含備援) |
| 資料庫 | SQLAlchemy 2.x + SQLite |
| 自動排程 | APScheduler(每天 15:00 掃描、15:30 深度分析、16:00 因子追蹤) |
| 投資組合 | CVXPY 最佳化(Mean-Variance) |
- Python >= 3.12
- Node.js >= 18(前端用)
- FinMind 帳號(免費,用來抓台股資料)
- Anthropic API Key(AI 分析用)
git clone https://github.com/nrps9909/twstock-predictor.git
cd twstock-predictor
# Python 套件
uv sync # 推薦用 uv
# 或
pip install -e .
# 前端
cd web && npm install && cd ..cp .env.example .env打開 .env 填入:
FINMIND_TOKEN=你的FinMind_token
ANTHROPIC_API_KEY=你的Claude_API_key# 後端 API(http://localhost:8000)
uvicorn api.main:app --reload --port 8000
# 前端介面(http://localhost:3000)
cd web && npm run devuv sync --locked --extra dev
uv run --no-sync python -m pytest tests -qtwstock-predictor/
├── api/ # 後端 API
│ ├── main.py # 啟動入口 + 每日自動排程
│ ├── routers/ # API 路由(10 個端點)
│ └── services/ # 核心商業邏輯
│ ├── stock_analysis_service.py # 統一 6 階段分析管線
│ ├── market_service.py # 20 因子評分引擎 + 備援機制
│ ├── auto_pipeline_service.py # 每日自動深度分析
│ ├── alert_service.py # 智慧警報(5 類型 × 3 嚴重度)
│ └── market_intel_service.py # 市場情報彙整
├── web/ # 前端介面 (Next.js)
│ ├── app/ # 頁面(市場總覽、歷史紀錄)
│ └── components/ # UI 元件(圖表、分析面板)
├── src/ # 核心分析邏輯
│ ├── agents/ # AI Agent(情緒萃取 + 報告生成)
│ ├── analysis/ # 特徵工程(43 維特徵、技術指標)
│ ├── models/ # ML 模型(LSTM、XGBoost、集成)
│ ├── risk/ # 風險管理(停損、熔斷)
│ ├── data/ # 資料抓取(FinMind、證交所、yfinance)
│ │ ├── stock_fetcher.py # 股價 + P/E + 營收(FinMind)
│ │ ├── twse_scanner.py # 法人買賣超 + 產業指數(證交所)
│ │ └── sentiment_crawler.py # 新聞 & PTT 爬蟲
│ ├── db/ # 資料庫 ORM
│ ├── pipeline/ # 自動重訓練觸發
│ └── monitoring/ # 週報 / 月報產生
├── tests/ # 200+ 自動化測試
├── models/ # 訓練好的模型檔案
└── data/ # SQLite 資料庫
| 方法 | 路徑 | 說明 |
|---|---|---|
| GET | /api/market/scan |
全市場掃描(即時串流) |
| GET | /api/market/overview |
市場總覽(大盤概況) |
| GET | /api/market/recommendations |
推薦排名(依總分排序) |
| POST | /api/market/analyze/{stock_id} |
個股深度分析(即時串流) |
| GET | /api/market/pipeline |
查詢分析結果 |
| POST | /api/market/pipeline/{stock_id} |
手動觸發分析 |
| POST | /api/market/pipeline/batch |
批次分析多支股票 |
| GET | /api/market/intel/* |
市場情報(新聞 + 法人) |
| GET | /api/market/factor-ic |
因子預測力追蹤 (IC) |
| GET/POST | /api/alerts/* |
警報管理 |
預設追蹤 80+ 支台股,涵蓋 8 大產業:
| 產業 | 代表個股 |
|---|---|
| 半導體 | 2330 台積電、2454 聯發科、3711 日月光 |
| 電子 | 2317 鴻海、2382 廣達、2308 台達電 |
| 金融 | 2881 富邦金、2882 國泰金、2886 兆豐金 |
| 電信 | 2412 中華電、3045 台灣大 |
| 傳產 | 1301 台塑、2002 中鋼 |
| 航運 | 2603 長榮、2609 陽明 |
| 生技 | 6446 藥華藥、4743 合一 |
| 綠能 | 6488 環球晶、3481 群創 |
可在
STOCK_SECTOR字典中自行新增股票。
提交 Issue 或 Pull Request 前,請先閱讀 CONTRIBUTING.md。若發現可能造成未授權存取、資料外洩或供應鏈風險的漏洞,請依 SECURITY.md 使用 GitHub 私人漏洞回報,避免公開敏感細節。
MIT