← 返回 Blog

Quant Trading · 2026-04-24 · 12 min read

台股量化交易入門:從資料取得、策略回測到風險控管

台股量化交易不是先寫一個買賣規則,而是先建立一條可靠的資料與研究流程。從股票 universe、歷史 OHLCV、財報、法人籌碼、交易日曆,到回測、交易成本、風險控管與 production pipeline,每一層都會影響策略結果是否可信。

TL;DR

台股量化交易的基本流程可以拆成七步:定義股票 universe、取得資料、清洗與對齊資料、產生策略 signal、建立 portfolio、執行回測、檢查風險與偏誤。真正的關鍵不是某個單一模型,而是資料是否穩定、回測是否合理、風控是否明確。

如果資料來源不穩定、沒有處理除權息、沒有交易日曆、忽略交易成本或使用未來資料,回測績效很容易失真。對 developer、quant 和 AI agent workflow 來說,台股量化交易應該先從資料工程與可重複研究流程開始。

什麼是台股量化交易?

量化交易是把投資研究流程轉成可重複執行的資料與規則系統。它不代表一定是高頻交易,也不代表一定需要複雜模型。很多量化研究其實是中低頻策略,例如每日或每週更新一次資料,根據價格、成交量、財報、籌碼或產業資料產生 signal。

台股量化交易常見任務包括:

  • 量化選股
  • 動能策略
  • 均值回歸
  • 基本面因子
  • 法人籌碼因子
  • 產業輪動
  • ETF 成分股研究
  • 風險控管
  • 投資組合再平衡

量化交易的核心不是預測一定會漲,而是建立一套可以被資料驗證、可以回測、可以監控風險的研究流程。

如果你還不熟悉台股 API 的資料類型,可以先看 台股 API 完整指南

台股量化交易需要哪些資料?

台股量化交易需要的資料取決於策略類型。價格型策略可能只需要 OHLCV 和交易日曆;基本面策略會需要財報、月營收與公告日;籌碼策略會需要外資、投信、自營商買賣超。

資料類型常見欄位用途注意事項
股票基本資料symbol, name, market, industry, is_active建立股票 universe上市、上櫃、ETF、下市狀態要清楚區分
歷史股價date, open, high, low, close, volume技術分析、回測、報酬率計算需要處理除權息、停牌、下市與交易日曆
交易日曆date, is_trading_day, session排程、回測日期對齊國定假日、補班日、特殊休市都要處理
財報與基本面revenue, eps, roe, gross_margin, cash_flow基本面因子、估值模型報表期、公告日與資料可得時間不能混淆
法人籌碼foreign_net_buy, investment_trust_net_buy, dealer_net_buy籌碼因子、資金流向分析單位、方向、與成交量對齊要清楚
ETF 與指數constituents, weights, nav, premium_discountuniverse selection、產業輪動、ETF 分析成分股與權重更新頻率要明確
Corporate actionsex_date, dividend, split_ratio, adjustment_factor調整價格、長期回測adjusted price 與 unadjusted price 要明確標示

如果你要先理解歷史股價、K 線與 adjusted price,可以參考 台股歷史股價 API 設計

如果你要把月營收、EPS、ROE 與現金流整合成基本面因子,可以接著看 台股財報 API 教學

如果你要把外資、投信與自營商買賣超納入台股特色因子,可以接著看 三大法人買賣超 API

如果你要把 ETF holdings、指數成分股與產業分類納入 universe construction,可接著看 台股 ETF 與指數成分股 API

如果你想把基本面、技術面、籌碼與 universe 全部串成 multi-agent 研究架構,可接著看 AI Hedge Fund 台股版

從 universe selection 開始

量化研究的第一步通常不是選策略,而是定義股票 universe。Universe 是策略允許交易或研究的股票集合。

常見 universe 包括:

  • 全部上市股票
  • 全部上櫃股票
  • 特定產業股票
  • 大型股
  • ETF 成分股
  • 流動性足夠的股票
  • 排除下市、停牌或成交量過低的股票

Universe schema 示意

