Files
pandas-ta/examples/Performance_Check.ipynb
T

40 KiB

Indicator Performance Check

This Notebook shows the Indicator Performance with and without TA Lib

  • Results will vary if vectorbt or numba is installed.
  • These values are based on a M1 Macbook with 16GB Memory.
In [1]:
from importlib.util import find_spec

from numpy import version as numpy_version
from pandas import concat, IndexSlice
from pandas import IndexSlice as idx
import pandas_ta as ta

print("Package Versions:")
print(f"Pandas TA v{ta.version}")

has_numba = find_spec("numba") is not None
if has_numba:
    from numba import __version__ as numba_version
    print(f"Numba v{numba_version}")
    
if find_spec("talib") is not None:
    from talib import __version__ as tal_version
    print(f"talib v{tal_version}")

from pandas import read_csv
from pandas import DatetimeIndex as dti
%matplotlib inline
Package Versions:
Pandas TA v0.3.48b0
Numba v0.55.1
talib v0.4.21

Fetch Sample Data

In [2]:
_df = ta.df.ta.ticker("SPY", period="5y", timed=True)
[+] yf | SPY(1260, 7): 3615.7968 ms (3.6158 s)
In [3]:
df = _df.copy()
df.shape
Out [3]:
(1260, 7)

If numba installed, prep @njit

In [4]:
if has_numba:
    ta.performance(df.iloc[-150:], top=10, talib=False)
============================================================
  Slowest 10 Indicators [145]
  Observations: 150
============================================================
                secs         ms
Indicator                      
alligator    1.46619  1466.1912
reflex       0.24142   241.4170
trendflex    0.16184   161.8418
td_seq       0.11109   111.0865
ssf          0.11097   110.9743
ssf3         0.09494    94.9402
qqe          0.02390    23.9021
cdl_pattern  0.01395    13.9522
psar         0.01361    13.6084
hilo         0.01038    10.3839

============================================================
Time Stats:
           secs           ms
min    0.000020     0.023400
50%    0.001160     1.160200
mean   0.016943    16.943373
max    1.466190  1466.191200
total  2.456780  2456.789100

============================================================

Performance without TA Lib

