引入

之前我们讨论过一些偏基础的金融库,比如 stockstats 可以很快帮我们把常见指标算出来。在实战中,很快会发现“有指标”还远远不够。很多时候需要的是更复杂的信息结构,比如趋势方向、支撑位和阻力位的位置关系,信号之间的组合判断,以及最基本也最容易被忽略的回测验证。

今天来看看一些较为高阶的 Python 金融库。许多库都被称为“技术分析库”,但它们的目标其实各不相同。像 TTI 和 pandas-ta 恰好是两种走向几乎完全相反的代表。它们正好位于交易系统中的两个不同层次,一个侧重于结构和决策的雏形,另一个侧重于高阶信息的提取和配置。

## 分析
如果粗略分一下层次,大概可以理解成两层:
更底层的是“特征层”,主要工作是把价格序列加工成可以使用的结构化信息,比如各种技术指标、趋势信息、支撑阻力等,这一层尽量客观,尽量少做判断。
再上一层是“策略层”,开始引入规则,比如什么时候算买点、什么时候该卖出,这一层不可避免会掺杂人的主观选择。
在这个框架下看,TTI 更靠近策略,pandas-ta 更靠近特征。它们的差异,本质上是封装程度的差异。

TTI

TTI—更像“半成品策略引擎”。它 的设计思路是高度封装。它不仅帮你算指标,还顺手把“信号”(买点/卖点)也做了,同时还打包了图形显示和回测。用户能看到类似“当前是买、卖还是观望”的结果,这一点对初学者来说非常直观。

它的缺点是灵活性受限,只能修改指标参数,无法进行复杂的调整和组合,这在实战场景中就很难用了。

  • 无法自定义交易规则(比如:只在特定条件下才买卖)
  • 无法组合多个指标(比如:MACD + RSI 双重确认)
  • 无法控制仓位管理、止损止盈等高级策略

它更像一个“策略的样板间”,更适合用来做快速测试、概念验证和学习结构,而不是直接用于实盘逻辑。

安装方法:

1
2
pip install tti

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd
from tti.indicators import MovingAverageConvergenceDivergence

macd = MovingAverageConvergenceDivergence(input_data=df) # 初始化
ti_df = macd.getTiData() # 得到 MACD 指标数据(DataFrame)
signal, signal_code = macd.getTiSignal() # 得到当前是 buy/hold/sell
print(signal, signal_code)
macd.getTiGraph().show()

simulation_df, stats, sim_chart = macd.getTiSimulation(
close_values = df[['close']],
max_exposure = None,
short_exposure_factor = 1.0 # 如果你要开空/做空,也可以设参数
)
print(stats) # 输出回测统计信息
sim_chart.show() # 画出回测盈亏图


这里直接计算并画出了持仓及盈亏情况。

pandas-ta

pandas-ta—更像“特征工厂”,它几乎从不帮你下结论,只负责尽可能多地把技术指标算出来。

它的输出通常就是一堆 DataFrame 列,剩下的事情几乎全交给你。怎么组合这些指标?什么是有效信号?过滤条件怎么设?全靠你自己设计。

优点也很明显,自由度极高。趋势类、震荡类指标都有现成实现,支撑阻力、趋势方向、上下轨这类东西也能开箱即用。你可以把它当成一整套“原材料库”,先把常见功能快速铺开,再一点点打磨细节。

它的门槛更高,但也更贴近真实策略开发的方式,更像是特征工程的一部分,而不是策略本身。

使用说明:https://www.pandas-ta.dev/getting-started/usage/

安装方法

1
2
pip install pandas-ta

如果 python 低于 3.12 可下载包安装:

1
2
$ curl https://www.pandas-ta.dev/assets/zip/pandas_ta-0.3.14b.tar.gz -o pandas-ta.tar.gz
$ pip3 install pandas-ta.tar.gz

使用示例:pandas-ta 计算出的阻力和支撑位

(pandas-ta 提供多种趋势计算方法,将在后续文章中详细介绍)

总结

TTI 更像一个认知工具,用来帮你快速建立“指标 - 信号 - 回测”这一整条链路的直觉;pandas-ta 更像一个生产工具,你可以用它搭建属于自己的特征层,再在上面构建策略逻辑。

很多技术形态,比如趋势线、支撑阻力,本身就很难说绝对对错。自己从零写不一定更好,但成熟库的价值,在于能让你先把骨架搭起来。先跑起来,再发现哪里不对,再慢慢细化,这往往比一开始就追求完美更现实。