Ini adalah pembungkus python untuk ta-lib berdasarkan Cython, bukan Swig. Dari beranda:
TA-LIB banyak digunakan oleh pengembang perangkat lunak perdagangan yang perlu melakukan analisis teknis data pasar keuangan.
- Termasuk 150+ indikator seperti ADX, MACD, RSI, Stochastic, Bollinger Bands, dll.
- Pengenalan pola kandil
- API open-source untuk C/C ++, Java, Perl, Python dan 100% dikelola .NET
Binding python asli yang disertakan dengan ta-lib menggunakan swig yang sayangnya sulit untuk dipasang dan tidak seefisien mungkin. Oleh karena itu proyek ini menggunakan Cython dan Numpy untuk mengikat secara efisien dan bersih ke ta-lib-menghasilkan hasil 2-4 kali lebih cepat daripada antarmuka Swig.
Selain itu, proyek ini juga mendukung penggunaan Perpustakaan Polar dan Pandas.
Anda dapat menginstal dari PYPI:
$ python -m pip install TA-Lib
Atau periksa sumbernya dan jalankan setup.py
sendiri:
$ python setup.py install
Tampaknya juga dimungkinkan untuk menginstal melalui conda forge:
$ conda install -c conda-forge ta-lib
Untuk menggunakan ta-lib untuk python, Anda harus memasang ta-lib. Anda mungkin harus mengikuti petunjuk instalasi mereka untuk platform Anda, tetapi beberapa saran disertakan di bawah ini untuk referensi.
Beberapa pengguna Conda Forge telah melaporkan keberhasilan menginstal perpustakaan TA-LIB C yang mendasarinya menggunakan paket LIBTA-LIB:
$ conda install -c conda-forge libta-lib
Anda cukup menginstal menggunakan homebrew:
$ brew install ta-lib
Jika Anda menggunakan Apple Silicon, seperti prosesor M1, dan membangun proyek homebrew arsitektur campuran, Anda mungkin ingin memastikan itu sedang dibangun untuk arsitektur Anda:
$ arch -arm64 brew install ta-lib
Dan mungkin Anda dapat mengaturnya sebelum menginstal dengan pip
:
$ export TA_INCLUDE_PATH="$(brew --prefix ta-lib)/include"
$ export TA_LIBRARY_PATH="$(brew --prefix ta-lib)/lib"
Anda mungkin juga menemukan ini bermanfaat, terutama jika Anda telah mencoba beberapa instalasi berbeda tanpa hasil:
$ your-arm64-python -m pip install --no-cache-dir ta-lib
Unduh ta-lib-0.4.0-msvc.zip dan unzip ke C:ta-lib
.
Ini adalah rilis biner 32-bit. Jika Anda ingin menggunakan python 64-bit, Anda harus membangun versi 64-bit dari perpustakaan. Beberapa instruksi tidak resmi untuk membangun di 64-bit Windows 10 atau Windows 11, di sini untuk referensi:
- Unduh dan unzip
ta-lib-0.4.0-msvc.zip
- Pindahkan folder unzip
ta-lib
keC:
- Unduh dan Instal Visual Studio Community (2015 atau lebih baru)
- Ingatlah untuk memilih fitur
[Visual C++]
- Bangun Perpustakaan Ta-Lib
- Dari Menu Start Windows, Mulai
[x64 Native Tools Command Prompt]
- Pindah ke
C:ta-libcmakecdrwin32msvc
- Bangun Perpustakaan
nmake
Anda juga dapat mencoba roda biner Windows tidak resmi ini untuk 32-bit dan 64-bit:
https://github.com/cgohlke/talib-build/
Unduh ta-lib-0.4.0-src.tar.gz dan:
$ tar -xzf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib/
$ ./configure --prefix=/usr
$ make
$ sudo make install
Jika Anda membangun
TA-Lib
menggunakanmake -jX
itu akan gagal tapi tidak apa -apa! Cukup rerunmake -jX
diikuti oleh[sudo] make install
.
Catatan: Jika jalur direktori Anda mencakup spasi, instalasi mungkin akan gagal tanpa kesalahan No such file or directory
.
Jika Anda mendapatkan peringatan yang terlihat seperti ini:
setup.py:79: UserWarning: Cannot find ta-lib library, installation may fail.
warnings.warn('Cannot find ta-lib library, installation may fail.')
Ini biasanya berarti setup.py
tidak dapat menemukan perpustakaan TA-Lib
yang mendasarinya, ketergantungan yang perlu diinstal.
Jika Anda menginstal pustaka TA-Lib
yang mendasarinya dengan awalan khusus (misalnya, dengan ./configure --prefix=$PREFIX
), maka ketika Anda menginstal pembungkus python ini, Anda dapat menentukan jalur pencarian tambahan untuk menemukan perpustakaan dan menyertakan file Untuk perpustakaan TA-Lib
yang mendasari menggunakan variabel lingkungan TA_LIBRARY_PATH
dan TA_INCLUDE_PATH
:
$ export TA_LIBRARY_PATH= $PREFIX /lib
$ export TA_INCLUDE_PATH= $PREFIX /include
$ python setup.py install # or pip install ta-lib
Terkadang instalasi akan menghasilkan kesalahan build seperti ini:
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.
atau:
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
Ini biasanya berarti bahwa ia tidak dapat menemukan perpustakaan TA-Lib
yang mendasarinya, ketergantungan yang perlu diinstal. Di Windows, ini bisa disebabkan oleh memasang distribusi biner 32-bit dari perpustakaan TA-Lib
yang mendasarinya, tetapi mencoba menggunakannya dengan python 64-bit.
Terkadang instalasi akan gagal dengan kesalahan seperti ini:
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
Ini biasanya berarti bahwa Anda membutuhkan header Python, dan harus menjalankan sesuatu seperti:
$ sudo apt-get install python3-dev
Terkadang membangun perpustakaan TA-Lib
yang mendasarinya memiliki kesalahan yang berjalan make
yang terlihat seperti ini:
../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
Ini mungkin berarti bahwa jalur direktori ke perpustakaan TA-Lib
yang mendasarinya memiliki spasi dalam nama direktori. Coba letakkan di jalan yang tidak memiliki ruang dan coba lagi.
Terkadang Anda mungkin mendapatkan kesalahan ini menjalankan 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>
^~~~~~~~~~~~~~~~~~~~~~~~~~
Ini kemungkinan merupakan masalah dengan mencoba menyusun platform 32-bit tetapi tanpa header yang sesuai. Anda mungkin menemukan beberapa keberhasilan melihat jawaban pertama untuk pertanyaan ini.
Jika Anda mendapatkan kesalahan pada macOS seperti ini:
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)
Anda mungkin melihat pertanyaan ini dan menggunakan xcrun codesign
untuk memperbaikinya.
Jika Anda bertanya -tanya mengapa STOCHRSI
memberi Anda hasil yang berbeda dari yang Anda harapkan, mungkin Anda ingin STOCH
diterapkan pada RSI
, yang sedikit berbeda dari STOCHRSI
yang diterapkan STOCHF
pada 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 )
Jika bangunan tampak menggantung, Anda mungkin akan menjalankan VM dengan memori yang tidak cukup - coba 1 GB atau 2 GB.
Jika Anda mendapatkan kesalahan "Izin ditolak" seperti ini, Anda mungkin perlu memberikan akses pengguna ke lokasi di mana perpustakaan TA-LIB C yang mendasarinya diinstal-atau menginstalnya ke lokasi yang dapat diakses pengguna.
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
Jika Anda kesulitan menyusun pustaka Ta-lib C yang mendasarinya di ARM64, Anda mungkin perlu mengonfigurasinya dengan jenis build eksplisit sebelum menjalankan make
and make install
, misalnya:
$ ./configure --build=aarch64-unknown-linux-gnu
Ini disebabkan oleh file config.guess
lama, jadi cara lain untuk menyelesaikan ini adalah dengan menyalin versi config.guess yang lebih baru ke sumber perpustakaan Ta-Lib C yang mendasarinya:
$ cp /usr/share/automake-1.16/config.guess /path/to/extracted/ta-lib/config.guess
Dan kemudian menjalankan kembali konfigurasi:
$ ./configure
Jika Anda mengalami kesulitan menggunakan PyInstaller dan mendapatkan kesalahan yang terlihat seperti ini:
...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'
Lalu, mungkin Anda dapat menggunakan argumen- --hidden-import
untuk memperbaikinya:
$ pyinstaller --hidden-import talib.stream "replaceToYourFileName.py"
Jika Anda ingin menggunakan numpy<2
, maka Anda harus menggunakan ta-lib<0.5
.
Jika Anda ingin menggunakan numpy>=2
, maka Anda harus menggunakan ta-lib>=0.5
.
Jika Anda kesulitan mendapatkan kode autocompletions untuk bekerja dalam kode studio visual, saran dibuat untuk mencari pengaturan ekstensi Python
, dan opsi untuk Language Server
, dan mengubahnya dari Default
(yang berarti Pylance if it is installed, Jedi otherwise
, untuk mengatur Jedi
secara manual dan penyelesaian harus bekerja.
Mirip dengan TA-LIB, fungsi API memberikan bungkus ringan dari indikator TA-lib yang terbuka.
Setiap fungsi mengembalikan array output dan memiliki nilai default untuk parameternya, kecuali ditentukan sebagai argumen kata kunci. Biasanya, fungsi -fungsi ini akan memiliki periode "lookback" awal (jumlah pengamatan yang diperlukan sebelum output dihasilkan) diatur ke NaN
.
polars.Series
kenyamanan, fungsi API mendukung numpy.ndarray
dan pandas.Series
.
Semua contoh berikut menggunakan fungsi API:
import numpy as np
import talib
close = np . random . random ( 100 )
Hitung rata -rata bergerak sederhana dari harga tertutup:
output = talib . SMA ( close )
Menghitung Bollinger Bands, dengan triple Exponential Moving Average:
from talib import MA_Type
upper , middle , lower = talib . BBANDS ( close , matype = MA_Type . T3 )
Menghitung momentum harga dekat, dengan periode waktu 5:
output = talib . MOM ( close , timeperiod = 5 )
Perpustakaan Ta-Lib C yang mendasarinya menangani Nan dengan cara yang terkadang mengejutkan dengan biasanya menyebarkan NAN di akhir output, misalnya:
>> > 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 ])
Anda dapat membandingkannya dengan rata -rata rolling panda, di mana pendekatan mereka adalah untuk mengeluarkan NAN sampai cukup nilai "lookback" diamati untuk menghasilkan output baru:
>> > 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
Jika Anda sudah terbiasa menggunakan fungsi API, Anda harus merasa seperti di rumah menggunakan API abstrak.
polars.DataFrame
fungsi pandas.DataFrame
koleksi input bernama, baik dict
numpy.ndarray
polars.Series
pandas.Series
. Jika pandas.DataFrame
atau polars.DataFrame
disediakan, output dikembalikan sebagai jenis yang sama dengan kolom output bernama.
Misalnya, input dapat disediakan untuk data "OHLCV" yang khas:
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 )
}
Fungsi dapat diimpor secara langsung atau dipakai dengan nama:
from talib import abstract
# directly
SMA = abstract . SMA
# or by name
SMA = abstract . Function ( 'sma' )
Dari sana, fungsi panggilan pada dasarnya sama dengan fungsi 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 streaming eksperimental ditambahkan yang memungkinkan pengguna untuk menghitung nilai terbaru dari suatu indikator. Ini bisa lebih cepat daripada menggunakan fungsi API, misalnya dalam aplikasi yang menerima data streaming, dan ingin mengetahui hanya nilai indikator terbaru yang diperbarui.
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
Kami dapat menunjukkan semua fungsi TA yang didukung oleh Ta-lib, baik sebagai list
atau sebagai dict
yang diurutkan berdasarkan kelompok (misalnya "studi tumpang tindih", "indikator momentum", dll):
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