In [5]:
pta_speedsdf, pta_statsdf = ta.performance(df, top=10, talib=False, stats=True, gradient=True, verbose=True)
[+] aberration: 1.5327 ms (0.0015 s)
[+] accbands: 1.7769 ms (0.0018 s)
[+] ad: 1.1659 ms (0.0012 s)
[+] adosc: 1.9079 ms (0.0019 s)
[+] adx: 3.1693 ms (0.0032 s)
[+] alligator: 216.3262 ms (0.2163 s)
[+] alma: 0.6678 ms (0.0007 s)
[+] amat: 3.2197 ms (0.0032 s)
[+] ao: 0.5863 ms (0.0006 s)
[+] aobv: 6.1393 ms (0.0061 s)
[+] apo: 1.1099 ms (0.0011 s)
[+] aroon: 9.4521 ms (0.0095 s)
[+] atr: 1.9118 ms (0.0019 s)
[+] bbands: 1.6445 ms (0.0016 s)
[+] bias: 0.8155 ms (0.0008 s)
[+] bop: 0.9314 ms (0.0009 s)
[+] brar: 4.5026 ms (0.0045 s)
[+] cci: 16.4964 ms (0.0165 s)
[+] cdl_pattern: 11.4451 ms (0.0114 s)
[+] cdl_z: 1.8045 ms (0.0018 s)
[+] cfo: 0.4211 ms (0.0004 s)
[+] cg: 5.2015 ms (0.0052 s)
[+] chop: 1.3616 ms (0.0014 s)
[+] cksp: 1.6839 ms (0.0017 s)
[+] cmf: 1.4190 ms (0.0014 s)
[+] cmo: 2.3247 ms (0.0023 s)
[+] coppock: 0.3732 ms (0.0004 s)
[+] cti: 0.2155 ms (0.0002 s)
[+] cube: 0.6051 ms (0.0006 s)
[+] decay: 0.6636 ms (0.0007 s)
[+] decreasing: 0.3895 ms (0.0004 s)
[+] dema: 0.9932 ms (0.0010 s)
[+] dm: 2.2943 ms (0.0023 s)
[+] donchian: 1.0459 ms (0.0010 s)
[+] dpo: 0.5231 ms (0.0005 s)
[+] ebsw: 40.8104 ms (0.0408 s)
[+] efi: 0.4605 ms (0.0005 s)
[+] ema: 0.5838 ms (0.0006 s)
[+] entropy: 0.9794 ms (0.0010 s)
[+] eom: 1.2326 ms (0.0012 s)
[+] er: 0.7048 ms (0.0007 s)
[+] eri: 0.7430 ms (0.0007 s)
[+] fisher: 9.7973 ms (0.0098 s)
[+] fwma: 2.7743 ms (0.0028 s)
[+] ha: 76.5196 ms (0.0765 s)
[+] hilo: 84.3213 ms (0.0843 s)
[+] hl2: 0.3896 ms (0.0004 s)
[+] hlc3: 0.3794 ms (0.0004 s)
[+] hma: 0.4388 ms (0.0004 s)
[+] hwc: 8.4353 ms (0.0084 s)
[+] hwma: 6.5198 ms (0.0065 s)
[+] ifisher: 0.6574 ms (0.0007 s)
[+] increasing: 0.3812 ms (0.0004 s)
[+] inertia: 4.6299 ms (0.0046 s)
[+] jma: 28.3453 ms (0.0283 s)
[+] kama: 16.0117 ms (0.0160 s)
[+] kc: 0.9787 ms (0.0010 s)
[+] kdj: 1.7019 ms (0.0017 s)
[+] kst: 1.7683 ms (0.0018 s)
[+] kurtosis: 0.4624 ms (0.0005 s)
[+] kvo: 3.4134 ms (0.0034 s)
[+] linreg: 12.5020 ms (0.0125 s)
[+] log_return: 0.2260 ms (0.0002 s)
[+] long_run: 0.0248 ms (0.0000 s)
[+] macd: 2.8070 ms (0.0028 s)
[+] mad: 14.9942 ms (0.0150 s)
[+] massi: 1.3709 ms (0.0014 s)
[+] mcgd: 2.3848 ms (0.0024 s)
[+] median: 0.7515 ms (0.0008 s)
[+] mfi: 4.2428 ms (0.0042 s)
[+] midpoint: 0.6989 ms (0.0007 s)
[+] midprice: 0.7099 ms (0.0007 s)
[+] mom: 0.2238 ms (0.0002 s)
[+] natr: 1.9008 ms (0.0019 s)
[+] nvi: 2.9522 ms (0.0030 s)
[+] obv: 2.1671 ms (0.0022 s)
[+] ohlc4: 0.4788 ms (0.0005 s)
[+] pdist: 1.2553 ms (0.0013 s)
[+] percent_return: 0.2165 ms (0.0002 s)
[+] pgo: 0.6223 ms (0.0006 s)
[+] ppo: 1.6771 ms (0.0017 s)
[+] psar: 108.4812 ms (0.1085 s)
[+] psl: 1.7707 ms (0.0018 s)
[+] pvi: 2.8398 ms (0.0028 s)
[+] pvo: 0.7763 ms (0.0008 s)
[+] pvol: 0.3209 ms (0.0003 s)
[+] pvr: 1.3872 ms (0.0014 s)
[+] pvt: 0.4248 ms (0.0004 s)
[+] pwma: 2.6412 ms (0.0026 s)
[+] qqe: 196.9207 ms (0.1969 s)
[+] qstick: 0.5539 ms (0.0006 s)
[+] quantile: 0.7560 ms (0.0008 s)
[+] reflex: 0.2509 ms (0.0003 s)
[+] remap: 0.1996 ms (0.0002 s)
[+] rma: 0.4105 ms (0.0004 s)
[+] roc: 0.4310 ms (0.0004 s)
[+] rsi: 2.9662 ms (0.0030 s)
[+] rsx: 10.6649 ms (0.0107 s)
[+] rvgi: 7.4468 ms (0.0074 s)
[+] rvi: 4.5487 ms (0.0045 s)
[+] short_run: 0.0293 ms (0.0000 s)
[+] sinwma: 11.4138 ms (0.0114 s)
[+] skew: 0.3613 ms (0.0004 s)
[+] slope: 0.2908 ms (0.0003 s)
[+] sma: 0.4385 ms (0.0004 s)
[+] smi: 1.2245 ms (0.0012 s)
[+] smma: 75.6244 ms (0.0756 s)
[+] squeeze: 3.4781 ms (0.0035 s)
[+] squeeze_pro: 4.9684 ms (0.0050 s)
[+] ssf: 0.2245 ms (0.0002 s)
[+] ssf3: 0.1924 ms (0.0002 s)
[+] stc: 25.4543 ms (0.0255 s)
[+] stdev: 0.4278 ms (0.0004 s)
[+] stoch: 2.1585 ms (0.0022 s)
[+] stochf: 1.9095 ms (0.0019 s)
[+] stochrsi: 1.4200 ms (0.0014 s)
[+] supertrend: 54.8726 ms (0.0549 s)
[+] swma: 2.6174 ms (0.0026 s)
[+] t3: 2.7930 ms (0.0028 s)
[+] td_seq: 974.4067 ms (0.9744 s)
[+] tema: 1.8953 ms (0.0019 s)
[+] thermo: 1.8535 ms (0.0019 s)
[+] tos_stdevall: 3.2848 ms (0.0033 s)
[+] trendflex: 0.2511 ms (0.0003 s)
[+] trima: 0.7133 ms (0.0007 s)
[+] trix: 2.0507 ms (0.0021 s)
[+] true_range: 1.5320 ms (0.0015 s)
[+] tsi: 2.6424 ms (0.0026 s)
[+] tsignals: 0.0373 ms (0.0000 s)
[+] ttm_trend: 2.0251 ms (0.0020 s)
[+] ui: 0.9397 ms (0.0009 s)
[+] uo: 3.0819 ms (0.0031 s)
[+] variance: 0.3726 ms (0.0004 s)
[+] vhf: 1.1655 ms (0.0012 s)
[+] vidya: 51.9878 ms (0.0520 s)
[+] vortex: 1.9960 ms (0.0020 s)
[+] vwap: 2.2110 ms (0.0022 s)
[+] vwma: 0.5046 ms (0.0005 s)
[+] wb_tsv: 4.3750 ms (0.0044 s)
[+] wcp: 0.4249 ms (0.0004 s)
[+] willr: 1.0260 ms (0.0010 s)
[+] wma: 12.1530 ms (0.0122 s)
[+] xsignals: 0.0292 ms (0.0000 s)
[+] zlma: 0.8615 ms (0.0009 s)
[+] zscore: 1.1391 ms (0.0011 s)

