← 返回 Blog

Technical Indicators · 2026-04-24 · 11 min read

台股技術分析 API:均線、RSI、MACD 與布林通道的資料管線

技術分析 API 的核心不是把指標名稱包成 endpoint,而是建立一條穩定的資料管線:從 OHLCV、K 線、交易日曆、除權息與 adjusted price 開始,計算均線、RSI、MACD、布林通道、ATR 等技術指標,再把結果接進回測、dashboard 或 AI agent workflow。

TL;DR

台股技術分析 API 可以有兩種設計:一種是 API 直接回傳預先計算好的技術指標;另一種是 API 只提供乾淨的 OHLCV,讓使用者在 Python、database 或 backtesting engine 裡自行計算。對 production workflow 來說,關鍵不是指標公式本身,而是資料是否對齊、價格是否 adjusted、window 是否清楚、缺值是否處理,以及 signal 是否避免 look-ahead bias。

如果要把技術指標接進 AI agent,建議回傳結構化資料,例如 indicator value、window、data_used、signal、risk_flags,而不是讓 LLM 自己猜 RSI 或 MACD。

技術分析 API 是什麼?

技術分析 API 是讓開發者透過 API 取得技術指標資料,或取得足夠乾淨的行情資料後自行計算指標。常見技術指標包括:

  • SMA
  • EMA
  • RSI
  • MACD
  • Bollinger Bands
  • ATR
  • volume moving average
  • price return
  • volatility
  • breakout signal

對台股資料產品來說,技術分析 API 的價值不是宣稱某個指標可以預測價格,而是讓 developer、quant 和 AI agent 能用一致 schema 取得可回測、可監控的 signal data。

如果你還在理解台股 API 的整體資料分類,可以先看 台股 API 完整指南

技術指標應該由 API 提供,還是自行計算?

技術指標可以由 API provider 預先計算,也可以由使用者在 client 端自行計算。兩種方式各有優缺點。

方式優點限制適合情境
API 預先計算使用簡單、結果一致、適合 dashboard 和 agent tool指標參數彈性較低,需要清楚定義公式看板、警示系統、AI agent 摘要
使用者自行計算彈性高,可自訂 window、公式與 signal需要自己處理資料對齊、缺值與測試量化研究、策略回測、客製化模型
混合模式API 提供 OHLCV 與常用指標,進階使用者自行擴充文件要清楚,避免重複定義developer-first financial data API

對 TW Market Data 這類產品來說,最穩定的設計通常是:先提供乾淨 OHLCV,再逐步提供常用 indicator endpoint。這樣既能服務 Python 研究者,也能服務 dashboard 與 AI agent workflow。

技術分析需要哪些原始資料?

大多數技術指標都來自 OHLCV。不同指標需要的欄位略有差異。

指標需要資料常見參數注意事項
SMA / EMAclosewindow=20, 60前 N 筆會有缺值
RSIclosewindow=14需定義 gains / losses 計算方式
MACDclosefast=12, slow=26, signal=9EMA 公式與 min_periods 要清楚
Bollinger Bandsclosewindow=20, num_std=2標準差計算方式需一致
ATRhigh, low, closewindow=14需要前一日 close 計算 true range
Volume MAvolumewindow=20volume 單位必須清楚

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

均線 API 與 moving average schema

均線是最常見的技術指標之一。SMA 是 simple moving average,EMA 是 exponential moving average。API 設計時應該清楚標示 indicator type、window、source field 和日期。

Moving average response example

{
  "data": [
    {
      "date": "2026-04-24",
      "symbol": "2330",
      "indicator": "sma",
      "source": "close",
      "window": 20,
      "value": 812.35
    },
    {
      "date": "2026-04-24",
      "symbol": "2330",
      "indicator": "ema",
      "source": "close",
      "window": 20,
      "value": 815.42
    }
  ],
  "meta": {
    "source": "tw-market-data",
    "adjusted": true,
    "timezone": "Asia/Taipei"
  }
}

如果 API 回傳均線值,`window` 和 `source` 不能省略。否則使用者無法知道這是 20 日均線、60 日均線,還是用收盤價或調整後收盤價計算。

RSI API 與 momentum indicator schema

RSI 常被用來衡量價格動能。API 不應該只回傳一個數字,還應該標示 window、source、計算日期與使用資料。

RSI response example

{
  "data": [
    {
      "date": "2026-04-24",
      "symbol": "2330",
      "indicator": "rsi",
      "source": "close",
      "window": 14,
      "value": 58.7
    }
  ],
  "meta": {
    "adjusted": true,
    "timezone": "Asia/Taipei"
  }
}

RSI 的 interpretation 不應該由 API 強行決定。比較好的做法是 API 提供 indicator value,使用者或 agent 再根據策略規則決定如何解讀。

