跳轉至

建立 2025-02-24 更新 2026-09-16

技術分析

技術指標是用歷史價格與成交量算出來的數字,幫助判斷市場的趨勢、動能與波動程度。單一指標都有盲點,實務上通常會搭配使用。

類別 代表指標 用途
趨勢 移動平均線(MA)、MACD 判斷市場方向
動量 RSI 判斷是否超買、超賣
波動率 布林通道(Bollinger Bands) 衡量價格波動範圍
成交量 OBV 判斷資金流向
通道 唐奇安通道(Donchian Channel) 用近期高低點定義突破區間

指標套件怎麼選:ta、pandas-ta、TA-Lib

計算技術指標不用自己刻公式,Python 生態有三套常用套件,計算結果基本一致,差別在安裝難度與使用手感:

套件 安裝方式 特點
TA-Lib pip install TA-Lib(需先裝好底層 C 函式庫) 業界最常見的標準函式庫,速度快、指標齊全,本頁後續範例主要用它
ta pip install ta 純 Python 實作,pip install 就能用,不需編譯 C 函式庫,最適合新手與雲端環境(如 Colab)
pandas-ta pip install pandas-ta 也是純 Python,語法直接掛在 DataFrame.ta 存取器上,指標數量最多,寫法最貼近 pandas

TA-Lib 常見的安裝痛點

pip install TA-Lib 本質是在包一層 Python 介面給底層的 TA-Lib C 函式庫,如果系統還沒裝這個 C 函式庫,安裝就會失敗(尤其常見於 Windows)。如果只是想快速上手,建議先用 ta 或 pandas-ta;要換成 TA-Lib 時再處理安裝問題,可參考下方 Notebook 6-4。

同一個指標(以 RSI 為例)用三套件寫出來大致如下:

# TA-Lib
import talib
data["RSI"] = talib.RSI(data["Close"], timeperiod=14)

# ta(純 Python,語法偏 scikit-learn 風格)
from ta.momentum import RSIIndicator
data["RSI"] = RSIIndicator(close=data["Close"], window=14).rsi()

# pandas-ta(直接掛在 DataFrame 後面)
import pandas_ta as ta
data["RSI"] = data.ta.rsi(length=14)

為了簡潔,本頁後續的指標範例統一用 TA-Lib 語法示範;換成 ta 或 pandas-ta,只要照上面的對應方式改寫函式呼叫即可,計算邏輯完全相同。

vectorbt 也能算指標

vectorbt 同樣內建常用技術指標(並可直接呼叫 TA-Lib/pandas-ta),但它真正的價值在於向量化回測——一次測試大量參數組合而不用寫迴圈,詳見交易策略回測。

移動平均線(MA)

import talib

data["SMA_20"] = talib.SMA(data["Close"], timeperiod=20)   # 簡單移動平均,反應較慢、較平滑
data["EMA_20"] = talib.EMA(data["Close"], timeperiod=20)   # 指數移動平均,對近期價格更敏感

MACD

MACD(Moving Average Convergence Divergence)是趨勢與動能指標,常用來判斷趨勢轉折。

macd, macd_signal, macd_hist = talib.MACD(
    data["Close"], fastperiod=12, slowperiod=26, signalperiod=9
)

當 MACD 由下往上穿越訊號線(Signal Line),通常視為偏多訊號;反之則偏空。

RSI(相對強弱指數)

data["RSI"] = talib.RSI(data["Close"], timeperiod=14)

RSI 介於 0~100 之間:一般認為 RSI > 70 為超買,RSI < 30 為超賣,但在強勢趨勢中 RSI 可能長時間停留在極端區間,不宜單獨依賴。

布林通道(Bollinger Bands)

upper, middle, lower = talib.BBANDS(data["Close"], timeperiod=20)

布林通道用移動平均加減標準差畫出上下軌,衡量價格的波動範圍:價格觸及上軌代表相對高檔,觸及下軌代表相對低檔。

唐奇安通道(Donchian Channel)

唐奇安通道用「近 N 天最高價」與「近 N 天最低價」畫出通道,是海龜交易法則等突破策略常用的指標。

data["20d_high"] = data["Close"].rolling(window=20).max()
data["10d_low"] = data["Close"].rolling(window=10).min()

OBV(能量潮)

data["OBV"] = talib.OBV(data["Close"], data["Volume"])

OBV 累加每日成交量(漲日加、跌日減),OBV 持續上升通常代表資金持續流入。

指標的綜合應用

單一指標容易出現假訊號,實務上常搭配使用,例如「均線多頭排列 + RSI 未過熱」:

data["Buy_Signal"] = (data["SMA_20"] > data["SMA_50"]) & (data["RSI"] < 30)
data["Sell_Signal"] = (data["SMA_20"] < data["SMA_50"]) & (data["RSI"] > 70)

動手做

Notebook 內容
6-1 均線(MA) 計算並繪製移動平均線
6-2 唐奇安通道 計算唐奇安通道;本 Notebook 保留繪圖練習給學員自行完成
6-3 布林帶 計算並繪製布林通道
6-4 安裝及使用 TA-Lib 在 Colab 環境安裝 TA-Lib 的步驟

推薦影音

ta 套件教學

簡述:示範純 Python 的 ta 套件如何從 DataFrame 直接算出各種技術指標,安裝簡單、不需要編譯 C 函式庫,適合 TA-Lib 安裝遇到困難時的替代方案,對應本頁「指標套件怎麼選」的部分。

pandas-ta 套件教學

簡述:NeuralNine(知名 Python 教育頻道)示範如何用 pandas-ta 的 .ta 存取器直接在 DataFrame 上計算 RSI、MACD、布林通道等指標,語法比 TA-Lib 更貼近 pandas 使用習慣。