这是基于Cython而不是Swig的Ta-lib的Python包装纸。来自主页:
TA-LIB通过交易软件开发人员需要对金融市场数据进行技术分析的广泛使用。
- 包括150多个指标,例如ADX,MACD,RSI,随机,布林乐队等。
- 烛台模式识别
- C/C ++的开源API,Java,Perl,Python和100%管理.NET
不幸的是,Ta-lib使用的原始python绑定使用swig很难安装,并且不像可能的那样高效。因此,该项目使用Cython和Numpy有效,干净地与TA-LIB结合 - 产生的结果比SWIG界面快2-4倍。
此外,该项目还支持使用Polars和Pandas库的使用。
您可以从PYPI安装:
$ python -m pip install TA-Lib
或查看源并运行setup.py
。
$ python setup.py install
似乎还可以通过Conda Forge安装:
$ conda install -c conda-forge ta-lib
要将ta-lib用于python,您需要已经安装了ta-lib。您可能应该遵循其平台的安装说明,但下面包括一些建议供参考。
一些Conda Forge用户报告了使用Libta-Lib软件包安装基础TA-LIB C库的成功:
$ conda install -c conda-forge libta-lib
您可以简单地使用Homebrew安装:
$ brew install ta-lib
如果您使用的是Apple Silicon,例如M1处理器,并构建混合体系结构自制项目,则可能需要确保它是为您的架构构建的:
$ arch -arm64 brew install ta-lib
也许您可以在使用pip
之前设置这些设置:
$ export TA_INCLUDE_PATH="$(brew --prefix ta-lib)/include"
$ export TA_LIBRARY_PATH="$(brew --prefix ta-lib)/lib"
您可能还会发现这很有帮助,尤其是如果您尝试了几个不同的装置而没有成功:
$ your-arm64-python -m pip install --no-cache-dir ta-lib
下载ta-lib-0.4.0.4.0-msvc.zip和unzip至C:ta-lib
。
这是一个32位二进制版本。如果您想使用64位Python,则需要构建库的64位版本。一些在64位Windows 10或Windows 11上构建的非官方说明,此处参考:
- 下载并取消拉链
ta-lib-0.4.0-msvc.zip
- 将未拉链的文件夹
ta-lib
移至C:
- 下载并安装Visual Studio社区(2015年或以后)
- 切记选择
[Visual C++]
功能- 构建ta-lib库
- 从Windows Start菜单中开始
[x64 Native Tools Command Prompt]
- 移动到
C:ta-libcmakecdrwin32msvc
- 构建图书馆
nmake
您也可以尝试使用32位和64位的这些非正式的Windows二进制轮毂:
https://github.com/cgohlke/talib-build/
下载ta-lib-0.4.40-src.tar.gz和:
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install
如果您使用
make -jX
构建TA-Lib
那将失败,但这没关系!简单地重新make -jX
然后是[sudo] make install
。
注意:如果您的目录路径包括空格,则安装可能会失败而No such file or directory
错误。
如果您得到这样的警告,则如下:
setup.py:79: UserWarning: Cannot find ta-lib library, installation may fail.
warnings.warn('Cannot find ta-lib library, installation may fail.')
这通常意味着setup.py
找不到基础的TA-Lib
库,这是需要安装的依赖关系。
如果您使用自定义前缀安装了基础TA-Lib
库(例如,带有./configure --prefix=$PREFIX
),那么当您安装此Python包装器时,您可以指定其他搜索路径来查找库并包括文件。使用TA_LIBRARY_PATH
和TA_INCLUDE_PATH
环境变量的基础TA-Lib
库:
$ export TA_LIBRARY_PATH= $PREFIX /lib
$ export TA_INCLUDE_PATH= $PREFIX /include
$ python setup.py install # or pip install ta-lib
有时安装会产生这样的构建错误:
talib/_ta_lib.c:601:10: fatal error: ta-lib/ta_defs.h: No such file or directory
601 | #include "ta-lib/ta_defs.h"
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
或者:
common.obj : error LNK2001: unresolved external symbol TA_SetUnstablePeriod
common.obj : error LNK2001: unresolved external symbol TA_Shutdown
common.obj : error LNK2001: unresolved external symbol TA_Initialize
common.obj : error LNK2001: unresolved external symbol TA_GetUnstablePeriod
common.obj : error LNK2001: unresolved external symbol TA_GetVersionString
这通常意味着它找不到基础的TA-Lib
库,这是需要安装的依赖关系。在Windows上,这可能是由于安装基础TA-Lib
库的32位二进制分布而引起的,但试图将其与64位Python一起使用。
有时安装会因这样的错误而失败:
talib/common.c:8:22: fatal error: pyconfig.h: No such file or directory
#include "pyconfig.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
这通常意味着您需要Python标头,并且应该运行类似的标题:
$ sudo apt-get install python3-dev
有时,构建基础TA-Lib
库会出现错误的错误, make
看起来像这样:
../libtool: line 1717: cd: .libs/libta_lib.lax/libta_abstract.a: No such file or directory
make[2]: *** [libta_lib.la] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all-recursive] Error 1
这可能意味着通往基础TA-Lib
库的目录路径在目录名称中具有空格。尝试将其放置在没有任何空间的路径中,然后再尝试。
有时您可能会得到此错误运行setup.py
:
/usr/include/limits.h:26:10: fatal error: bits/libc-header-start.h: No such file or directory
#include <bits/libc-header-start.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~
这可能是试图为32位平台编译而没有适当的标头的问题。您可能会发现一些成功的答案。
如果您在这样的MacOS上遇到错误:
code signature in <141BC883-189B-322C-AE90-CBF6B5206F67>
'python3.9/site-packages/talib/_ta_lib.cpython-39-darwin.so' not valid for
use in process: Trying to load an unsigned library)
您可能会查看此问题并使用xcrun codesign
进行修复。
如果您想知道为什么STOCHRSI
给您的结果与您的预期不同,那么您可能希望将STOCH
应用于RSI
,这与应用于RSI
STOCHF
的STOCHRSI
有点不同:
>> > import talib
>> > import numpy as np
>> > c = np . random . randn ( 100 )
# this is the library function
>> > k , d = talib . STOCHRSI ( c )
# this produces the same result, calling STOCHF
>> > rsi = talib . RSI ( c )
>> > k , d = talib . STOCHF ( rsi , rsi , rsi )
# you might want this instead, calling STOCH
>> > rsi = talib . RSI ( c )
>> > k , d = talib . STOCH ( rsi , rsi , rsi )
如果构建似乎挂起,您可能会在没有足够内存的VM上运行 - 尝试1 GB或2 GB。
如果您获得此类错误的“权限拒绝”,则可能需要使用户访问安装基础的TA-LIB C库的位置 - 或将其安装到可访问的用户可访问位置。
talib/_ta_lib.c:747:28: fatal error: /usr/include/ta-lib/ta_defs.h: Permission denied
#include "ta-lib/ta-defs.h"
^
compilation terminated
error: command 'gcc' failed with exit status 1
如果您在ARM64上编译基础TA-LIB C库时遇到困难,则可能需要在make
和make install
之前使用显式构建类型进行配置:例如:
$ ./configure --build=aarch64-unknown-linux-gnu
这是由旧的config.guess
文件引起的,因此解决此问题的另一种方法是将较新版本的config.guess复制到基础的ta-lib c库源:
$ cp /usr/share/automake-1.16/config.guess /path/to/extracted/ta-lib/config.guess
然后重新运行配置:
$ ./configure
如果您使用Pyinstaller遇到困难并获得看起来像这样的错误:
...site-packagesPyInstallerloaderpyimod03_importers.py", line 493, in exec_module
exec(bytecode, module.__dict__)
File "talib__init__.py", line 72, in <module>
ModuleNotFoundError: No module named 'talib.stream'
然后,也许您可以使用--hidden-import
参数来解决此问题:
$ pyinstaller --hidden-import talib.stream "replaceToYourFileName.py"
如果要使用numpy<2
,则应使用ta-lib<0.5
。
如果要使用numpy>=2
,则应使用ta-lib>=0.5
。
如果您在Visual Studio Code中使用代码自动完成工作遇到困难,则提出了一个建议以寻找Python
扩展设置和Language Server
的选项,并将其从Default
中更改(这意味着Pylance if it is installed, Jedi otherwise
,要手动设置Jedi
,并且完成工作应该是您需要手动安装的。
与TA-LIB类似,该功能API提供了暴露的TA-LIB指示器的轻量级包装器。
每个函数都返回输出数组并具有其参数的默认值,除非指定为关键字参数。通常,这些功能将具有初始的“回顾”周期(在生成输出之前需要数量的观测值)设置为NaN
。
为了方便起见,该函数API支持numpy.ndarray
和pandas.Series
和polars.Series
输入。
以下所有示例使用函数API:
import numpy as np
import talib
close = np . random . random ( 100 )
计算近距离价格的简单移动平均值:
output = talib . SMA ( close )
计算布林频带,具有三重指数移动平均值:
from talib import MA_Type
upper , middle , lower = talib . BBANDS ( close , matype = MA_Type . T3 )
计算近距离价格的势头,其时间为5:
output = talib . MOM ( close , timeperiod = 5 )
基础ta-lib c库以有时令人惊讶的方式处理NAN,通常将NAN的传播到输出的结尾,例如:
>> > c = np . array ([ 1.0 , 2.0 , 3.0 , np . nan , 4.0 , 5.0 , 6.0 ])
>> > talib . SMA ( c , 3 )
array ([ nan , nan , 2. , nan , nan , nan , nan ])
您可以将其与熊猫滚动的平均值进行比较,在这种方法中,它们的方法是输出NAN,直到观察到足够的“回溯”值以生成新的输出:
>> > c = pandas . Series ([ 1.0 , 2.0 , 3.0 , np . nan , 4.0 , 5.0 , 6.0 ])
>> > c . rolling ( 3 ). mean ()
0 NaN
1 NaN
2 2.0
3 NaN
4 NaN
5 NaN
6 5.0
dtype : float64
如果您已经熟悉使用该功能API,则应该使用抽象API感到宾至如归。
每个功能都采用命名输入的集合, dict
numpy.ndarray
或pandas.Series
或polars.Series
,或pandas.DataFrame
或polars.DataFrame
。如果提供了pandas.DataFrame
或polars.DataFrame
,则输出作为带有命名输出列的同一类型返回。
例如,可以为典型的“ OHLCV”数据提供输入:
import numpy as np
# note that all ndarrays must be the same length!
inputs = {
'open' : np . random . random ( 100 ),
'high' : np . random . random ( 100 ),
'low' : np . random . random ( 100 ),
'close' : np . random . random ( 100 ),
'volume' : np . random . random ( 100 )
}
函数可以直接导入或按名称实例化:
from talib import abstract
# directly
SMA = abstract . SMA
# or by name
SMA = abstract . Function ( 'sma' )
从那里,调用函数基本上与函数API相同:
from talib . abstract import *
# uses close prices (default)
output = SMA ( inputs , timeperiod = 25 )
# uses open prices
output = SMA ( inputs , timeperiod = 25 , price = 'open' )
# uses close prices (default)
upper , middle , lower = BBANDS ( inputs , 20 , 2.0 , 2.0 )
# uses high, low, close (default)
slowk , slowd = STOCH ( inputs , 5 , 3 , 0 , 3 , 0 ) # uses high, low, close by default
# uses high, low, open instead
slowk , slowd = STOCH ( inputs , 5 , 3 , 0 , 3 , 0 , prices = [ 'high' , 'low' , 'open' ])
添加了实验流API,该API允许用户计算指示器的最新值。这可以比使用函数API更快,例如,在接收流数据的应用程序中,并且只想知道最新更新的指示器值。
import talib
from talib import stream
close = np . random . random ( 100 )
# the Function API
output = talib . SMA ( close )
# the Streaming API
latest = stream . SMA ( close )
# the latest value is the same as the last output value
assert ( output [ - 1 ] - latest ) < 0.00001
我们可以显示ta-lib支持的所有ta功能,无论是list
还是由dict
排序(例如“重叠研究”,“动量指标”等):
import talib
# list of functions
for name in talib . get_functions ():
print ( name )
# dict of functions by group
for group , names in talib . get_function_groups (). items ():
print ( group )
for name in names :
print ( f" { name } " )
BBANDS Bollinger Bands
DEMA Double Exponential Moving Average
EMA Exponential Moving Average
HT_TRENDLINE Hilbert Transform - Instantaneous Trendline
KAMA Kaufman Adaptive Moving Average
MA Moving average
MAMA MESA Adaptive Moving Average
MAVP Moving average with variable period
MIDPOINT MidPoint over period
MIDPRICE Midpoint Price over period
SAR Parabolic SAR
SAREXT Parabolic SAR - Extended
SMA Simple Moving Average
T3 Triple Exponential Moving Average (T3)
TEMA Triple Exponential Moving Average
TRIMA Triangular Moving Average
WMA Weighted Moving Average
ADX Average Directional Movement Index
ADXR Average Directional Movement Index Rating
APO Absolute Price Oscillator
AROON Aroon
AROONOSC Aroon Oscillator
BOP Balance Of Power
CCI Commodity Channel Index
CMO Chande Momentum Oscillator
DX Directional Movement Index
MACD Moving Average Convergence/Divergence
MACDEXT MACD with controllable MA type
MACDFIX Moving Average Convergence/Divergence Fix 12/26
MFI Money Flow Index
MINUS_DI Minus Directional Indicator
MINUS_DM Minus Directional Movement
MOM Momentum
PLUS_DI Plus Directional Indicator
PLUS_DM Plus Directional Movement
PPO Percentage Price Oscillator
ROC Rate of change : ((price/prevPrice)-1)*100
ROCP Rate of change Percentage: (price-prevPrice)/prevPrice
ROCR Rate of change ratio: (price/prevPrice)
ROCR100 Rate of change ratio 100 scale: (price/prevPrice)*100
RSI Relative Strength Index
STOCH Stochastic
STOCHF Stochastic Fast
STOCHRSI Stochastic Relative Strength Index
TRIX 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
ULTOSC Ultimate Oscillator
WILLR Williams' %R
AD Chaikin A/D Line
ADOSC Chaikin A/D Oscillator
OBV On Balance Volume
HT_DCPERIOD Hilbert Transform - Dominant Cycle Period
HT_DCPHASE Hilbert Transform - Dominant Cycle Phase
HT_PHASOR Hilbert Transform - Phasor Components
HT_SINE Hilbert Transform - SineWave
HT_TRENDMODE Hilbert Transform - Trend vs Cycle Mode
AVGPRICE Average Price
MEDPRICE Median Price
TYPPRICE Typical Price
WCLPRICE Weighted Close Price
ATR Average True Range
NATR Normalized Average True Range
TRANGE True Range
CDL2CROWS Two Crows
CDL3BLACKCROWS Three Black Crows
CDL3INSIDE Three Inside Up/Down
CDL3LINESTRIKE Three-Line Strike
CDL3OUTSIDE Three Outside Up/Down
CDL3STARSINSOUTH Three Stars In The South
CDL3WHITESOLDIERS Three Advancing White Soldiers
CDLABANDONEDBABY Abandoned Baby
CDLADVANCEBLOCK Advance Block
CDLBELTHOLD Belt-hold
CDLBREAKAWAY Breakaway
CDLCLOSINGMARUBOZU Closing Marubozu
CDLCONCEALBABYSWALL Concealing Baby Swallow
CDLCOUNTERATTACK Counterattack
CDLDARKCLOUDCOVER Dark Cloud Cover
CDLDOJI Doji
CDLDOJISTAR Doji Star
CDLDRAGONFLYDOJI Dragonfly Doji
CDLENGULFING Engulfing Pattern
CDLEVENINGDOJISTAR Evening Doji Star
CDLEVENINGSTAR Evening Star
CDLGAPSIDESIDEWHITE Up/Down-gap side-by-side white lines
CDLGRAVESTONEDOJI Gravestone Doji
CDLHAMMER Hammer
CDLHANGINGMAN Hanging Man
CDLHARAMI Harami Pattern
CDLHARAMICROSS Harami Cross Pattern
CDLHIGHWAVE High-Wave Candle
CDLHIKKAKE Hikkake Pattern
CDLHIKKAKEMOD Modified Hikkake Pattern
CDLHOMINGPIGEON Homing Pigeon
CDLIDENTICAL3CROWS Identical Three Crows
CDLINNECK In-Neck Pattern
CDLINVERTEDHAMMER Inverted Hammer
CDLKICKING Kicking
CDLKICKINGBYLENGTH Kicking - bull/bear determined by the longer marubozu
CDLLADDERBOTTOM Ladder Bottom
CDLLONGLEGGEDDOJI Long Legged Doji
CDLLONGLINE Long Line Candle
CDLMARUBOZU Marubozu
CDLMATCHINGLOW Matching Low
CDLMATHOLD Mat Hold
CDLMORNINGDOJISTAR Morning Doji Star
CDLMORNINGSTAR Morning Star
CDLONNECK On-Neck Pattern
CDLPIERCING Piercing Pattern
CDLRICKSHAWMAN Rickshaw Man
CDLRISEFALL3METHODS Rising/Falling Three Methods
CDLSEPARATINGLINES Separating Lines
CDLSHOOTINGSTAR Shooting Star
CDLSHORTLINE Short Line Candle
CDLSPINNINGTOP Spinning Top
CDLSTALLEDPATTERN Stalled Pattern
CDLSTICKSANDWICH Stick Sandwich
CDLTAKURI Takuri (Dragonfly Doji with very long lower shadow)
CDLTASUKIGAP Tasuki Gap
CDLTHRUSTING Thrusting Pattern
CDLTRISTAR Tristar Pattern
CDLUNIQUE3RIVER Unique 3 River
CDLUPSIDEGAP2CROWS Upside Gap Two Crows
CDLXSIDEGAP3METHODS Upside/Downside Gap Three Methods
BETA Beta
CORREL Pearson's Correlation Coefficient (r)
LINEARREG Linear Regression
LINEARREG_ANGLE Linear Regression Angle
LINEARREG_INTERCEPT Linear Regression Intercept
LINEARREG_SLOPE Linear Regression Slope
STDDEV Standard Deviation
TSF Time Series Forecast
VAR Variance