Dies ist eine Python-Wrapper für Ta-Lib, die auf Cython anstelle von Swig basiert. Von der Homepage:
TA-LIB wird von Handelssoftwareentwicklern häufig verwendet, die eine technische Analyse von Finanzmarktdaten durchführen müssen.
- Enthält 150+ Indikatoren wie ADX, MACD, RSI, Stochastic, Bollinger -Bänder usw.
- Candlestick -Mustererkennung
- Open-Source-API für C/C ++, Java, Perl, Python und 100% Managed .net
Die ursprünglichen Python-Bindungen, die in TA-Lib enthalten sind, verwenden SWig, die leider schwer zu installieren sind und nicht so effizient wie möglich sind. Daher verwendet dieses Projekt Cython und Numpy, um an Ta-Lib effizient und sauber zu binden und die Ergebnisse 2-4-mal schneller zu erzeugen als die SWig-Grenzfläche.
Darüber hinaus unterstützt dieses Projekt auch die Verwendung der Polar- und Pandas -Bibliotheken.
Sie können von PYPI installieren:
$ python -m pip install TA-Lib
Oder überprüfen Sie die Quellen und führen Sie setup.py
selbst aus:
$ python setup.py install
Es erscheint auch möglich, über Conda Forge zu installieren:
$ conda install -c conda-forge ta-lib
Um TA-Lib für Python zu verwenden, müssen Sie die TA-Lib bereits installieren lassen. Sie sollten wahrscheinlich ihre Installationsanweisungen für Ihre Plattform befolgen, aber einige Vorschläge sind unten als Referenz enthalten.
Einige Konda-Forge-Benutzer haben mit dem LIBTA-LIB-Paket erfolgreich gebeten, die zugrunde liegende TA-Lib C-Bibliothek zu installieren:
$ conda install -c conda-forge libta-lib
Sie können einfach mit Homebrew installieren:
$ brew install ta-lib
Wenn Sie Apple Silicon wie die M1 -Prozessoren verwenden und gemischte Architektur -Homebrew -Projekte bauen, sollten Sie sicherstellen, dass sie für Ihre Architektur gebaut werden:
$ arch -arm64 brew install ta-lib
Und vielleicht können Sie diese vor der Installation mit pip
einstellen:
$ export TA_INCLUDE_PATH="$(brew --prefix ta-lib)/include"
$ export TA_LIBRARY_PATH="$(brew --prefix ta-lib)/lib"
Möglicherweise finden Sie dies auch hilfreich, insbesondere wenn Sie ohne Erfolg verschiedene Installationen ausprobiert haben:
$ your-arm64-python -m pip install --no-cache-dir ta-lib
Laden Sie TA-lib-0.4.0-msvc.zip und entpep auf C:ta-lib
herunter.
Dies ist eine 32-Bit-Binärfreisetzung. Wenn Sie 64-Bit-Python verwenden möchten, müssen Sie eine 64-Bit-Version der Bibliothek erstellen. Einige inoffizielle Anweisungen zum Aufbau auf 64-Bit-Windows 10 oder Windows 11, hier als Referenz:
- Download und
ta-lib-0.4.0-msvc.zip
download und unzip- Bewegen Sie den unzippierten Ordner
ta-lib
aufC:
- Download und installieren Sie Visual Studio Community (2015 oder später)
- Denken Sie daran, die
[Visual C++]
-Funktion auszuwählen- Bauen Sie die TA-Lib-Bibliothek
- Starten Sie aus dem Windows -Startmenü
[x64 Native Tools Command Prompt]
- Wechseln Sie zu
C:ta-libcmakecdrwin32msvc
- Bauen Sie die Bibliothek
nmake
auf
Sie können diese inoffiziellen Fenster-Binärräder sowohl für 32-Bit- als auch für 64-Bit-Räder ausprobieren:
https://github.com/cgohlke/talib-build/
Download Ta-lib-0.4.0-src.tar.gz und:
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install
Wenn Sie
TA-Lib
mitmake -jX
bauen, wird es fehlschlagen, aber das ist in Ordnung! Einfach wiederholenmake -jX
, gefolgt von[sudo] make install
.
Hinweis: Wenn Ihr Verzeichnispfad Leerzeichen enthält, fehlschlägt die Installation wahrscheinlich No such file or directory
.
Wenn Sie eine Warnung erhalten, die so aussieht:
setup.py:79: UserWarning: Cannot find ta-lib library, installation may fail.
warnings.warn('Cannot find ta-lib library, installation may fail.')
Dies bedeutet normalerweise, dass setup.py
die zugrunde liegende TA-Lib
-Bibliothek nicht finden kann, eine Abhängigkeit, die installiert werden muss.
Wenn Sie die zugrunde liegende TA-Lib
-Bibliothek mit einem benutzerdefinierten Präfix (z. B. mit ./configure --prefix=$PREFIX
) installiert haben Für die zugrunde liegende TA-Lib
-Bibliothek mit den Umgebungsvariablen TA_LIBRARY_PATH
und TA_INCLUDE_PATH
:
$ export TA_LIBRARY_PATH= $PREFIX /lib
$ export TA_INCLUDE_PATH= $PREFIX /include
$ python setup.py install # or pip install ta-lib
Manchmal erzeugt die Installation solche Build -Fehler wie folgt:
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.
oder:
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
Dies bedeutet normalerweise, dass die zugrunde liegende TA-Lib
-Bibliothek nicht gefunden wird, eine Abhängigkeit, die installiert werden muss. Unter Windows könnte dies durch die Installation der 32-Bit-Binärverteilung der zugrunde liegenden TA-Lib
-Bibliothek verursacht werden, sie jedoch mit 64-Bit-Python-Python verwenden.
Manchmal schlägt die Installation mit solchen Fehlern aus:
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
Dies bedeutet in der Regel, dass Sie die Python -Headers benötigen und so etwas wie folgt betreiben sollten:
$ sudo apt-get install python3-dev
Wenn Sie die zugrunde liegende TA-Lib
-Bibliothek erstellen, wird dies so aussehen make
wie folgt:
../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
Dies könnte bedeuten, dass der Verzeichnisweg zur zugrunde liegenden TA-Lib
-Bibliothek Platz in den Verzeichnisnamen hat. Versuchen Sie, es auf einen Weg zu setzen, der keine Räume hat und es erneut versucht.
Manchmal können Sie diesen Fehler ausführen. 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>
^~~~~~~~~~~~~~~~~~~~~~~~~~
Dies ist wahrscheinlich ein Problem beim Versuch, für eine 32-Bit-Plattform zu kompilieren, jedoch ohne die entsprechenden Header. Möglicherweise finden Sie einige Erfolge mit der ersten Antwort auf diese Frage.
Wenn Sie einen Fehler bei macOS wie folgt erhalten:
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)
Sie können sich diese Frage ansehen und xcrun codesign
verwenden, um sie zu beheben.
Wenn Sie sich fragen, warum STOCHRSI
Ihnen unterschiedliche Ergebnisse liefert als Sie erwarten, möchten Sie wahrscheinlich, dass STOCH
auf RSI
angewendet wird. Dies unterscheidet sich etwas von der STOCHRSI
STOCHF
die auf RSI
angewendet wird:
>> > 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 )
Wenn der Build zu hängen scheint, werden Sie möglicherweise auf einer VM mit nicht genügend Speicher laufen - probieren Sie 1 GB oder 2 GB aus.
Wenn Sie Fehler wie diese "Erlaubnis abgelehnt" erhalten, müssen Sie möglicherweise Ihren Benutzer zugreifen, an dem die zugrunde liegende Ta-Lib-C-Bibliothek installiert ist-oder sie an einem benutzergerechten Ort installieren.
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
Wenn Sie Schwierigkeiten haben, die zugrunde liegende TA-Lib C-Bibliothek auf ARM64 zu kompilieren, müssen Sie sie möglicherweise mit einem expliziten Build-Typ konfigurieren, bevor Sie die Installation make
und make install
, beispielsweise:
$ ./configure --build=aarch64-unknown-linux-gnu
Dies wird durch die alte Datei der alten config.guess
.
$ cp /usr/share/automake-1.16/config.guess /path/to/extracted/ta-lib/config.guess
Und dann konfigurieren Sie dann erneut:
$ ./configure
Wenn Sie Probleme mit Pyinstaller haben und einen Fehler erhalten, der so aussieht:
...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'
Dann können Sie vielleicht das Argument --hidden-import
verwenden, um dies zu beheben:
$ pyinstaller --hidden-import talib.stream "replaceToYourFileName.py"
Wenn Sie numpy<2
verwenden möchten, sollten Sie ta-lib<0.5
verwenden.
Wenn Sie numpy>=2
verwenden möchten, sollten Sie ta-lib>=0.5
verwenden.
Wenn Sie Schwierigkeiten haben, die automatischen Vervollständigungen der Code in Visual Studio -Code zu bearbeiten, wurde ein Vorschlag gemacht, nach den Einstellungen zur Erweiterung der Python
-Erweiterung zu suchen, und eine Option für Language Server
, und dies von Default
zu ändern (was bedeutet Pylance if it is installed, Jedi otherwise
, um Jedi
und die Fertigstellung manuell einzustellen, sollten möglicherweise funktionieren, um es manuell zu installieren, damit dies funktioniert.
Ähnlich wie bei TA-Lib liefert die Funktion API einen leichten Wrapper der freiliegenden Ta-Lib-Indikatoren.
Jede Funktion gibt ein Ausgabearray zurück und hat Standardwerte für ihre Parameter, sofern nicht als Schlüsselwortargumente angegeben. In der Regel haben diese Funktionen einen anfänglichen "Lookback" -Perster (eine erforderliche Anzahl von Beobachtungen, bevor ein Ausgang generiert wird) auf NaN
eingestellt.
Aus Gründen der Bequemlichkeit unterstützt die Funktion API sowohl numpy.ndarray
als auch pandas.Series
und polars.Series
-Eingänge.
Alle folgenden Beispiele verwenden die Funktion API:
import numpy as np
import talib
close = np . random . random ( 100 )
Berechnen Sie einen einfachen gleitenden Durchschnitt der engen Preise:
output = talib . SMA ( close )
Berechnung von Bollinger -Bändern mit einem dreifachen, exponentiellen gleitenden Durchschnitt:
from talib import MA_Type
upper , middle , lower = talib . BBANDS ( close , matype = MA_Type . T3 )
Berechnung der Dynamik der engen Preise mit einem Zeitraum von 5:
output = talib . MOM ( close , timeperiod = 5 )
Die zugrunde liegende Ta-Lib C-Bibliothek übernimmt NANs manchmal überraschend, indem sie beispielsweise die NANs bis zum Ende der Ausgabe verbreiten:
>> > 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 ])
Sie können dies mit einem Pandas -Rolling -Mittel vergleichen, bei dem ihr Ansatz dazu besteht, NAN auszugeben, bis genügend "Lookback" -Werte neue Ausgänge generieren:
>> > 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
Wenn Sie bereits mit der Funktion der Funktion API vertraut sind, sollten Sie sich mit der abstrakten API zu Hause fühlen.
Jede Funktion nimmt eine Sammlung benannter Eingänge, entweder ein dict
von numpy.ndarray
oder pandas.Series
oder polars.Series
oder einem pandas.DataFrame
oder polars.DataFrame
. Wenn ein pandas.DataFrame
oder polars.DataFrame
bereitgestellt wird, wird die Ausgabe als der gleiche Typ mit benannten Ausgabemaltern zurückgegeben.
Beispielsweise könnten Eingaben für die typischen "OHLCV" -Daten bereitgestellt werden:
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 )
}
Funktionen können entweder direkt oder mit Namen instanziiert werden:
from talib import abstract
# directly
SMA = abstract . SMA
# or by name
SMA = abstract . Function ( 'sma' )
Von dort aus ist das Aufrufen von Funktionen im Grunde die gleiche wie die Funktionsapi:
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' ])
Es wurde eine experimentelle Streaming -API hinzugefügt, mit der Benutzer den neuesten Wert eines Indikators berechnen können. Dies kann schneller sein als die Verwendung der Funktion API, beispielsweise in einer Anwendung, die Streaming -Daten empfängt und nur den neuesten aktualisierten Indikatorwert kennenlernen möchte.
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
Wir können alle von Ta-Lib unterstützten TA-Funktionen entweder als list
oder als von der Gruppe dict
(z. B. "Überlappungsstudien", "Momentumsindikatoren" usw.) zeigen:
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