Package: talipp
TALIpp - Incremental Technical Analysis LibraryNew major releasetalipp 2.0.0available!Scope:https://github.com/nardew/talipp/issues/111PR:https://github.com/nardew/talipp/pull/96talipp(ortali++) is a Python library implementing financial indicators for technical analysis. The distinctive feature of the library is its incremental computation which fits extremely well real-time applications or applications with iterative input in general.Unlike existing libraries for technical analysis which typically have to work on the whole input vector in order to calculate new values of indicators,talippdue to its incremental architecture calculates new indicators' values exclusively based on the delta input data. That implies, among others, it requiresO(1)time to produce new values in comparison toO(n)required by other libraries.Supported incremental operations include:appending new values to the inputupdating the last input valueremoving arbitrary number of the input valuesBesides the already mentioned superior time complexity for delta input operations,talipp's incremental approach immediately offers other interesting features for free, such as indicator chaining or building new indicators combined from other indicators. See section with examples to get an idea.Incremental nature oftalippnaturally excels in applications with frequentCUDoperations but it can be used for charting, back-testing, ... as any other existing library.Last but not least,talippis a community project and therefore open to any suggestions how to make it better. You are encouraged to come up with proposals.What's new in the latest versionv2.0.0 scopeFor the full history of changes seeCHANGELOG.List of incremental indicatorstalippcurrently provides below set of indicators. If your favourite indicator is missing, then create a ticket via GitHub Issues and there is a good chance that it will be included in the future version of the library.Accumulation/Distribution (ADL)AroonAverage Directional Index (ADX)Average True Range (ATR)Awesome Oscillator (AO)Balance of Power (BOP)Bollinger Bands (BB)Chaikin OscillatorChande Kroll StopChoppiness Index (CHOP)Coppock CurveCommodity Channel Index (CCI)Donchian Channel (DC)Detrended Price Oscillator (DPO)Ease of Movement (EMV)Force IndexIchimoku Kinko HyoKeltner Channel (KC)Klinger Volume Oscillator (KVO)Know Sure Thing (KST)Mass IndexMcGinley DynamicMean DeviationMoving Average (ALMA, DEMA, EMA, HMA, KAMA, SMA, SMMA, T3, TEMA, VWMA, WMA, ZLEMA)Moving Average Convergence Divergence (MACD)On-balance Volume (OBV), Smoothed On-balance Volume (SOBV)Parabolic SARPivots High/LowRate of Change (ROC)Relative strength index (RSI)Schaff Trend Cycle (STC)SFX TORStandard DeviationStochastic OscillatorStochastic RSISuperTrendTRIXTTM SqueezeTrue Strength Index (TSI)Ultimate Oscillator (UO)Vortex Indicator (VTX)Volume Weighted Average Price (VWAP)InstallationpipinstalltalippIn case you want to install the latest version from the repo, usepipinstallgit+https://github.com/nardew/talipp.git@mainExamplesConsultexamplesfolder to see usage of every single indicator included in the library. To get the basic look and feel of the API, see below.fromtalipp.indicatorsimportEMA,SMA,Stochfromtalipp.ohlcvimportOHLCVFactory# EMA indicator ([float] -> [float])ema=EMA(period=3,input_values=[1,3,5,7,9,2,4,6,8,10])# treat indicators as any other listprint(f'EMA(3):{ema}')# [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125]print(f'Last EMA value:{ema[-1]}')# 8.28125# append a new input value incrementallyema.add(11)print(f'EMA after adding a new value:{ema}')# [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125, 9.640625]# change the last added valueema.update(15)print(f'EMA after updating the last value:{ema}')# [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125, 11.640625]# change the last added value againema.update(18)print(f'EMA after updating the last value:{ema}')# [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125, 13.140625]# remove the last added valueema.remove()print(f'EMA after removing the last value:{ema}')# [3.0, 5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125]# purge the oldest input valueema.purge_oldest(1)print(f'EMA after purging the oldest value:{ema}')# [5.0, 7.0, 4.5, 4.25, 5.125, 6.5625, 8.28125]# STOCH indicator ([OHLCV] -> [composite])stoch=Stoch(5,3,OHLCVFactory.from_dict({'high':[5,10,15,20,25,30,35],'low':[1,4,7,10,13,16,19],'close':[3,9,8,19,18,17,19]}))# print result as a list of composite values for 'k' and 'd' output parametersprint(f'Stoch(5, 3) composite result:{stoch}')# [StochVal(k=70.83333333333333, d=None), StochVal(k=50.0, d=None), StochVal(k=42.857142857142854, d=54.563492063492056)]# print result as lists per output parametersprint(f'Stoch(5, 3) decomposed result:{stoch.to_lists()}')# {'k': [70.83333333333333, 50.0, 42.857142857142854], 'd': [None, None, 54.563492063492056]}# Indicator chainingsma1=SMA(3)sma2=SMA(3,input_indicator=sma1)sma3=SMA(3,input_indicator=sma2)print(f"Chain three moving averages:")sma1.add([1,2,3,4,5,6,7,8,9,10])print(f"SMA1:{sma1}")# [2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]print(f"SMA2:{sma2}")# [3.0, 4.0, 5.0, 6.0, 7.0, 8.0]print(f"SMA3:{sma3}")# [4.0, 5.0, 6.0, 7.0]print(f"Purge oldest 3 values:")sma1.purge_oldest(3)print(f"SMA1:{sma1}")# [5.0, 6.0, 7.0, 8.0, 9.0]print(f"SMA2:{sma2}")# [6.0, 7.0, 8.0]print(f"SMA3:{sma3}")# [7.0]PerformanceTo illustrate performance scaling oftalippwe ran several tests together with the industry standardtaliblibrary and its python wrapperta-lib. The takeaway from the comparison is following:for batch processing (i.e. one-off calculation of indicators without addition of further delta values)talibis a clear winner. This is not surprising at all since it is implemented in C and it is tailored for vector calculations in one shot.talipp's incremental (i.e. not vector) calculation and features such as indicator chaining (which internally implements output listeners) must inevitably come at a cost. That being said,talippcalculates SMA for batch of 50k values incrementally still in ~200ms which is perfectly acceptable for many applicationswheretalippclearly takes the lead is  incremental calculation. Again this is well expected sincetalipp's CUD operations takeO(1)time compared toO(n)time oftalib. For 50k input the difference is as big as ~200ms vs. ~6800ms.from the graphs it is apparent thattalippscales linearly with the size of the input compared to quadratic curve oftalibwhen incremental operations are concerned. This follows fromtalipp'sO(1)time for delta operations vs.talib'sO(n).Contactto report issues, bugs, corrections or to propose new features use preferably Github Issuesfor topics requiring more personal approach feel free to send an e-mail to. Please note that general questions will not be answered via this channel.SupportIf you like the library and you feel like you want to support its further development, enhancements and bug fixing, then it will be of great help and most appreciated if you:file bugs, proposals, pull requests, ...spread the worddonate an arbitrary tipBTC:3GJPT6H6WeuTWR2KwDSEN5qyJq95LEErzfETH:0xC7d8673Ee1B01f6F10e40aA416a1b0A746eaBe68Binance Smart Chain tokens:0xe37FaB52ed4c1C9a3d80896f2001Cb3284a1b619XMR:87vdCaWFN2YJEk3HKVJNaPBFsuwZTJocRfpGJ747dPQrFcrs6SQTmA3XDGyWUPoALuNnXezEbJXkbY8Y4VSxG4ReEFqxy5m