============================================================
  Slowest 10 Indicators [145]
  Observations: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.97441  974.4067
alligator   0.21633  216.3262
qqe         0.19692  196.9207
psar        0.10848  108.4812
hilo        0.08432   84.3213
ha          0.07652   76.5196
smma        0.07562   75.6244
supertrend  0.05487   54.8726
vidya       0.05199   51.9878
ebsw        0.04081   40.8104

============================================================
Time Stats:
           secs           ms
min    0.000020     0.024800
50%    0.001530     1.532000
mean   0.015575    15.575298
max    0.974410   974.406700
total  2.258380  2258.418200

============================================================

In [6]:
pta_speedsdf
Out [6]:
  secs ms
Indicator    
td_seq 0.974410 974.406700
alligator 0.216330 216.326200
qqe 0.196920 196.920700
psar 0.108480 108.481200
hilo 0.084320 84.321300
ha 0.076520 76.519600
smma 0.075620 75.624400
supertrend 0.054870 54.872600
vidya 0.051990 51.987800
ebsw 0.040810 40.810400
In [7]:
pta_statsdf
Out [7]:
secs ms
min 0.000020 0.024800
50% 0.001530 1.532000
mean 0.015575 15.575298
max 0.974410 974.406700
total 2.258380 2258.418200

Performance with TA Lib

