技術分析
技術指標是用歷史價格與成交量算出來的數字,幫助判斷市場的趨勢、動能與波動程度。單一指標都有盲點,實務上通常會搭配使用。
| 類別 | 代表指標 | 用途 |
|---|---|---|
| 趨勢 | 移動平均線(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(相對強弱指數)
RSI 介於 0~100 之間:一般認為 RSI > 70 為超買,RSI < 30 為超賣,但在強勢趨勢中 RSI 可能長時間停留在極端區間,不宜單獨依賴。
布林通道(Bollinger Bands)
布林通道用移動平均加減標準差畫出上下軌,衡量價格的波動範圍:價格觸及上軌代表相對高檔,觸及下軌代表相對低檔。
唐奇安通道(Donchian Channel)
唐奇安通道用「近 N 天最高價」與「近 N 天最低價」畫出通道,是海龜交易法則等突破策略常用的指標。
data["20d_high"] = data["Close"].rolling(window=20).max()
data["10d_low"] = data["Close"].rolling(window=10).min()
OBV(能量潮)
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 使用習慣。