MACD API 與 trend indicator schema

MACD 通常包含 MACD line、signal line 和 histogram。若 API 提供 MACD,應該一次回傳這三個欄位,並標示 fast、slow 和 signal window。

{
  "data": [
    {
      "date": "2026-04-24",
      "symbol": "2330",
      "indicator": "macd",
      "source": "close",
      "fast_window": 12,
      "slow_window": 26,
      "signal_window": 9,
      "macd": 4.25,
      "signal": 3.88,
      "histogram": 0.37
    }
  ],
  "meta": {
    "adjusted": true,
    "timezone": "Asia/Taipei"
  }
}

MACD 的重點不只是交叉訊號。對回測來說,應該保留原始 indicator values,讓策略規則可以被重跑與驗證。

布林通道與 ATR:波動率指標

除了價格方向,很多策略也需要波動率資訊。布林通道和 ATR 都可以用來描述價格波動,但兩者資料需求不同。

Bollinger Bands schema

{
  "date": "2026-04-24",
  "symbol": "2330",
  "indicator": "bollinger_bands",
  "source": "close",
  "window": 20,
  "num_std": 2,
  "middle_band": 812.35,
  "upper_band": 845.12,
  "lower_band": 779.08
}

ATR schema

{
  "date": "2026-04-24",
  "symbol": "2330",
  "indicator": "atr",
  "window": 14,
  "value": 18.4,
  "data_used": [
    "high",
    "low",
    "previous_close"
  ]
}

ATR 需要 high、low 和 previous close,因此比單純 close-based indicator 更容易受到資料對齊問題影響。

如何避免資料對齊錯誤?

技術指標最常見的錯誤不是公式,而是資料對齊。常見問題包括:

  • 用當日收盤後才知道的 indicator 交易當日
  • 未處理除權息造成均線與 RSI 失真
  • 不同股票交易日對齊錯誤
  • volume 單位不一致
  • 前 N 筆 rolling window 缺值被錯誤填補
  • 停牌或無成交資料未標示
  • 週 K、月 K 聚合規則不清楚

Data alignment checklist

  • 是否使用 adjusted price?
  • indicator 是否由當日收盤後資料計算?
  • 回測是否使用 shift(1) 避免 look-ahead bias?
  • 交易日曆是否正確?
  • 停牌或無成交日是否有標示?
  • rolling window 前 N 筆缺值是否保留?
  • volume 單位是否和其他資料一致?
  • 週 K、月 K 是否有清楚聚合規則?

Python 計算技術指標範例

以下示範如何用 Python 從 OHLCV 計算幾個常見技術指標。

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}"
}