In [8]:
tal_speedsdf, tal_statsdf = ta.performance(df, top=10, talib=True, stats=True, gradient=True, verbose=True)
[+] aberration: 1.3997 ms (0.0014 s)
[+] accbands: 1.5715 ms (0.0016 s)
[+] ad: 0.5410 ms (0.0005 s)
[+] adosc: 0.4955 ms (0.0005 s)
[+] adx: 4.3656 ms (0.0044 s)
[+] alligator: 218.5501 ms (0.2186 s)
[+] alma: 0.5894 ms (0.0006 s)
[+] amat: 2.3295 ms (0.0023 s)
[+] ao: 0.5743 ms (0.0006 s)
[+] aobv: 2.8668 ms (0.0029 s)
[+] apo: 0.2542 ms (0.0003 s)
[+] aroon: 0.6400 ms (0.0006 s)
[+] atr: 0.4125 ms (0.0004 s)
[+] bbands: 0.9828 ms (0.0010 s)
[+] bias: 0.3328 ms (0.0003 s)
[+] bop: 0.4978 ms (0.0005 s)
[+] brar: 4.5548 ms (0.0046 s)
[+] cci: 0.5223 ms (0.0005 s)
[+] cdl_pattern: 12.5554 ms (0.0126 s)
[+] cdl_z: 1.7763 ms (0.0018 s)
[+] cfo: 0.4176 ms (0.0004 s)
[+] cg: 5.6833 ms (0.0057 s)
[+] chop: 1.2825 ms (0.0013 s)
[+] cksp: 1.5348 ms (0.0015 s)
[+] cmf: 1.2280 ms (0.0012 s)
[+] cmo: 0.2290 ms (0.0002 s)
[+] coppock: 0.3436 ms (0.0003 s)
[+] cti: 0.2040 ms (0.0002 s)
[+] cube: 0.6042 ms (0.0006 s)
[+] decay: 0.8007 ms (0.0008 s)
[+] decreasing: 0.3465 ms (0.0003 s)
[+] dema: 0.2054 ms (0.0002 s)
[+] dm: 0.5538 ms (0.0006 s)
[+] donchian: 1.0042 ms (0.0010 s)
[+] dpo: 0.4992 ms (0.0005 s)
[+] ebsw: 40.0872 ms (0.0401 s)
[+] efi: 0.5075 ms (0.0005 s)
[+] ema: 0.2051 ms (0.0002 s)
[+] entropy: 0.8241 ms (0.0008 s)
[+] eom: 1.0890 ms (0.0011 s)
[+] er: 0.6081 ms (0.0006 s)
[+] eri: 0.7362 ms (0.0007 s)
[+] fisher: 10.0660 ms (0.0101 s)
[+] fwma: 2.5385 ms (0.0025 s)
[+] ha: 77.2657 ms (0.0773 s)
[+] hilo: 84.1511 ms (0.0842 s)
[+] hl2: 0.3273 ms (0.0003 s)
[+] hlc3: 0.3886 ms (0.0004 s)
[+] hma: 0.4175 ms (0.0004 s)
[+] hwc: 8.7684 ms (0.0088 s)
[+] hwma: 6.8195 ms (0.0068 s)
[+] ifisher: 0.7055 ms (0.0007 s)
[+] increasing: 0.3857 ms (0.0004 s)
[+] inertia: 4.6454 ms (0.0046 s)
[+] jma: 28.8499 ms (0.0288 s)
[+] kama: 16.1395 ms (0.0161 s)
[+] kc: 1.0300 ms (0.0010 s)
[+] kdj: 1.7678 ms (0.0018 s)
[+] kst: 1.8943 ms (0.0019 s)
[+] kurtosis: 0.3698 ms (0.0004 s)
[+] kvo: 3.6475 ms (0.0036 s)
[+] linreg: 0.2259 ms (0.0002 s)
[+] log_return: 0.2183 ms (0.0002 s)
[+] long_run: 0.0255 ms (0.0000 s)
[+] macd: 0.4919 ms (0.0005 s)
[+] mad: 15.5197 ms (0.0155 s)
[+] massi: 0.8280 ms (0.0008 s)
[+] mcgd: 2.5448 ms (0.0025 s)
[+] median: 0.8207 ms (0.0008 s)
[+] mfi: 0.6164 ms (0.0006 s)
[+] midpoint: 0.2796 ms (0.0003 s)
[+] midprice: 0.3612 ms (0.0004 s)
[+] mom: 0.1926 ms (0.0002 s)
[+] natr: 0.4305 ms (0.0004 s)
[+] nvi: 3.3641 ms (0.0034 s)
[+] obv: 0.3551 ms (0.0004 s)
[+] ohlc4: 0.4696 ms (0.0005 s)
[+] pdist: 1.2775 ms (0.0013 s)
[+] percent_return: 0.2099 ms (0.0002 s)
[+] pgo: 0.6248 ms (0.0006 s)
[+] ppo: 0.5915 ms (0.0006 s)
[+] psar: 116.5620 ms (0.1166 s)
[+] psl: 2.2435 ms (0.0022 s)
[+] pvi: 3.0409 ms (0.0030 s)
[+] pvo: 1.1417 ms (0.0011 s)
[+] pvol: 0.4824 ms (0.0005 s)
[+] pvr: 2.0286 ms (0.0020 s)
[+] pvt: 0.7141 ms (0.0007 s)
[+] pwma: 2.4379 ms (0.0024 s)
[+] qqe: 204.6109 ms (0.2046 s)
[+] qstick: 0.7636 ms (0.0008 s)
[+] quantile: 0.8308 ms (0.0008 s)
[+] reflex: 0.2776 ms (0.0003 s)
[+] remap: 0.1995 ms (0.0002 s)
[+] rma: 0.3934 ms (0.0004 s)
[+] roc: 0.2270 ms (0.0002 s)
[+] rsi: 0.2160 ms (0.0002 s)
[+] rsx: 10.7125 ms (0.0107 s)
[+] rvgi: 8.4559 ms (0.0085 s)
[+] rvi: 5.1331 ms (0.0051 s)
[+] short_run: 0.0307 ms (0.0000 s)
[+] sinwma: 11.6453 ms (0.0116 s)
[+] skew: 0.6612 ms (0.0007 s)
[+] slope: 0.3808 ms (0.0004 s)
[+] sma: 0.2257 ms (0.0002 s)
[+] smi: 1.3777 ms (0.0014 s)
[+] smma: 72.7116 ms (0.0727 s)
[+] squeeze: 3.6359 ms (0.0036 s)
[+] squeeze_pro: 5.9578 ms (0.0060 s)
[+] ssf: 0.2405 ms (0.0002 s)
[+] ssf3: 0.1993 ms (0.0002 s)
[+] stc: 25.7170 ms (0.0257 s)
[+] stdev: 0.2226 ms (0.0002 s)
[+] stoch: 0.6385 ms (0.0006 s)
[+] stochf: 0.6130 ms (0.0006 s)
[+] stochrsi: 1.4542 ms (0.0015 s)
[+] supertrend: 56.8238 ms (0.0568 s)
[+] swma: 2.7622 ms (0.0028 s)
[+] t3: 0.2826 ms (0.0003 s)
[+] td_seq: 961.1572 ms (0.9612 s)
[+] tema: 0.3082 ms (0.0003 s)
[+] thermo: 1.6463 ms (0.0016 s)
[+] tos_stdevall: 3.4891 ms (0.0035 s)
[+] trendflex: 0.2553 ms (0.0003 s)
[+] trima: 0.2115 ms (0.0002 s)
[+] trix: 0.9661 ms (0.0010 s)
[+] true_range: 0.3955 ms (0.0004 s)
[+] tsi: 0.8169 ms (0.0008 s)
[+] tsignals: 0.0269 ms (0.0000 s)
[+] ttm_trend: 1.9096 ms (0.0019 s)
[+] ui: 0.9255 ms (0.0009 s)
[+] uo: 0.4292 ms (0.0004 s)
[+] variance: 0.1917 ms (0.0002 s)
[+] vhf: 1.7259 ms (0.0017 s)
[+] vidya: 50.1970 ms (0.0502 s)
[+] vortex: 1.6858 ms (0.0017 s)
[+] vwap: 2.1889 ms (0.0022 s)
[+] vwma: 0.5210 ms (0.0005 s)
[+] wb_tsv: 4.3906 ms (0.0044 s)
[+] wcp: 0.4350 ms (0.0004 s)
[+] willr: 0.3989 ms (0.0004 s)
[+] wma: 0.1878 ms (0.0002 s)
[+] xsignals: 0.0252 ms (0.0000 s)
[+] zlma: 0.3721 ms (0.0004 s)
[+] zscore: 0.4181 ms (0.0004 s)