{
  "universe": "large_cap_twse",
  "as_of": "2026-04-24",
  "symbols": [
    {
      "symbol": "2330",
      "name": "台積電",
      "market": "twse",
      "industry": "半導體",
      "is_active": true
    }
  ],
  "filters": {
    "market": "twse",
    "min_average_turnover": 50000000,
    "exclude_suspended": true
  }
}

Universe 必須有明確的 `as_of` 日期。否則容易在回測中不小心使用未來才加入的成分股,造成 look-ahead bias。

策略訊號怎麼產生?

策略 signal 是把資料轉成可執行判斷的規則。Signal 不一定是買或賣,也可以是分數、排名、風險標籤或 portfolio weight。

Signal 類型使用資料範例注意事項
動能歷史股價、報酬率近 60 日報酬率排名需要處理除權息與極端值
均值回歸價格、波動率價格偏離均線後回歸需要控制風險與停損規則
基本面財報、月營收、EPS、ROE營收成長率與 ROE 排名必須使用公告日,避免 look-ahead bias
籌碼外資、投信、自營商買賣超投信連續買超天數需要和成交量、價格一起解讀
流動性成交量、成交金額排除成交金額過低股票低流動性股票回測容易失真

Signal response schema 示意

{
  "date": "2026-04-24",
  "symbol": "2330",
  "signal_type": "momentum",
  "score": 0.73,
  "rank": 12,
  "universe": "large_cap_twse",
  "data_used": [
    "daily_ohlcv",
    "adjusted_close"
  ]
}

Signal 最好是結構化資料,而不是只輸出一句自然語言。這樣才能接進 portfolio construction、risk manager 或 dashboard。

回測系統需要處理什麼?

回測是用歷史資料模擬策略規則的過程。好的回測不是只計算一條資金曲線,而是要清楚記錄每一次 signal、持倉、交易、成本、現金與風險曝險。

回測系統通常需要處理:

  • 資料載入
  • 日期對齊
  • signal 生成
  • 持倉計算
  • 交易執行邏輯
  • 交易成本
  • 滑價
  • 現金管理
  • 風險限制
  • 績效統計
  • 交易紀錄與 audit log

回測資料表設計示意

表格用途常見欄位
prices歷史價格date, symbol, open, high, low, close, volume
signals策略訊號date, symbol, signal, score, rank
positions每日持倉date, symbol, quantity, market_value, weight
orders交易指令date, symbol, side, quantity, reason
fills成交紀錄date, symbol, side, quantity, price, fee
portfolio投資組合狀態date, equity, cash, exposure, drawdown

交易成本、滑價與流動性

很多回測結果失真的原因,是忽略交易成本與滑價。尤其在台股中小型股或低成交量股票上,理論價格和實際可成交價格可能有明顯差距。

回測至少應該考慮:

  • 手續費
  • 交易稅
  • 買賣價差
  • 滑價
  • 成交量限制
  • 單日可交易比例
  • 是否允許零股或整股限制
  • 是否能在指定價格成交

交易成本模型示意

{
  "commission_rate": 0.001425,
  "transaction_tax_rate": 0.003,
  "slippage_bps": 10,
  "max_participation_rate": 0.05
}

上方只是資料結構示意,不代表實際費率設定。正式系統應依交易商品、券商、交易方式與策略需求設定成本模型。

風險控管與 position sizing

策略 signal 只回答想買什麼或分數是多少,但 portfolio 還需要回答買多少。這就是 position sizing 和風險控管的工作。

常見風控條件包括:

  • 單一股票最大權重
  • 單一產業最大曝險
  • 單日最大換手率
  • 最大回撤限制
  • 波動率目標
  • 流動性限制
  • 停損或再平衡規則
  • 現金比例
  • 投資組合集中度

Risk rule schema 示意

{
  "max_position_weight": 0.1,
  "max_sector_weight": 0.35,
  "max_daily_turnover": 0.2,
  "max_drawdown": 0.25,
  "min_average_turnover": 50000000,
  "rebalance_frequency": "monthly"
}

