当前位置:首页>python>一行代码算出 130 个技术指标——Python 技术分析工具盘点

一行代码算出 130 个技术指标——Python 技术分析工具盘点

  • 2026-09-10 16:27:40
一行代码算出 130 个技术指标——Python 技术分析工具盘点

很多人学了很久的技术分析,能看懂 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()

四大类指标

类别
指标
说明
趋势
MACD、SMA、EMA、ADX、CCI
判断涨跌趋势
动量
RSI、Stochastic(KDJ)、Williams %R、ROC
判断超买超卖
波动率
Bollinger Bands、ATR、Keltner Channel
判断波动大小
成交量
OBV、VWAP、MFI、CMF
判断量能

实话实说

优点
缺点
✅ 安装简单 pip install
❌ 指标相比 TA-Lib 少一些
✅ 一行加上所有指标
❌ 计算速度比 C 语言的 TA-Lib 慢
✅ 纯 Python,跨平台
❌ 部分指标参数不如 TA-Lib 灵活
✅ 文档清晰

适合谁: 想快速给 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 能做。

实话实说

优点
缺点
✅ 150+ 指标,最全
❌ 安装需要编译 C 库
✅ C 语言核心,速度极快
❌ Windows 安装尤其麻烦
✅ 61 种 K 线形态识别
❌ API 风格偏老(numpy 数组为主)
✅ 行业标准

适合谁: 需要完整指标库、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 + 布林带,一张图全搞定。 这就是专业看盘软件里的图表。

实话实说

优点
缺点
✅ matplotlib 官方维护
❌ 不计算指标,只负责画图
✅ K 线图专业好看
❌ 交互性不如 Plotly
✅ 叠加指标灵活
❌ 只能生成静态图

适合谁: 需要生成专业 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:怎么选?

对比
ta
TA-Lib
mplfinance
核心能力
计算指标
计算指标 + K 线形态
画 K 线图
指标数量
40+
150+
不计算指标
安装难度
⭐ 最简单
⭐⭐⭐ 需编译 C
⭐ 简单
速度
中等
极快(C 语言)
—
K 线形态
❌
✅ 61 种
❌
输出格式
pandas
numpy
图表
适合
快速加指标
完整分析
可视化

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线 #开源 #量化

最新文章

随机文章