很多人学了很久的技术分析,能看懂 MACD 金叉,能辨认布林带压力位,但从来没有自己算过一次。
不是不想——是真的麻烦。手动推公式、对数据、算窗口……
今天这三个 Python 库,把"看懂指标"变成"用上指标"。一行代码,搞定。
为什么需要技术分析库?
code
你有一份股票数据(OHLCV):
日期 开盘 最高 最低 收盘 成交量
4/1 100 105 98 103 10万
4/2 103 108 101 106 12万
...
你想知道:
- MACD 是多少?金叉了吗?
- RSI 到 70 了吗?是不是超买?
- 布林带上轨在哪?突破了吗?
- 20 日均线多少?
手动算?每个指标都要写一堆公式。
用库?一行搞定。
工具一:ta(技术分析瑞士军刀)
项目地址:https://github.com/bukosabino/ta[1]
⭐ 5,000+ Stars | Python | 40+ 指标 | 基于 pandas/numpy
一句话
最简单的技术分析库。 给你一个 DataFrame,一行加上所有主流技术指标。
安装
bash
pip install ta
用法:一行加上所有指标
python
import ta
import akshare as ak
# 获取茅台数据
df = ak.stock_zh_a_hist(symbol="600519", period="daily",
start_date="20240101", end_date="20251231")
# 一行加上所有技术指标(40+个)
df = ta.add_all_ta_features(
df,
open="开盘", high="最高", low="最低",
close="收盘", volume="成交量"
)
print(f"原始列数:7 列")
print(f"加完指标:{len(df.columns)} 列")
# 输出:加完指标:约 90 列
一行代码,DataFrame 从 7 列变成 90 列。
也可以单独算某个指标
python
from ta.trend import MACD, SMAIndicator
from ta.momentum import RSIIndicator
from ta.volatility import BollingerBands
# MACD
macd = MACD(df['收盘'])
df['MACD'] = macd.macd()
df['MACD_signal'] = macd.macd_signal()
df['MACD_hist'] = macd.macd_diff()
# RSI
df['RSI'] = RSIIndicator(df['收盘'], window=14).rsi()
# 布林带
bb = BollingerBands(df['收盘'])
df['BB_upper'] = bb.bollinger_hband()
df['BB_lower'] = bb.bollinger_lband()
df['BB_middle'] = bb.bollinger_mavg()
# 均线
df['SMA_20'] = SMAIndicator(df['收盘'], window=20).sma_indicator()
df['SMA_60'] = SMAIndicator(df['收盘'], window=60).sma_indicator()
四大类指标
| | |
|---|
| 趋势 | | |
| 动量 | RSI、Stochastic(KDJ)、Williams %R、ROC | |
| 波动率 | Bollinger Bands、ATR、Keltner Channel | |
| 成交量 | | |
实话实说
适合谁: 想快速给 DataFrame 加技术指标的人,不想折腾安装环境。
工具二:TA-Lib(行业标准)
项目地址:https://github.com/TA-Lib/ta-lib-python[2]
⭐ 10,000+ Stars | C + Python | 150+ 指标 | 行业标准
一句话
金融行业的技术分析标准库。 C 语言写的核心,Python 只是包装层,速度极快。Bloomberg、TradeStation 等专业终端都用它。
安装(稍微折腾)
bash
# macOS
brew install ta-lib
pip install TA-Lib
# Linux
sudo apt-get install -y ta-lib
pip install TA-Lib
# Windows
# 需要先下载 ta-lib-0.4.0-msvc.zip
# 解压到 C:\ta-lib,然后 pip install TA-Lib
安装稍麻烦是 TA-Lib 唯一的缺点——需要先装 C 语言库。
用法
python
import talib
import numpy as np
close = np.array(df['收盘'], dtype=float)
high = np.array(df['最高'], dtype=float)
low = np.array(df['最低'], dtype=float)
volume = np.array(df['成交量'], dtype=float)
# MACD
macd, signal, hist = talib.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
# RSI
rsi = talib.RSI(close, timeperiod=14)
# 布林带
upper, middle, lower = talib.BBANDS(close, timeperiod=20)
# KDJ
slowk, slowd = talib.STOCH(high, low, close)
# 一次性算多个常用指标
df['MACD'], df['MACD_signal'], df['MACD_hist'] = talib.MACD(close)
df['RSI'] = talib.RSI(close)
df['ATR'] = talib.ATR(high, low, close)
df['ADX'] = talib.ADX(high, low, close)
df['CCI'] = talib.CCI(high, low, close)
df['OBV'] = talib.OBV(close, volume)
df['MOM'] = talib.MOM(close)
df['ROC'] = talib.ROC(close)
df['WILLR'] = talib.WILLR(high, low, close)
独有功能:K 线形态识别
TA-Lib 比 ta 多一个杀手级功能——自动识别 61 种 K 线形态:
python
# 十字星
df['DOJI'] = talib.CDLDOJI(open, high, low, close)
# 锤子线
df['HAMMER'] = talib.CDLHAMMER(open, high, low, close)
# 吞没形态
df['ENGULFING'] = talib.CDLENGULFING(open, high, low, close)
# 早晨之星
df['MORNINGSTAR'] = talib.CDLMORNINGSTAR(open, high, low, close)
# 一次性检测所有形态
candle_names = talib.get_function_groups()['Pattern Recognition']
for name in candle_names:
df[name] = getattr(talib, name)(open, high, low, close)
print(f"识别了 {len(candle_names)} 种K线形态")
# 输出:识别了 61 种K线形态
ta 库没有这个功能。 如果你需要 K 线形态识别,只有 TA-Lib 能做。
实话实说
适合谁: 需要完整指标库、K 线形态识别、或处理大量数据追求速度的人。
工具三:mplfinance(K 线可视化)
项目地址:https://github.com/matplotlib/mplfinance[3]
⭐ 3,900+ Stars | Python | matplotlib 官方子项目
一句话
专门画 K 线图的库。 ta 和 TA-Lib 负责算指标,mplfinance 负责画出来。
安装
bash
pip install mplfinance
画 K 线图
python
import mplfinance as mpf
import akshare as ak
import pandas as pd
# 获取数据
df = ak.stock_zh_a_hist(symbol="600519", period="daily",
start_date="20250101", end_date="20251231")
# 转换格式
df.index = pd.to_datetime(df['日期'])
df = df.rename(columns={
'开盘': 'Open', '收盘': 'Close',
'最高': 'High', '最低': 'Low',
'成交量': 'Volume'
})
# 画 K 线图(一行搞定)
mpf.plot(df, type='candle', volume=True, style='charles',
title='茅台 K 线图', mav=(5, 20, 60))
叠加技术指标
python
import talib
import numpy as np
close = np.array(df['Close'], dtype=float)
# 计算指标
macd, signal, hist = talib.MACD(close)
rsi = talib.RSI(close)
upper, middle, lower = talib.BBANDS(close)
# 叠加到 K 线图上
ap = [
mpf.make_addplot(upper, color='blue', linestyle='dashed'),
mpf.make_addplot(lower, color='blue', linestyle='dashed'),
mpf.make_addplot(hist, type='bar', panel=1, color='dimgray'),
mpf.make_addplot(macd, panel=1, color='red'),
mpf.make_addplot(signal, panel=1, color='blue'),
mpf.make_addplot(rsi, panel=2, color='purple'),
]
mpf.plot(df, type='candle', volume=True,
addplot=ap, style='charles',
title='茅台 K线 + MACD + RSI + 布林带',
panel_ratios=(4, 1, 1))
K 线 + MACD + RSI + 布林带,一张图全搞定。 这就是专业看盘软件里的图表。
实话实说
适合谁: 需要生成专业 K 线图表的人。
黄金三件套:怎么配合用?
code
技术分析工作流:
1. AKShare / yfinance → 获取 OHLCV 数据
2. ta / TA-Lib → 计算技术指标
3. mplfinance → 画 K 线图 + 叠加指标
完整示例:技术分析 + 信号生成
python
import akshare as ak
import pandas as pd
import numpy as np
import ta
import mplfinance as mpf
# ① 获取数据
df = ak.stock_zh_a_hist(symbol="600519", period="daily",
start_date="20250101", end_date="20251231")
df.index = pd.to_datetime(df['日期'])
# ② 计算指标(用 ta 库,一行搞定)
df = ta.add_all_ta_features(
df, open="开盘", high="最高", low="最低",
close="收盘", volume="成交量"
)
# 注意:ta 库自动生成的列名格式为 "类别_指标名"
# 例如 momentum_rsi、trend_macd_diff、volatility_bbm(中轨)、volatility_bbh(上轨)
# ③ 生成信号
df['买入信号'] = (
(df['momentum_rsi'] < 30) & # RSI 超卖
(df['trend_macd_diff'] > 0) & # MACD 金叉
(df['收盘'] < df['volatility_bbm']) # 价格在布林带中轨以下
)
df['卖出信号'] = (
(df['momentum_rsi'] > 70) & # RSI 超买
(df['trend_macd_diff'] < 0) & # MACD 死叉
(df['收盘'] > df['volatility_bbh']) # 价格突破布林带上轨
)
# ④ 统计信号
buy_dates = df[df['买入信号']].index
sell_dates = df[df['卖出信号']].index
print(f"买入信号出现 {len(buy_dates)} 次")
print(f"卖出信号出现 {len(sell_dates)} 次")
# ⑤ 画图
df_plot = df.rename(columns={
'开盘': 'Open', '收盘': 'Close',
'最高': 'High', '最低': 'Low',
'成交量': 'Volume'
})
mpf.plot(df_plot, type='candle', volume=True,
style='charles', mav=(5, 20, 60),
title='茅台技术分析')
ta vs TA-Lib vs mplfinance:怎么选?
| | | |
|---|
| 核心能力 | | | |
| 指标数量 | | | |
| 安装难度 | | | |
| 速度 | | | |
| K 线形态 | | | |
| 输出格式 | | | |
| 适合 | | | |
code
一句话选择:
怕折腾安装 → ta(pip install 就完事)
追求完整+速度 → TA-Lib(行业标准)
画图 → mplfinance
最佳组合 → TA-Lib + mplfinance
和系列其他工具的关系
code
完整量化投资流程 v3(最终版):
1. 数据获取
AKShare(A 股)/ yfinance(美股)
2. 技术分析 ← 今天这三个
ta / TA-Lib(计算指标) + mplfinance(画图)
3. 财务分析
FinanceToolkit(150+ 财务指标)
4. AI 选股
Qlib / AI Hedge Fund / FinRL
5. 策略回测
Zipline(全市场选股)
Backtesting.py(快速验证)
Lean(多资产专业引擎)
6. 仓位优化
PyPortfolioOpt
7. 实盘交易
vnpy(国内期货)/ Lean(美股)
技术分析是之前缺失的一环——现在补齐了。
局限性
| |
|---|
| 技术分析不是万能的 | |
| 指标会滞后 | 均线、MACD 都是滞后指标,信号出现时可能已经晚了 |
| 单一指标不可靠 | |
| 参数需要调 | RSI 14 日是默认值,不同市场可能需要不同参数 |
正确使用方式
code
❌ RSI < 30 就买 → 太简单,容易亏
✅ RSI < 30 + MACD 金叉 + 量能放大 + 基本面支持 → 综合判断
技术分析是工具箱里的一把工具,不是圣杯。
小结
code
Python 技术分析三件套:
ta(5K+ Star)
→ 一行加上 40+ 技术指标
→ 安装最简单,适合快速开发
TA-Lib(10K+ Star)
→ 150+ 指标 + 61 种 K 线形态
→ C 语言核心,速度极快,行业标准
mplfinance(3.9K+ Star)
→ 专业 K 线图表
→ matplotlib 官方维护
三者配合 = 完整的技术分析工具链
⚠️ 免责声明:技术分析指标是辅助决策工具,不构成投资建议。任何单一技术指标都不能保证盈利。投资决策应结合基本面分析、市场环境和个人风险承受能力。投资有风险,入市需谨慎。
技术分析是量化投资的基础能力——不管你是手动交易还是写策略回测,这三个工具都用得上。
上一篇 Zipline 没想到这么多人感兴趣,看来大家对量化工具的需求比我想的多
明天推荐这个系列的最后一个工具——PandasAI(2.3 万 Star)。你可以直接问它:"过去三年,这五只股票里涨得最多的是哪只?"它自己写代码、自己跑、自己给你答案。不用写一行代码 👇
#技术分析 #TA-Lib #MACD #RSI #布林带 #Python #K线 #开源 #量化