هذا هو غلاف Python لـ Ta-Lib استنادًا إلى Cython بدلاً من Swig. من الصفحة الرئيسية:
يستخدم TA-LIB على نطاق واسع من قبل مطوري برامج التداول الذين يتطلبون إجراء التحليل الفني لبيانات السوق المالية.
- يتضمن 150 مؤشرًا مثل ADX و MACD و RSI و Stochastic و Bollinger ، إلخ.
- التعرف على نمط الشمعدان
- واجهة برمجة تطبيقات مفتوحة المصدر لـ C/C ++ و Java و Perl و Python و 100 ٪ تدار .NET
روابط Python الأصلية المتضمنة مع SWIG TA-LIB والتي يصعب تثبيتها للأسف وليست فعالة قدر الإمكان. لذلك يستخدم هذا المشروع Cython و Numpy لربط بكفاءة ونظيفة بـ TA-Lib-مما يؤدي إلى نتائج أسرع من 2 إلى 4 مرات من واجهة SWIG.
بالإضافة إلى ذلك ، يدعم هذا المشروع أيضًا استخدام مكتبات Polars و Pandas.
يمكنك التثبيت من PYPI:
$ python -m pip install TA-Lib
أو الخروج من المصادر وقم بتشغيل setup.py
بنفسك:
$ python setup.py install
يبدو أيضًا أنه من الممكن التثبيت عبر كوندا فورج:
$ conda install -c conda-forge ta-lib
لاستخدام TA-Lib لـ Python ، تحتاج إلى تثبيت TA-LIB بالفعل. ربما يجب أن تتبع اتجاهات التثبيت الخاصة بهم لمنصتك ، ولكن يتم تضمين بعض الاقتراحات أدناه للرجوع إليها.
أبلغ بعض مستخدمي كوندا فورج عن نجاحه في تثبيت مكتبة TA-Lib C الأساسية باستخدام حزمة LIBTA-LIB:
$ conda install -c conda-forge libta-lib
يمكنك ببساطة التثبيت باستخدام Homebrew:
$ brew install ta-lib
إذا كنت تستخدم Silicon Apple ، مثل معالجات 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 و UNXIP إلى C:ta-lib
.
هذا هو إصدار ثنائي 32 بت. إذا كنت ترغب في استخدام بيثون 64 بت ، فستحتاج إلى إنشاء نسخة 64 بت من المكتبة. بعض الإرشادات غير الرسمية للبناء على Windows 10 أو Windows 64 بت ، هنا للرجوع إليها:
- قم بتنزيل و unsip
ta-lib-0.4.0-msvc.zip
- انقل المجلد غير المصدفة
ta-lib
إلىC:
- قم بتنزيل وتثبيت Visual Studio Community (2015 أو لاحقًا)
- تذكر أن تحدد ميزة
[Visual C++]
- بناء مكتبة TA-LIB
- من قائمة Windows Start ، ابدأ
[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
لمكتبة 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 بت.
في بعض الأحيان سوف يفشل التثبيت مع أخطاء مثل هذه:
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
هذا يعني عادة أنك تحتاج إلى رؤوس الثعبان ، ويجب أن تدير شيئًا مثل:
$ 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 )
إذا بدا أن البنية معلقة ، فقد تكون تعمل على VM مع عدم وجود ذاكرة كافية - جرب 1 غيغابايت أو 2 غيغابايت.
إذا حصلت على أخطاء "تم رفض الإذن" مثل هذا ، فقد تحتاج إلى إعطاء المستخدم الخاص بك وصولًا إلى الموقع الذي يتم فيه تثبيت مكتبة 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
إذا كنت تواجه مشكلة في تجميع مكتبة TA-Lib C الأساسية على ARM64 ، فقد تحتاج إلى تكوينها بنوع بناء صريح قبل make
make install
، على سبيل المثال:
$ ./configure --build=aarch64-unknown-linux-gnu
هذا ناتج عن ملف config.guess
القديم ، لذلك هناك طريقة أخرى لحل هذا لنسخ إصدار أحدث من config.ges في مصادر مكتبة 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 ، توفر واجهة برمجة تطبيقات الوظيفة غلافًا خفيف الوزن من مؤشرات TA-LIB المكشوفة.
تقوم كل وظيفة بإرجاع صفيف الإخراج ولديها قيم افتراضية لمعلماتها ، ما لم يتم تحديدها كوسائط للكلمة الرئيسية. عادةً ما يكون لهذه الوظائف فترة "مراقبة" أولية (عدد مطلوب من الملاحظات قبل إنشاء الإخراج) تم ضبطه على NaN
.
للراحة ، تدعم API الدالة كل من numpy.ndarray
و pandas.Series
و polars.Series
مدخلات.
تستخدم جميع الأمثلة التالية واجهة برمجة تطبيقات الوظيفة:
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 حتى يتم ملاحظة قيم "مراقبة" كافية لإنشاء مخرجات جديدة:
>> > 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
إذا كنت على دراية بالفعل باستخدام واجهة برمجة تطبيقات الوظيفة ، فيجب أن تشعر أنك في المنزل باستخدام واجهة برمجة تطبيقات التجريد.
تأخذ كل وظيفة مجموعة من المدخلات المسماة ، إما 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' )
من هناك ، فإن وظائف الاتصال هي في الأساس نفس واجهة برمجة تطبيقات الوظيفة:
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' ])
تمت إضافة واجهة برمجة تطبيقات البث التجريبي التي تتيح للمستخدمين حساب أحدث قيمة للمؤشر. يمكن أن يكون هذا أسرع من استخدام واجهة برمجة تطبيقات الوظيفة ، على سبيل المثال في تطبيق يتلقى بيانات البث ، ويريد معرفة قيمة المؤشر المحدثة الأحدث فقط.
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