============================================================
  Slowest 10 Indicators [145]
  Observations[talib]: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.96116  961.1572
alligator   0.21855  218.5501
qqe         0.20461  204.6109
psar        0.11656  116.5620
hilo        0.08415   84.1511
ha          0.07727   77.2657
smma        0.07271   72.7116
supertrend  0.05682   56.8238
vidya       0.05020   50.1970
ebsw        0.04009   40.0872

============================================================
Time Stats:
           secs           ms
min    0.000030     0.025200
50%    0.000710     0.714100
mean   0.015006    15.005234
max    0.961160   961.157200
total  2.175830  2175.759000

============================================================

In [9]:
tal_speedsdf
Out [9]:
  secs ms
Indicator    
td_seq 0.961160 961.157200
alligator 0.218550 218.550100
qqe 0.204610 204.610900
psar 0.116560 116.562000
hilo 0.084150 84.151100
ha 0.077270 77.265700
smma 0.072710 72.711600
supertrend 0.056820 56.823800
vidya 0.050200 50.197000
ebsw 0.040090 40.087200
In [10]:
tal_statsdf
Out [10]:
secs ms
min 0.000030 0.025200
50% 0.000710 0.714100
mean 0.015006 15.005234
max 0.961160 961.157200
total 2.175830 2175.759000

Comparisons

In [11]:
print(df.shape)
compdf = concat([tal_statsdf, pta_statsdf], keys=["TA Lib", "Pandas TA"], axis=1).T
compdf
Out [11]:
(1260, 7)
min 50% mean max total
TA Lib secs 0.00003 0.00071 0.015006 0.96116 2.17583
ms 0.02520 0.71410 15.005234 961.15720 2175.75900
Pandas TA secs 0.00002 0.00153 0.015575 0.97441 2.25838
ms 0.02480 1.53200 15.575298 974.40670 2258.41820
In [12]:
diffdf = (tal_statsdf - pta_statsdf).abs().T
diffdf.columns.name = "Differences"
diffdf
Out [12]:
Differences min 50% mean max total
secs 0.00001 0.00082 0.000569 0.01325 0.08255
ms 0.00040 0.81790 0.570063 13.24950 82.65920
In [ ]: