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 / EMA | close | window=20, 60 | 前 N 筆會有缺值 |
| RSI | close | window=14 | 需定義 gains / losses 計算方式 |
| MACD | close | fast=12, slow=26, signal=9 | EMA 公式與 min_periods 要清楚 |
| Bollinger Bands | close | window=20, num_std=2 | 標準差計算方式需一致 |
| ATR | high, low, close | window=14 | 需要前一日 close 計算 true range |
| Volume MA | volume | window=20 | volume 單位必須清楚 |
如果你要理解 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. 確認 OHLCV 與 adjusted price 狀態
- 2. 明確定義 indicator formula、window 與資料來源
- 3. 把 indicator value、signal、回測與風控分開處理
Need structured Taiwan technical indicator data for your quant workflow, dashboard, or AI agent?
本文討論資料工程、API 設計、技術指標、量化研究與 AI workflow,不構成投資建議。