Это обертка для питона для TA-LIB, основанная на цинтоне вместо SWIG. С домашней страницы:
TA-LIB широко используется торговыми разработчиками программного обеспечения, требующим выполнения технического анализа данных финансового рынка.
- Включает более 150 индикаторов, таких как ADX, MACD, RSI, Stochastic, Bollinger Gans и т. Д.
- Подсвечник распознавание образца
- API с открытым исходным кодом для C/C ++, Java, Perl, Python и 100% Managed .net
Оригинальные привязки Python, включенные в TA-LIB, используют SWIG, который, к сожалению, трудно установить и не так эффективно, как это. Следовательно, этот проект использует цифон и Numpy для эффективного и чистого связывания с TA-LIB, что дает результаты в 2-4 раза быстрее, чем интерфейс SWIG.
Кроме того, этот проект также поддерживает использование библиотек 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 сообщили, что успешно устанавливая базовую библиотеку TA-LIB C, используя пакет Libta-Lib:
$ 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-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»,
[x64 Native Tools Command Prompt]
- Перейти к
C:ta-libcmakecdrwin32msvc
- Создайте библиотеку
nmake
Вы также можете попробовать эти неофициальные двоичные колеса Windows как для 32-битных и 64-битных:
https://github.com/cgohlke/talib-build/
Скачать ta-lib-0.4.0-src.tar.gz и:
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install
Если вы строите
TA-Lib
используяmake -jX
это потерпит неудачу, но это нормально! Просто повторно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-Lib
с использованием переменных среды TA_LIBRARY_PATH
и TA_INCLUDE_PATH
:
$ 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 это может быть вызвано установкой 32-разрядного бинарного распределения базовой библиотеки TA-Lib
, но попытка использовать его с 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
, который немного отличается от STOCHRSI
который является STOCHF
применяемым к RSI
:
>> > 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 )
Если сборка, кажется, висит, вы можете работать на виртуальной машине с недостаточной памятью - попробуйте 1 ГБ или 2 ГБ.
Если вы получите такие ошибки «отказали в разрешении», вам, возможно, потребуется предоставить вашему пользователю доступ к месту, где установлена базовая библиотека T-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
Если у вас возникли проблемы с составлением базовой библиотеки TA-LIB C на ARM64, вам может потребоваться настроить ее с явным типом сборки перед запуском, 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, было предложено поиск настройки расширения 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 )
Расчет полос Bollinger, с тройной экспоненциальной скользящей средней:
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 ])
Вы можете сравнить это с средним для прокатки Pandas, где их подход к выводу NAN до тех пор, пока не наблюдается достаточное количество значений «Lookback».
>> > 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
of 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, например, в приложении, которое получает потоковые данные, и хочет знать только самое последнее значение обновленного индикатора.
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, поддерживаемые TA-LIB, либо в виде 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