response = requests.get(
    f"{BASE_URL}/v1/tw/stocks/2330/ohlcv",
    headers=headers,
    params={
        "from": "2025-01-01",
        "to": "2025-12-31",
        "interval": "1d",
        "adjusted": "true"
    },
    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["sma20"] = df["close"].rolling(20).mean()
df["sma60"] = df["close"].rolling(60).mean()

delta = df["close"].diff()
gain = delta.clip(lower=0)
loss = -delta.clip(upper=0)

avg_gain = gain.rolling(14).mean()
avg_loss = loss.rolling(14).mean()

rs = avg_gain / avg_loss
df["rsi14"] = 100 - (100 / (1 + rs))

ema12 = df["close"].ewm(span=12, adjust=False).mean()
ema26 = df["close"].ewm(span=26, adjust=False).mean()

df["macd"] = ema12 - ema26
df["macd_signal"] = df["macd"].ewm(span=9, adjust=False).mean()
df["macd_histogram"] = df["macd"] - df["macd_signal"]

print(df[[
    "date",
    "close",
    "sma20",
    "sma60",
    "rsi14",
    "macd",
    "macd_signal",
    "macd_histogram"
]].tail())

上方 endpoint 是示意。實際 API host 與路徑請以 TW Market Data docs 為準。這是資料處理範例,不構成投資建議。

如果你還不熟悉 Python 串接台股資料,可以先看 Python 抓台股資料教學

如何把技術指標接進回測?

技術指標本身不是策略。策略需要明確定義 signal、持倉、交易成本、滑價與風控。

Signal example

df["signal"] = 0
df.loc[df["sma20"] > df["sma60"], "signal"] = 1

df["position"] = df["signal"].shift(1).fillna(0)
df["return"] = df["close"].pct_change()
df["strategy_return"] = df["position"] * df["return"]

`shift(1)` 是避免 look-ahead bias 的基本做法。若使用當日收盤後才計算出的 signal 來交易當日,回測結果會失真。

如果你要把技術指標放進完整的資料、signal 與風控流程,可以先看 台股量化交易入門

如果你要建立完整回測流程,可以參考 Python 台股回測系統實作

AI agent 如何使用技術分析資料?

AI agent 不應該自己猜 RSI、MACD 或均線值。正確做法是透過 tool calling 查詢 OHLCV 或 technical indicators API,再讓 agent 做摘要、比較與風險標記。

Agent tool schema 示意

{
  "name": "get_technical_indicators",
  "description": "Get technical indicators for a Taiwan stock.",
  "parameters": {
    "symbol": "2330",
    "from": "2025-01-01",
    "to": "2025-12-31",
    "indicators": [
      {
        "name": "sma",
        "window": 20
      },
      {
        "name": "rsi",
        "window": 14
      },
      {
        "name": "macd",
        "fast_window": 12,
        "slow_window": 26,
        "signal_window": 9
      }
    ],
    "adjusted": true
  }
}

Agent response schema 示意

{
  "symbol": "2330",
  "data_used": [
    "daily_ohlcv",
    "technical_indicators"
  ],
  "indicators": {
    "sma20": 812.35,
    "sma60": 785.42,
    "rsi14": 58.7,
    "macd_histogram": 0.37
  },
  "summary": "Short-term moving average is above long-term moving average, but this is not sufficient as a standalone trading signal.",
  "risk_flags": [
    "requires_backtesting",
    "technical_indicator_only",
    "not_a_standalone_trading_signal"
  ],
  "not_investment_advice": true
}

這種結構化輸出比一句技術面偏多更適合 production workflow。它能讓 dashboard、risk manager 或下一個 agent 知道使用了哪些資料與哪些限制。

常見資料品質問題

技術指標看起來容易計算,但 production workflow 裡常見問題很多。

問題影響API 應提供的協助
價格未調整除權息造成指標失真提供 adjusted 參數與 meta
rolling window 缺值被填補前 N 筆指標不可信保留 null 或標示 insufficient_data
交易日曆錯誤指標日期對齊錯誤提供 trading calendar endpoint
週 K / 月 K 聚合規則不清楚不同使用者計算結果不一致在 meta 中標示 aggregation rule
signal 和 indicator 混在一起使用者無法重現策略邏輯分開提供 indicator values 和 signal rules
volume 單位不清楚volume-based indicator 失真提供 unit 欄位

建議的 API endpoint 設計

以下是技術分析與指標資料相關 endpoint 的設計示意。

GET /v1/tw/stocks/{symbol}/ohlcv
GET /v1/tw/stocks/{symbol}/technical-indicators
GET /v1/tw/stocks/{symbol}/technical-indicators?sma=20,60
GET /v1/tw/stocks/{symbol}/technical-indicators?rsi=14
GET /v1/tw/stocks/{symbol}/technical-indicators?macd=12,26,9
GET /v1/tw/stocks/{symbol}/technical-indicators?bollinger=20,2
GET /v1/tw/stocks/{symbol}/signals/technical

實際 endpoint 命名不一定要完全相同。重點是 indicator 參數、資料來源、價格調整狀態、日期區間與 response schema 必須清楚。

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

FAQ

台股技術分析 API 可以取得哪些指標?

常見技術分析 API 可以提供均線、RSI、MACD、布林通道、ATR、成交量均線、報酬率與波動率等指標。實際支援項目取決於 API 供應商。

技術指標應該由 API 計算還是自己用 Python 計算?

兩種方式都可以。API 預先計算適合 dashboard 和 AI agent workflow;Python 自行計算適合量化研究和策略回測。關鍵是公式、window、資料來源與 adjusted price 狀態要清楚。

RSI、MACD 可以直接當成買賣訊號嗎?

不建議直接使用單一技術指標作為買賣依據。技術指標可以作為 signal 的一部分,但仍需要回測、交易成本、滑價、風控與 out-of-sample 驗證。

技術分析 API 需要 adjusted price 嗎?

長期技術分析與回測通常需要 adjusted price,避免除權息或 corporate actions 造成指標失真。但若研究實際市場成交價格,也可能需要未調整價格。API 應清楚標示 adjusted 狀態。

Python 可以計算台股技術指標嗎?

可以。Python 可以用 pandas 從 OHLCV 計算均線、RSI、MACD、布林通道與其他指標,再接進回測系統或 dashboard。

AI agent 可以用技術分析資料分析股票嗎?

可以。AI agent 可以透過 tool calling 查詢 OHLCV 或技術指標,再產生結構化摘要與風險標記。但 agent 不應該自己猜指標值,也不應把技術分析結果當成投資建議。

下一步

如果你正在建立台股技術分析 workflow,建議先處理三件事:

  1. 1. 確認 OHLCV 與 adjusted price 狀態
  2. 2. 明確定義 indicator formula、window 與資料來源
  3. 3. 把 indicator value、signal、回測與風控分開處理

Need structured Taiwan technical indicator data for your quant workflow, dashboard, or AI agent?

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