本文目錄
如果你正在學習用 Python 做技術分析,卻卡在 TA-Lib 安裝失敗、RSI 算出來的數字跟看盤軟體對不上、MACD 金叉死叉抓不準時機,這篇文章就是為你寫的。技術分析 Python 這條路,工具選對、觀念抓對,其實不用花太多時間就能上手,重點是避開那些會讓你卡關好幾天的雷區。這篇文章會用最直白的方式,帶你從環境安裝一路走到 RSI、MACD、布林通道的實作,還有繪製 K 線圖的完整流程,並附上可直接複製執行的程式碼。
TA-Lib Python 安裝教學:三種常見安裝方式比較
TA-Lib 是技術分析 Python 生態圈裡最常被推薦的套件,但也是最多人卡關的地方。原因很簡單:TA-Lib 底層是 C 語言寫的,Python 版只是包裝層,所以你必須先裝好 C 函式庫,再裝 Python binding,這步驟在 Windows 上特別容易出問題。
以下整理三種安裝方式的優缺點:
方法一:直接 pip install TA-Lib
這是最常見但最容易失敗的方式,尤其在 Windows 上,常常會出現「Microsoft Visual C++ 14.0 is required」的錯誤訊息。如果你用的是 Mac,通常要先用 Homebrew 裝底層函式庫:
brew install ta-lib
pip install TA-Lib
Linux 則需要先下載 TA-Lib 原始碼編譯,再安裝 Python binding。
方法二:使用 conda 安裝(推薦新手)
如果你用 Anaconda 或 Miniconda,建議走這條路:
conda install -c conda-forge ta-lib
這個指令幾乎不會出錯,因為 conda-forge 已經把編譯好的二進位檔準備好了,省去大量除錯時間。
方法三:使用 whl 檔案安裝(Windows 專用)
如果你堅持用 pip 又不想裝 conda,可以到 Christoph Gohlke 的 Unofficial Windows Binaries 頁面(搜尋關鍵字:Unofficial Windows Binaries for Python Extension Packages)下載對應版本的 TA-Lib whl 檔。這個來源長期被 Python 社群使用,但屬於非官方資源,下載前請自行評估。
安裝前務必確認三件事:
1. Python 版本(例如 cp311 代表 Python 3.11)
2. 位元數(win_amd64 代表 64 位元)
3. TA-Lib 底層 C 函式庫是否已安裝
對應版本正確後,執行:
pip install TA_Lib‑0.4.xx‑cp311‑cp311‑win_amd64.whl
(檔名請依你下載的實際版本調整。)
整體來說,2026 年目前對新手最省事的做法仍是 conda 安裝,能大幅降低環境問題的機率,把時間留給研究指標邏輯更划算。
RSI Python 計算範例:從公式到程式碼實作
RSI(相對強弱指標)是很多新手第一個想學的技術指標,因為概念直觀:抓超買超賣。用 Python 計算 RSI 其實只要幾行程式碼。
用 TA-Lib 計算 RSI
import talib
import pandas as pd
假設 df 是你的股價資料,欄位包含 close
df['RSI14'] = talib.RSI(df['close'], timeperiod=14)
用 pandas 手動計算 RSI(Wilder’s Smoothing)
如果你不想裝 TA-Lib,也可以手動用 pandas 實作。以下為完整可執行範例,採用 TA-Lib 相同的 Wilder’s Smoothing:
import pandas as pd
import numpy as np
假設 df 含有一個名為 'close' 的收盤價欄位
delta = df['close'].diff()
gain = delta.clip(lower=0)
loss = -delta.clip(upper=0)
Wilder's Smoothing:等同於 alpha = 1/period 的指數移動平均
period = 14
avg_gain = gain.ewm(alpha=1 / period, min_periods=period, adjust=False).mean()
avg_loss = loss.ewm(alpha=1 / period, min_periods=period, adjust=False).mean()
rs = avg_gain / avg_loss
df['RSI14_manual'] = 100 – (100 / (1 + rs))
公式邏輯拆解如下:
1. 計算每日漲跌幅(diff())
2. 分別取出上漲日與下跌日的數值
3. 用 Wilder’s Smoothing 計算平均上漲幅度與平均下跌幅度
4. RS = 平均上漲幅度 ÷ 平均下跌幅度
5. RSI = 100 – (100 / (1 + RS))
注意:TA-Lib 與手動實作若都採用 Wilder’s Smoothing,數值應該非常接近;若你使用簡單移動平均(SMA)版本,差異會比較明顯。網路上常看到「手算跟 TA-Lib 差一點點」的說法,通常是因為平滑方式不同所致,並非誰算錯。
實務上,RSI 30 以下常被視為超賣、70 以上視為超買,但單獨用 RSI 判斷買賣點容易遇到假訊號,尤其在盤整格局中特別明顯。建議搭配成交量或其他指標一起觀察。
MACD Python 實作與 K 線圖 Python 繪製整合應用
MACD(指數平滑移動平均線)跟布林通道也是技術分析 Python 中最常被使用的兩個指標,接下來示範怎麼一次計算並視覺化呈現。
MACD 計算
import talib
macd, signal, hist = talib.MACD(
df['close'],
fastperiod=12,
slowperiod=26,
signalperiod=9,
)
df['MACD'] = macd
df['Signal'] = signal
df['Hist'] = hist
布林通道計算
upper, middle, lower = talib.BBANDS(
df['close'],
timeperiod=20,
nbdevup=2,
nbdevdn=2,
)
df['BB_upper'] = upper
df['BB_middle'] = middle
df['BB_lower'] = lower
用 mplfinance 繪製 K 線圖
計算完指標後,最重要的一步是視覺化。K 線圖 Python 繪製最推薦的套件是 mplfinance,語法簡潔又能直接疊加均線與指標。
關鍵前置步驟:mplfinance 要求 DataFrame 的索引必須是 DatetimeIndex,且欄位名稱需為 Open、High、Low、Close、Volume(開頭大寫)。若你的資料欄位是小寫,請先轉換。
import pandas as pd
import mplfinance as mpf
1. 將日期欄位設為索引,並轉成 DatetimeIndex
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
2. 欄位名稱改為 mplfinance 認得的格式
df = df.rename(columns={
'open': 'Open',
'high': 'High',
'low': 'Low',
'close': 'Close',
'volume': 'Volume',
})
3. 確認 upper / lower 是 Series(若前面用 talib.BBANDS 產生,本來就是 Series)
這裡直接把它們丟進 addplot
apds = [
mpf.make_addplot(df['BB_upper'], color='gray'),
mpf.make_addplot(df['BB_middle'], color='blue'),
mpf.make_addplot(df['BB_lower'], color='gray'),
]
mpf.plot(
df,
type='candle',
mav=(5, 20),
volume=True,
addplot=apds,
style='yahoo',
)
mplfinance 的設計目標就是讓常見的 K 線圖在十幾行內完成,對比從零用 matplotlib 刻座標軸、刻 K 棒、刻均線,能省下不少樣板程式碼。
不過也要老實說,如果你是要做即時盤中判讀,Python 畫圖的即時性還是比不上專業看盤軟體。常見的做法是:用 Python 做歷史資料的回測與指標驗證,實際盯盤決策時搭配像 TradingView 這類專業圖表工具,因為它的即時報價、多重時間週期切換跟畫線工具,是自己寫程式很難短時間內做到的水準。
避雷防坑指南:技術分析 Python 新手最容易踩的 5 個地雷
以下這五個坑是新手最常遇到的,提前知道可以省下不少除錯時間。
地雷一:資料缺失值沒處理,指標算出來全是 NaN
很多人下載完股價資料直接丟進 TA-Lib 計算,結果發現前面好幾筆全是 NaN 就慌了。其實這是正常現象,因為像 RSI 14 天、MACD 26 天這類指標都需要足夠的歷史資料才能開始計算,前面的 NaN 是正常的暖機期。
處理方式:
計算完指標後,把暖機期的 NaN 移除
df.dropna(inplace=True)
或者,如果你只想移除特定欄位的 NaN:
df.dropna(subset=['RSI14', 'MACD', 'Signal'], inplace=True)
防範方法:確認你抓的歷史資料至少要多抓 30-60 天的緩衝期,才不會影響到你真正想分析的區間。
地雷二:TA-Lib 版本與 Python 版本不相容
TA-Lib 對 Python 版本相容性要求其實蠻嚴格的,尤其是用 whl 檔案安裝時,版本沒對齊直接裝不上去,常見的錯誤是 import 時直接噴 ImportError 或 DLL load failed。
防範方法:安裝前先確認自己的 Python 版本(用 python --version),再去對應版本下載安裝檔,或者乾脆用 conda 環境管理不同專案的 Python 版本,避免互相干擾。
地雷三:把技術指標當成聖杯,忽略市場情境
這是最容易踩、也是傷最重的一個雷。很多人學會計算 RSI、MACD 之後,就急著寫程式自動下單,結果沒考慮到不同市場情境(盤整、趨勢、極端行情)下同一個指標的可靠度差很多。常見的錯誤是:完全依賴單一 MACD 金叉訊號進場,在震盪盤中容易被反覆觸發停損。
防範方法:技術指標永遠只是輔助工具,務必搭配資金控管、停損機制,並且做足夠長時間的歷史回測再考慮實戰應用。
地雷四:時區與交易日曆沒對齊
如果你同時處理台股跟美股資料,很容易忽略時區問題跟休市日曆的差異,導致合併資料時對不上日期,計算出來的指標整個跑掉。
防範方法:使用 pandas 的 pd.bdate_range 搭配交易所行事曆套件(如 pandas_market_calendars),先把日期對齊再進行運算。
地雷五:回測時用了「未來函數」,結果過度樂觀
這是進階但很致命的雷。有些人在寫回測程式時,不小心用了當天收盤後才會知道的資訊去做當天的判斷(例如用當天收盤價去決定當天要不要買進),這種未來函數會讓回測績效看起來超好,但實盤根本不可行。
防範方法:務必確保訊號產生的時間點跟實際下單時間點是分開的,最簡單的做法是「訊號用今天算,交易用明天的開盤價執行」。
技術指標 Python 套件推薦與比較表
除了 TA-Lib,市場上還有其他技術分析 Python 套件值得認識,以下是常見套件的比較整理:
| 套件名稱 | 安裝難易度 | 指標數量 | 執行速度 | 維護狀態(2026) | 適合對象 |
|---|---|---|---|---|---|
| TA-Lib | 中等(需 C 函式庫) | 150+ | 快(C 底層) | 活躍 | 需要大量指標、追求效能者 |
| pandas-ta | 簡單(純 pip) | 130+ | 中等 | **原作者已停止維護**,可考慮 `pandas-ta-classic` 等社群分支 | 想快速上手、不想處理 C 編譯問題者 |
| finta | 簡單 | 80+ | 中等 | 低度維護 | 輕量化需求、教學用途 |
| tulipy | 簡單(多數平台可 pip 安裝) | 100+ | 快 | 低度維護 | 進階使用者、需要特殊指標 |
| stockstats | 簡單 | 60+ | 中等 | 活躍 | 資料格式簡單、快速上手 |
關於 pandas-ta 的補充:截至 2026 年,pandas-ta 的原作者已不再積極維護,套件本身仍可安裝使用,但若你重視長期維護性,建議改用 pandas-ta-classic 這類社群接手的分支,或直接回到 TA-Lib。選擇套件時,記得先看一下 GitHub 上最近的 commit 時間。
新手若想快速上手,finta 或 stockstats 是安裝零阻礙的選項;等到你需要更多指標或追求運算效能時,再花時間解決 TA-Lib 的安裝問題也不遲。
常見問題 FAQ
TA-Lib 安裝失敗一直出現「Microsoft Visual C++ 14.0 required」怎麼辦?
這是 Windows 用戶最常遇到的問題,通常是因為系統缺少編譯環境。最快的解法有兩個:第一是安裝 Microsoft C++ Build Tools(從微軟官網下載);第二,也是更推薦的方式,直接改用 conda 安裝,指令是 conda install -c conda-forge ta-lib,可以完全繞過編譯問題。
用 Python 算出來的 RSI 跟看盤軟體的數字不一樣,是哪裡出錯了嗎?
不一定是錯誤,這通常跟計算方法的細節差異有關。不同軟體或套件可能用不同的平滑方式(Wilder’s Smoothing vs. 簡單移動平均),或者資料的起始點不同,都會造成些微差異。只要誤差不大(通常在 1-3 之間),基本上都算正常範圍,不用太緊張。
計算完指標後前面一堆 NaN,該怎麼處理?
TA-Lib 的指標需要暖機期,前面出現 NaN 是正常的。最簡單的處理方式是:
df.dropna(inplace=True)
若只想針對特定欄位處理,可用 df.dropna(subset=['RSI14'], inplace=True)。切記不要在計算指標前就 dropna,否則會影響後續指標的計算基準。
Python 做技術分析可以完全取代看盤軟體嗎?
老實說不行,至少目前還不行。Python 的優勢在於歷史資料回測、大量指標批次計算、自訂化策略邏輯,但在即時報價更新速度、多商品同時監控、圖表互動性上,還是不如專業看盤軟體。常見的做法是兩者並用:用 Python 做策略研發跟回測驗證,實際盯盤決策時搭配 TradingView 這類即時圖表工具。
結論:技術分析 Python 是一條值得投資的學習路
學會技術分析 Python,你可以打造完全客製化的分析流程、批次處理大量股票資料、甚至進一步串接自動化交易系統,這是看盤軟體給不了你的彈性。但也要記住,指標計算只是第一步,真正決定成敗的還是你怎麼理解市場、怎麼管理風險。
如果你剛開始學,建議先照著這篇文章的順序走:
1. 裝好環境(優先試 conda 安裝 TA-Lib)
2. 學會算 RSI、MACD、布林通道,並記得處理 NaN
3. 練習用 mplfinance 畫 K 線圖(記得先 set_index)
4. 避開上面提到的五個地雷
5. 用歷史資料做回測,確認沒有未來函數
一步一步紮實走完,大概花個兩三個禮拜的業餘時間就能上手基本操作。
實戰盯盤的部分,如果你也想找一個能跟 Python 分析互補、即時性又夠強的看盤平台,可以參考看看 TradingView,多重時間週期切換跟畫線工具用起來真的順手很多,值得列入你的工具清單。
祝你在技術分析 Python 這條路上,少踩坑、多累積經驗!