風控應該是策略流程的一部分,而不是回測結束後才補上的說明。否則策略可能在歷史資料上看起來有效,但實際上無法承受波動、集中風險或流動性限制。

常見回測偏誤

台股量化交易最常見的錯誤,不一定是模型錯,而是資料和回測設計有偏誤。

偏誤問題避免方式
Survivorship bias只回測目前仍存在的股票保留下市、下櫃與 inactive symbols
Look-ahead bias使用當時尚未公開的資料使用公告日、有效日與資料版本
Corporate actions bias未處理除權息造成報酬率失真使用 adjusted price 或 corporate actions endpoint
Data snooping反覆調參直到歷史績效好看使用 out-of-sample test 與 walk-forward validation
Liquidity bias假設低成交量股票也能大量成交加入成交量限制與滑價模型
Calendar mismatch多檔股票日期對齊錯誤使用正確台股交易日曆

歷史股價資料與 adjusted price 的細節可以參考 台股歷史股價 API 設計

Python 台股量化 workflow 範例

以下是一個簡化版 Python workflow,示範如何從 API 取得歷史資料、計算 signal,並建立簡單回測欄位。

import os
import requests
import pandas as pd

API_KEY = os.getenv("TW_MARKET_DATA_API_KEY")
BASE_URL = "https://api.example.com"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

params = {
    "from": "2025-01-01",
    "to": "2025-12-31",
    "interval": "1d",
    "adjusted": "true"
}

response = requests.get(
    f"{BASE_URL}/v1/tw/stocks/2330/ohlcv",
    headers=headers,
    params=params,
    timeout=20
)

response.raise_for_status()

payload = response.json()
df = pd.DataFrame(payload["data"])

df["date"] = pd.to_datetime(df["date"])
df = df.sort_values("date").reset_index(drop=True)

df["return"] = df["close"].pct_change()
df["ma20"] = df["close"].rolling(20).mean()
df["ma60"] = df["close"].rolling(60).mean()

df["signal"] = (df["ma20"] > df["ma60"]).astype(int)
df["strategy_return"] = df["signal"].shift(1) * df["return"]

df["equity_curve"] = (1 + df["strategy_return"].fillna(0)).cumprod()

print(df[["date", "close", "signal", "strategy_return", "equity_curve"]].tail())

上方 endpoint 是示意。實際路徑請以 TW Market Data docs 為準。這只是資料處理範例,不構成投資建議,也不是完整交易策略。

如果你要看更基礎的 Python API 串接方式,可以參考 Python 抓台股資料教學

如果你要把交易成本、滑價、停損與績效指標納入同一套流程,可以接著看 Python 台股回測系統實作

如果你要把 OHLCV 轉成可重現的技術指標資料層,可以接著看 台股技術分析 API

AI agent 在量化研究裡的角色

AI agent 可以協助整理資料、產生研究摘要、比較策略結果或檢查風險,但不應該取代資料驗證、回測和風控。

在台股量化 workflow 中,AI agent 比較適合做:

  • 讀取 API schema
  • 查詢特定股票資料
  • 摘要回測結果
  • 檢查策略是否使用未來資料
  • 產生風險檢查清單
  • 比較不同因子的表現
  • 產生 dashboard 說明文字

不適合直接做:

  • 未經驗證直接下單
  • 用語言模型內部記憶猜股價
  • 產生無資料來源的買賣建議
  • 忽略交易成本與風險限制

AI agent 量化研究 response schema 示意

{
  "strategy_name": "ma_cross_example",
  "data_used": [
    "historical_ohlcv",
    "trading_calendar"
  ],
  "price_adjusted": true,
  "backtest_summary": {
    "annual_return": 0.08,
    "max_drawdown": 0.18,
    "turnover": 0.32
  },
  "risk_flags": [
    "single_asset_example",
    "transaction_cost_not_fully_modeled",
    "requires_out_of_sample_test"
  ],
  "not_investment_advice": true
}

這種結構化輸出可以接到 dashboard、risk manager 或下一個 agent。對 production workflow 來說,結構化結果比一段自然語言更容易檢查與監控。

