這是基於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