by 雪隐_上班了 from juejin.cn/user/143341...
欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可联系授权。
你以为炒股只能靠第六感?有了 TA-Lib,你就能用代码把技术指标算得明明白白,顺便告别"我觉得要涨了"这种玄学。
什么是 TA-Lib(别怕,就是一堆现成的函数)
TA-Lib 全称 Technical Analysis Library,翻译过来就是"技术分析全家桶"。它是一个用 C 语言写的开源库,专门给金融数据算各种指标------150 多种,比你认识的股票代码还多。
TA-Lib 的四大优点:
- 快得像闪电:底层 C 语言,跑起来嗖嗖的,你的 Python 循环还没开始,它已经算完了
- 要啥有啥:趋势指标、震荡指标、波动率指标、成交量指标......甚至连 K 线形态识别都有,60 多种蜡烛图,比算命先生还专业
- 傻瓜式调用:输入 NumPy 数组,输出 NumPy 数组,代码比煮泡面还简单
- 明星同款:Quantopian、vnpy 这些量化大咖都在用,你用了就是圈内人
那些你听过的 MACD、RSI、布林带、KDJ、威廉指标......TA-Lib 全都有,而且一行代码就能算出来。
Windows 环境安装(这是最痛苦的环节,坚持住)
TA-Lib 的 Python 包名字就叫 TA-Lib,但安装过程有点小脾气,因为它底层是 C 库,需要你先伺候好 C 环境。
安装方式一:直接 pip 安装(省心省力)
如果你用的是 64 位 Windows,可以直接尝试:
bash
pip install TA-Lib
如果这行命令跑通了,恭喜你,你是天选之子。如果报错了......看下面。
安装方式二:手动安装(需要 C++ 编译器)
如果 pip 直接装失败了,说明你需要手动编译 C 库。步骤不多,但挺折腾:
第一步:装好 TA-Lib 的 C 库
-
去这里下载源码:sourceforge.net/projects/ta...
-
解压到
C:\ta-lib(别乱放,就放这儿) -
编译它。如果你装了 Visual Studio,打开命令行:
bashcd C:\ta-lib build.bat如果没装 VS......建议先装 Visual Studio Build Tools,勾选"使用 C++ 的桌面开发"。
第二步:装 Python 包
bash
pip install TA-Lib
常见翻车现场
Q: 提示 "Failed to build TA-Lib"?
翻译:你的电脑没有 C 编译器。去装 Visual Studio Build Tools,或者直接换 Linux 吧,那边省心。
Q: 提示 "Cannot find ta_lib"?
翻译:C 库没装对。确认 C:\ta-lib 下真的有编译好的文件,并且 PATH 环境变量包含了库路径。
macOS / Linux 安装(幸福的人儿)
macOS 用户:
bash
brew install ta-lib
pip install TA-Lib
Ubuntu/Debian 用户:
bash
sudo apt-get install ta-lib
pip install TA-Lib
基础依赖安装(顺便的事)
装完 TA-Lib,还得装它的好朋友 NumPy 和 Pandas:
bash
pip install numpy pandas requests TA-Lib
数据加载(指标算的是数据,不是空气)
技术指标计算需要 OHLCV 数据,就是开盘价、最高价、最低价、收盘价、成交量。本项目支持两种来源:
从 CSV 加载(如果有现成的)
python
def load_from_csv(csv_path):
"""从 CSV 加载 OHLCV 数据,CSV 里得包含 open/high/low/close/volume 列"""
df = pd.read_csv(csv_path)
for col in ['open', 'high', 'low', 'close']:
if col not in df.columns:
raise ValueError(f"CSV 文件里没有 {col} 列,你让我算什么?")
close = df['close'].astype(float).values
high = df['high'].astype(float).values if 'high' in df.columns else close * 1.01
low = df['low'].astype(float).values if 'low' in df.columns else close * 0.99
open_ = df['open'].astype(float).values if 'open' in df.columns else close
return close, high, low, open_, df
通过 REST API 获取股票数据(更酷)
本项目通过 Flask API 服务获取股票 K 线,具体怎么搭可以参考 AI股票小助手05-用 Flask 把 MiniQMT 变成 REST API。核心就一行:
python
def load_from_stock(stock_code, count=200):
"""通过 HTTP API 获取股票数据,不用自己找数据文件"""
df = try_http_then_db(stock_code, count=count)
close = df['close'].values.astype(float)
high = df['high'].values.astype(float)
low = df['low'].values.astype(float)
open_ = df['open'].values.astype(float)
return close, high, low, open_, df
这个 API 背后是 MiniQMT 的行情接口,沪深两市的数据随便拿。
技术指标计算(终于到正文了)
TA-Lib 的函数多到眼花,这里挑几个最常见的给你看。
1. 简单移动平均线 (SMA) ------ 老奶奶都会算
python
def calc_sma(close, period=10):
out = talib.SMA(close, timeperiod=period)
return {"sma": out.tolist(), "period": period}
SMA 就是过去 N 天的收盘价平均值,没啥黑科技,但就是好用。
2. 指数移动平均线 (EMA) ------ 喜新厌旧的均线
python
def calc_ema(close, period=12):
out = talib.EMA(close, timeperiod=period)
return {"ema": out.tolist(), "period": period}
EMA 给近期的价格更高的权重,所以它比 SMA 更"冲动",反应更快。
3. MACD ------ 趋势跟踪界的扛把子
python
def calc_macd(close, fast=12, slow=26, signal=9):
macd, sig, hist = talib.MACD(close, fastperiod=fast, slowperiod=slow, signalperiod=signal)
return {"macd": macd.tolist(), "signal": sig.tolist(), "histogram": hist.tolist()}
MACD 由快线、慢线、柱状图三兄弟组成。金叉买、死叉卖,是个人都知道。
4. RSI ------ 判断是不是该跑路了
python
def calc_rsi(close, period=14):
out = talib.RSI(close, timeperiod=period)
return {"rsi": out.tolist(), "period": period}
RSI 取值范围 0-100。低于 30 叫"超卖",该买了;高于 70 叫"超买",该卖了。当然,牛市中它能一直 80 以上,你卖了就卖飞------所以别太迷信。
5. ATR ------ 告诉你市场有多疯
python
def calc_atr(high, low, close, period=14):
out = talib.ATR(high, low, close, timeperiod=period)
return {"atr": out.tolist(), "period": period}
ATR 衡量价格波动幅度,ATR 越大,说明市场越暴躁。很多人用它来设止损------比如 2 倍 ATR 止损。
6. 布林带 ------ 价格的三条轨道
python
def calc_bbands(close, period=20, nbdevup=2, nbdevdn=2):
upper, mid, lower = talib.BBANDS(close, timeperiod=period, nbdevup=nbdevup, nbdevdn=nbdevdn)
return {"upper": upper.tolist(), "middle": mid.tolist(), "lower": lower.tolist(), "period": period}
布林带 = 中轨(均线)+ 上下两条标准差轨道。价格碰到下轨可能反弹,碰到上轨可能回落------但趋势来的时候,它能沿着上轨一直涨,让你卖到怀疑人生。
指标注册机制(像菜单一样点菜)
代码里用了一个字典,把所有指标函数都登记在册,像饭店的菜单:
python
INDICATORS = {
"sma": (calc_sma, ["close"], {"period": 10}),
"ema": (calc_ema, ["close"], {"period": 12}),
"macd": (calc_macd, ["close"], {"fast": 12, "slow": 26, "signal": 9}),
"rsi": (calc_rsi, ["close"], {"period": 14}),
"atr": (calc_atr, ["high", "low", "close"], {"period": 14}),
"bbands": (calc_bbands, ["close"], {"period": 20, "nbdevup": 2, "nbdevdn": 2}),
}
你想加新指标,往字典里塞一行就行,不需要改别的代码。
命令行使用(一键出结果)
bash
# 从 CSV 文件计算 SMA
python calc_indicators.py sma data.csv
# 从 CSV 计算布林带,自己指定周期
python calc_indicators.py bbands data.csv --period 30
# 直接用股票代码获取数据,计算 RSI
python calc_indicators.py rsi -s 600519 -n 200
跑完之后,你会看到类似下面的 JSON 输出。
输出示例(数字不会骗人)
json
{
"rsi": [45.2, 48.1, 52.3, ...],
"period": 14,
"length": 200,
"last_values": {
"rsi": 65.32
}
}
rsi:整个数组,全部算出来了last_values:最后一个值,看当前状态用的length:原始数据长度
TA-Lib vs Backtrader ------ 别搞混了
很多人刚开始会分不清 TA-Lib 和 Backtrader,这里给你说人话:
| 特性 | TA-Lib | Backtrader |
|---|---|---|
| 它是干啥的 | 算指标的工具箱 | 做回测的框架 |
| 能算多少指标 | 150+,还有 60+ K线形态 | 基本没有内置,得靠 TA-Lib |
| 能回测吗 | 不能 | 能,而且很强 |
| 学习曲线 | 平缓 | 稍陡 |
总结:TA-Lib 负责算,Backtrader 负责跑。它俩是好基友,经常一起用。
TA-Lib 独有的 K 线形态识别(这个 Backtrader 真没有)
这是 TA-Lib 最牛的功能------自动识别 60 多种日本蜡烛图形态。比你看技术图谱快多了。
单根 K 线形态
python
import talib
# 锤子线(Hammer)------ 跌多了有人抄底
real = talib.CDLHAMMER(open, high, low, close)
# 射击星(Shooting Star)------ 涨多了有人砸盘
real = talib.CDLSHOOTINGSTAR(open, high, low, close)
# 十字星(Doji)------ 多空打平
real = talib.CDLDOJI(open, high, low, close)
# 倒锤头(Inverted Hammer)------ 上影线长长,下影线没有
real = talib.CDLINVERTEDHAMMER(open, high, low, close)
两根 K 线形态
python
# 吞没形态(Engulfing)------ 一根吃掉另一根
real = talib.CDLENGULFING(open, high, low, close)
# 乌云盖顶(Dark Cloud Cover)------ 看起来很吓人
real = talib.CDLDARKCLOUDCOVER(open, high, low, close)
# 贯穿线(Piercing)------ 反过来,看起来要涨
real = talib.CDLPIERCING(open, high, low, close)
三根 K 线形态
python
# 早晨之星(Morning Star)------ 早晨的星星,涨的信号
real = talib.CDLMORNINGSTAR(open, high, low, close, penetration=0)
# 黄昏之星(Evening Star)------ 黄昏来了,该跑了
real = talib.CDLEVENINGSTAR(open, high, low, close, penetration=0)
# 三白兵(Three White Soldiers)------ 连续三根阳线,多头凶猛
real = talib.CDL3WHITESOLDIERS(open, high, low, close)
返回值说明
所有 CDL* 函数返回的都是整数数组:
> 0:看涨信号(比如锤子线、早晨之星)< 0:看跌信号(比如射击星、黄昏之星)= 0:啥信号都没有,洗洗睡吧
实际使用示例(直接抄)
python
import talib
import numpy as np
# 假设你已经有了 open, high, low, close 四个数组
# 识别锤子线
hammer = talib.CDLHAMMER(open_, high, low, close)
# 找出所有锤子线的位置
hammer_signals = np.where(hammer > 0)[0]
print(f"发现 {len(hammer_signals)} 个锤子线,要不要买你自己决定")
# 识别吞没形态
engulfing = talib.CDLENGULFING(open_, high, low, close)
bullish_engulfing = np.where(engulfing > 0)[0] # 看涨吞没
bearish_engulfing = np.where(engulfing < 0)[0] # 看跌吞没
常用 TA-Lib 函数一览(建议收藏)
| 类别 | 函数 | 说明 |
|---|---|---|
| 趋势 | SMA, EMA, WMA, DEMA | 各种移动平均线 |
| 趋势 | MACD, AROON, ADX | 趋势有多强 |
| 震荡 | RSI, Stochastic, CCI | 超买超卖 |
| 波动 | ATR, NATR, TRANGE | 市场有多疯 |
| 成交量 | OBV, AD, CMF | 资金流向 |
| 形态 | CDL系列函数 | 蜡烛图形态识别 |
总结(记住三句话就够了)
- TA-Lib 是一个算技术指标的库,C 语言写的,贼快。
- 150 多种指标 + 60 多种 K 线形态,一行代码搞定一个。
- 它可以和 Backtrader 配合使用:TA-Lib 负责算,Backtrader 负责回测。
安装时可能会踩坑,尤其是 Windows 用户。但只要装好了,用起来那叫一个爽。
写在最后
如果这篇文章让你成功装上了 TA-Lib,或者帮你省下了找文档的时间,请点赞 + 评论 。
如果安装还是失败......别灰心,大家都经历过。去 Linux 吧,那里是量化交易的天堂。
祝你代码无 Bug,回测常赚钱。 😎