從 notebook 到 production pipeline

很多量化研究會從 Jupyter notebook 開始,但 production workflow 需要更明確的資料管線。

一個較完整的台股量化資料 pipeline 可以長這樣:

  1. 1. 每日收盤後更新 OHLCV
  2. 2. 更新交易日曆與 corporate actions
  3. 3. 更新財報、月營收或籌碼資料
  4. 4. 執行資料品質檢查
  5. 5. 產生策略 signal
  6. 6. 建立投資組合與風險檢查
  7. 7. 輸出 dashboard、報表或 agent summary
  8. 8. 保留 audit log

Data pipeline checklist

  • 是否有固定資料更新時間?
  • 是否有 API error retry?
  • 是否有 cache?
  • 是否檢查缺值與異常值?
  • 是否保留原始資料與清洗後資料?
  • 是否記錄 signal 產生時間?
  • 是否區分研究資料與 production 資料?
  • 是否能重跑某一天的結果?
  • 是否有 audit log?
  • 是否有風險檢查與人工審核流程?

台股量化交易的長期價值不在於某一次回測結果,而在於整個研究流程是否可以穩定重複。

建議的 API endpoint 設計

以下是支援台股量化 workflow 的 endpoint 設計示意。

GET /v1/tw/stocks/search
GET /v1/tw/stocks/{symbol}/profile
GET /v1/tw/stocks/{symbol}/ohlcv
GET /v1/tw/stocks/{symbol}/financials
GET /v1/tw/stocks/{symbol}/monthly-revenue
GET /v1/tw/stocks/{symbol}/institutional-flows
GET /v1/tw/stocks/{symbol}/corporate-actions
GET /v1/tw/calendar/trading-days
GET /v1/tw/etfs/{symbol}/constituents

實際 endpoint 命名不一定要完全相同。重點是資料模型要穩定,查詢參數要清楚,並且能支援研究、回測、dashboard 與 AI agent workflow。

上方 endpoint 是示意。實際路徑請以 TW Market Data docs 為準。

FAQ

台股量化交易需要即時資料嗎?

不一定。很多中低頻量化策略只需要盤後資料、歷史股價、交易日曆、財報與籌碼資料。即時資料適合看盤工具、intraday dashboard 或對 latency 敏感的策略,但不是所有量化研究都需要。

Python 適合做台股量化交易嗎?

適合。Python 有 pandas、numpy、scipy、statsmodels、backtesting tools 等資料分析工具,很適合做台股資料處理、策略研究和回測。但 production 系統仍需要考慮資料更新、錯誤處理、排程、監控與風控。

台股量化交易最少需要哪些資料?

最少需要股票清單、交易日曆、歷史 OHLCV、成交量、交易成本假設與除權息處理。若要做更完整的策略,還會需要財報、月營收、法人買賣超、ETF 成分股與產業分類資料。

回測績效好代表策略可以直接交易嗎?

不代表。回測只是研究流程的一部分。正式使用前還需要檢查交易成本、滑價、流動性、out-of-sample 表現、資料偏誤、風險限制與實際執行條件。

台股量化交易和程式交易一樣嗎?

不完全一樣。量化交易偏重資料、模型、策略研究與風控;程式交易通常強調自動化下單與執行。量化策略可以手動執行,也可以接到程式交易系統,但兩者不是同一件事。

AI agent 可以做台股量化交易嗎?

AI agent 可以協助查詢資料、整理研究、摘要回測結果與檢查風險,但不應該未經回測、風控與人為審核就直接下單。金融資料必須由可信 API 提供,不能靠語言模型猜測。

下一步

如果你正在建立台股量化交易 workflow,建議先不要從複雜模型開始。先把下面三件事做好:

  1. 1. 建立穩定台股資料來源
  2. 2. 定義可重複的策略研究流程
  3. 3. 把回測、交易成本與風控納入同一條 pipeline

Need structured Taiwan market data for your quant workflow, backtest, or AI agent?

本文討論資料工程、API 設計、量化研究、回測與 AI workflow,不構成投資建議。