Files

40 KiB

Indicator Speed Test

This Notebook shows the Indicator Speed with and without TA Lib

  • Results may 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 IndexSlice, concat, read_csv
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.54b0
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): 3355.3888 ms (3.3554 s)
In [3]:
df = _df.copy()
df.shape
Out [3]:
(1260, 7)

If numba installed, prep @njit

In [4]:
if has_numba:
    ta.speed_test(df.iloc[-150:], top=10, talib=False)
============================================================
  Slowest 10 Indicators [145]
  Observations: 150
============================================================
                secs         ms
Indicator                      
alligator    1.39078  1390.7823
reflex       0.23892   238.9168
trendflex    0.15877   158.7684
td_seq       0.11098   110.9794
ssf          0.10814   108.1379
ssf3         0.09241    92.4070
qqe          0.02413    24.1271
psar         0.01360    13.5950
cdl_pattern  0.01313    13.1322
hilo         0.01056    10.5648

============================================================
Time Stats:
           secs           ms
min    0.000000     0.001100
50%    0.001140     1.137000
mean   0.016311    16.311186
max    1.390780  1390.782300
total  2.365160  2365.122000

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

Performance without TA Lib

In [5]:
pta_speedsdf, pta_statsdf = ta.speed_test(df, top=10, talib=False, stats=True, gradient=True, verbose=True)
[+] aberration: 1.1456 ms (0.0011 s)
[+] accbands: 1.2985 ms (0.0013 s)
[+] ad: 1.0111 ms (0.0010 s)
[+] adosc: 2.3665 ms (0.0024 s)
[+] adx: 3.6593 ms (0.0037 s)
[+] alligator: 212.5608 ms (0.2126 s)
[+] alma: 0.6202 ms (0.0006 s)
[+] amat: 3.0693 ms (0.0031 s)
[+] ao: 0.5373 ms (0.0005 s)
[+] aobv: 5.7827 ms (0.0058 s)
[+] apo: 0.9649 ms (0.0010 s)
[+] aroon: 8.4203 ms (0.0084 s)
[+] atr: 1.6937 ms (0.0017 s)
[+] bbands: 1.6370 ms (0.0016 s)
[+] bias: 0.7042 ms (0.0007 s)
[+] bop: 0.8832 ms (0.0009 s)
[+] brar: 4.5992 ms (0.0046 s)
[+] cci: 16.4651 ms (0.0165 s)
[+] cdl_pattern: 11.0512 ms (0.0111 s)
[+] cdl_z: 1.7945 ms (0.0018 s)
[+] cfo: 0.3885 ms (0.0004 s)
[+] cg: 5.5234 ms (0.0055 s)
[+] chop: 1.3423 ms (0.0013 s)
[+] cksp: 1.7096 ms (0.0017 s)
[+] cmf: 1.2463 ms (0.0012 s)
[+] cmo: 2.1820 ms (0.0022 s)
[+] coppock: 0.3601 ms (0.0004 s)
[+] cti: 0.1902 ms (0.0002 s)
[+] cube: 0.5717 ms (0.0006 s)
[+] decay: 0.6384 ms (0.0006 s)
[+] decreasing: 0.3125 ms (0.0003 s)
[+] dema: 1.0388 ms (0.0010 s)
[+] dm: 2.3403 ms (0.0023 s)
[+] donchian: 1.0336 ms (0.0010 s)
[+] dpo: 0.4773 ms (0.0005 s)
[+] ebsw: 40.3750 ms (0.0404 s)
[+] efi: 0.4263 ms (0.0004 s)
[+] ema: 0.4665 ms (0.0005 s)
[+] entropy: 0.8704 ms (0.0009 s)
[+] eom: 1.0508 ms (0.0011 s)
[+] er: 0.5745 ms (0.0006 s)
[+] eri: 0.6998 ms (0.0007 s)
[+] fisher: 9.9191 ms (0.0099 s)
[+] fwma: 2.6361 ms (0.0026 s)
[+] ha: 78.3370 ms (0.0783 s)
[+] hilo: 88.1582 ms (0.0882 s)
[+] hl2: 0.3772 ms (0.0004 s)
[+] hlc3: 0.3641 ms (0.0004 s)
[+] hma: 0.4196 ms (0.0004 s)
[+] hwc: 8.9592 ms (0.0090 s)
[+] hwma: 6.5110 ms (0.0065 s)
[+] ifisher: 0.6865 ms (0.0007 s)
[+] increasing: 0.3654 ms (0.0004 s)
[+] inertia: 4.6722 ms (0.0047 s)
[+] jma: 28.5862 ms (0.0286 s)
[+] kama: 15.8190 ms (0.0158 s)
[+] kc: 0.9789 ms (0.0010 s)
[+] kdj: 1.9249 ms (0.0019 s)
[+] kst: 1.7457 ms (0.0017 s)
[+] kurtosis: 0.3827 ms (0.0004 s)
[+] kvo: 3.7043 ms (0.0037 s)
[+] linreg: 12.6359 ms (0.0126 s)
[+] log_return: 0.2109 ms (0.0002 s)
[+] long_run: 0.0013 ms (0.0000 s)
[+] macd: 2.8276 ms (0.0028 s)
[+] mad: 15.0358 ms (0.0150 s)
[+] massi: 1.3350 ms (0.0013 s)
[+] mcgd: 2.2671 ms (0.0023 s)
[+] median: 0.7818 ms (0.0008 s)
[+] mfi: 4.2815 ms (0.0043 s)
[+] midpoint: 0.6688 ms (0.0007 s)
[+] midprice: 0.6778 ms (0.0007 s)
[+] mom: 0.1995 ms (0.0002 s)
[+] natr: 1.8785 ms (0.0019 s)
[+] nvi: 2.7662 ms (0.0028 s)
[+] obv: 2.1081 ms (0.0021 s)
[+] ohlc4: 0.4587 ms (0.0005 s)
[+] pdist: 1.3172 ms (0.0013 s)
[+] percent_return: 0.1963 ms (0.0002 s)
[+] pgo: 0.6337 ms (0.0006 s)
[+] ppo: 1.7161 ms (0.0017 s)
[+] psar: 108.9982 ms (0.1090 s)
[+] psl: 1.7282 ms (0.0017 s)
[+] pvi: 2.7499 ms (0.0027 s)
[+] pvo: 0.7652 ms (0.0008 s)
[+] pvol: 0.2969 ms (0.0003 s)
[+] pvr: 1.3529 ms (0.0014 s)
[+] pvt: 0.3959 ms (0.0004 s)
[+] pwma: 2.3196 ms (0.0023 s)
[+] qqe: 196.9609 ms (0.1970 s)
[+] qstick: 0.8610 ms (0.0009 s)
[+] quantile: 0.7692 ms (0.0008 s)
[+] reflex: 0.2250 ms (0.0002 s)
[+] remap: 0.1758 ms (0.0002 s)
[+] rma: 0.3221 ms (0.0003 s)
[+] roc: 0.4424 ms (0.0004 s)
[+] rsi: 2.5839 ms (0.0026 s)
[+] rsx: 10.0975 ms (0.0101 s)
[+] rvgi: 7.5413 ms (0.0075 s)
[+] rvi: 4.2737 ms (0.0043 s)
[+] short_run: 0.0015 ms (0.0000 s)
[+] sinwma: 11.4942 ms (0.0115 s)
[+] skew: 0.5697 ms (0.0006 s)
[+] slope: 0.3690 ms (0.0004 s)
[+] sma: 0.5113 ms (0.0005 s)
[+] smi: 1.3082 ms (0.0013 s)
[+] smma: 71.8654 ms (0.0719 s)
[+] squeeze: 3.3569 ms (0.0034 s)
[+] squeeze_pro: 5.0170 ms (0.0050 s)
[+] ssf: 0.1861 ms (0.0002 s)
[+] ssf3: 0.1665 ms (0.0002 s)
[+] stc: 24.6567 ms (0.0247 s)
[+] stdev: 0.4545 ms (0.0005 s)
[+] stoch: 2.0917 ms (0.0021 s)
[+] stochf: 1.8937 ms (0.0019 s)
[+] stochrsi: 1.3749 ms (0.0014 s)
[+] supertrend: 53.3542 ms (0.0534 s)
[+] swma: 2.4871 ms (0.0025 s)
[+] t3: 2.4323 ms (0.0024 s)
[+] td_seq: 914.2004 ms (0.9142 s)
[+] tema: 1.5158 ms (0.0015 s)
[+] thermo: 1.5802 ms (0.0016 s)
[+] tos_stdevall: 3.0723 ms (0.0031 s)
[+] trendflex: 0.2148 ms (0.0002 s)
[+] trima: 0.6923 ms (0.0007 s)
[+] trix: 1.8449 ms (0.0018 s)
[+] true_range: 1.3857 ms (0.0014 s)
[+] tsi: 1.9481 ms (0.0019 s)
[+] tsignals: 0.0015 ms (0.0000 s)
[+] ttm_trend: 1.8538 ms (0.0019 s)
[+] ui: 0.9041 ms (0.0009 s)
[+] uo: 2.9892 ms (0.0030 s)
[+] variance: 0.3331 ms (0.0003 s)
[+] vhf: 1.0348 ms (0.0010 s)
[+] vidya: 49.6284 ms (0.0496 s)
[+] vortex: 1.6013 ms (0.0016 s)
[+] vwap: 1.9849 ms (0.0020 s)
[+] vwma: 0.4579 ms (0.0005 s)
[+] wb_tsv: 4.0840 ms (0.0041 s)
[+] wcp: 0.3736 ms (0.0004 s)
[+] willr: 0.9798 ms (0.0010 s)
[+] wma: 11.3445 ms (0.0113 s)
[+] xsignals: 0.0014 ms (0.0000 s)
[+] zlma: 0.6628 ms (0.0007 s)
[+] zscore: 1.0129 ms (0.0010 s)

============================================================
  Slowest 10 Indicators [145]
  Observations: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.91420  914.2004
alligator   0.21256  212.5608
qqe         0.19696  196.9609
psar        0.10900  108.9982
hilo        0.08816   88.1582
ha          0.07834   78.3370
smma        0.07187   71.8654
supertrend  0.05335   53.3542
vidya       0.04963   49.6284
ebsw        0.04038   40.3750

============================================================
Time Stats:
           secs           ms
min    0.000000     0.001300
50%    0.001350     1.352900
mean   0.015054    15.053662
max    0.914200   914.200400
total  2.182790  2182.781000

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

In [6]:
pta_speedsdf
Out [6]:
  secs ms
Indicator    
td_seq 0.914200 914.200400
alligator 0.212560 212.560800
qqe 0.196960 196.960900
psar 0.109000 108.998200
hilo 0.088160 88.158200
ha 0.078340 78.337000
smma 0.071870 71.865400
supertrend 0.053350 53.354200
vidya 0.049630 49.628400
ebsw 0.040380 40.375000
In [7]:
pta_statsdf
Out [7]:
secs ms
min 0.000000 0.001300
50% 0.001350 1.352900
mean 0.015054 15.053662
max 0.914200 914.200400
total 2.182790 2182.781000

Performance with TA Lib

In [8]:
tal_speedsdf, tal_statsdf = ta.speed_test(df, top=10, talib=True, stats=True, gradient=True, verbose=True)
[+] aberration: 1.6712 ms (0.0017 s)
[+] accbands: 1.6530 ms (0.0017 s)
[+] ad: 0.6278 ms (0.0006 s)
[+] adosc: 0.6367 ms (0.0006 s)
[+] adx: 3.9251 ms (0.0039 s)
[+] alligator: 213.2352 ms (0.2132 s)
[+] alma: 0.5386 ms (0.0005 s)
[+] amat: 2.2675 ms (0.0023 s)
[+] ao: 0.5618 ms (0.0006 s)
[+] aobv: 2.9535 ms (0.0030 s)
[+] apo: 0.2270 ms (0.0002 s)
[+] aroon: 0.6380 ms (0.0006 s)
[+] atr: 0.3922 ms (0.0004 s)
[+] bbands: 0.9583 ms (0.0010 s)
[+] bias: 0.3105 ms (0.0003 s)
[+] bop: 0.4727 ms (0.0005 s)
[+] brar: 4.3192 ms (0.0043 s)
[+] cci: 0.4120 ms (0.0004 s)
[+] cdl_pattern: 11.4396 ms (0.0114 s)
[+] cdl_z: 1.7711 ms (0.0018 s)
[+] cfo: 0.3807 ms (0.0004 s)
[+] cg: 5.4135 ms (0.0054 s)
[+] chop: 1.4270 ms (0.0014 s)
[+] cksp: 1.7219 ms (0.0017 s)
[+] cmf: 1.3268 ms (0.0013 s)
[+] cmo: 0.2003 ms (0.0002 s)
[+] coppock: 0.3301 ms (0.0003 s)
[+] cti: 0.1857 ms (0.0002 s)
[+] cube: 0.5715 ms (0.0006 s)
[+] decay: 0.8335 ms (0.0008 s)
[+] decreasing: 0.3362 ms (0.0003 s)
[+] dema: 0.1886 ms (0.0002 s)
[+] dm: 0.5403 ms (0.0005 s)
[+] donchian: 1.0650 ms (0.0011 s)
[+] dpo: 0.4687 ms (0.0005 s)
[+] ebsw: 40.1970 ms (0.0402 s)
[+] efi: 0.4208 ms (0.0004 s)
[+] ema: 0.1655 ms (0.0002 s)
[+] entropy: 0.6737 ms (0.0007 s)
[+] eom: 1.0302 ms (0.0010 s)
[+] er: 0.5670 ms (0.0006 s)
[+] eri: 0.6949 ms (0.0007 s)
[+] fisher: 10.0484 ms (0.0100 s)
[+] fwma: 2.5911 ms (0.0026 s)
[+] ha: 77.0000 ms (0.0770 s)
[+] hilo: 82.5885 ms (0.0826 s)
[+] hl2: 0.3007 ms (0.0003 s)
[+] hlc3: 0.3609 ms (0.0004 s)
[+] hma: 0.3957 ms (0.0004 s)
[+] hwc: 8.8935 ms (0.0089 s)
[+] hwma: 6.2470 ms (0.0062 s)
[+] ifisher: 0.6125 ms (0.0006 s)
[+] increasing: 0.3415 ms (0.0003 s)
[+] inertia: 4.2041 ms (0.0042 s)
[+] jma: 28.0654 ms (0.0281 s)
[+] kama: 15.5335 ms (0.0155 s)
[+] kc: 0.9612 ms (0.0010 s)
[+] kdj: 1.7077 ms (0.0017 s)
[+] kst: 1.9600 ms (0.0020 s)
[+] kurtosis: 0.4316 ms (0.0004 s)
[+] kvo: 3.4707 ms (0.0035 s)
[+] linreg: 0.1940 ms (0.0002 s)
[+] log_return: 0.1908 ms (0.0002 s)
[+] long_run: 0.0012 ms (0.0000 s)
[+] macd: 0.4594 ms (0.0005 s)
[+] mad: 14.9323 ms (0.0149 s)
[+] massi: 0.8308 ms (0.0008 s)
[+] mcgd: 2.3739 ms (0.0024 s)
[+] median: 0.8246 ms (0.0008 s)
[+] mfi: 0.4850 ms (0.0005 s)
[+] midpoint: 0.1723 ms (0.0002 s)
[+] midprice: 0.2578 ms (0.0003 s)
[+] mom: 0.1613 ms (0.0002 s)
[+] natr: 0.3584 ms (0.0004 s)
[+] nvi: 2.8606 ms (0.0029 s)
[+] obv: 0.2942 ms (0.0003 s)
[+] ohlc4: 0.4482 ms (0.0004 s)
[+] pdist: 1.3666 ms (0.0014 s)
[+] percent_return: 0.1928 ms (0.0002 s)
[+] pgo: 0.5993 ms (0.0006 s)
[+] ppo: 0.5450 ms (0.0005 s)
[+] psar: 107.3772 ms (0.1074 s)
[+] psl: 1.7135 ms (0.0017 s)
[+] pvi: 2.7448 ms (0.0027 s)
[+] pvo: 0.7494 ms (0.0007 s)
[+] pvol: 0.2937 ms (0.0003 s)
[+] pvr: 1.3526 ms (0.0014 s)
[+] pvt: 0.3934 ms (0.0004 s)
[+] pwma: 2.5975 ms (0.0026 s)
[+] qqe: 197.4433 ms (0.1974 s)
[+] qstick: 0.6420 ms (0.0006 s)
[+] quantile: 0.7476 ms (0.0007 s)
[+] reflex: 0.2276 ms (0.0002 s)
[+] remap: 0.1762 ms (0.0002 s)
[+] rma: 0.3756 ms (0.0004 s)
[+] roc: 0.1708 ms (0.0002 s)
[+] rsi: 0.1703 ms (0.0002 s)
[+] rsx: 10.0999 ms (0.0101 s)
[+] rvgi: 8.2282 ms (0.0082 s)
[+] rvi: 4.5243 ms (0.0045 s)
[+] short_run: 0.0015 ms (0.0000 s)
[+] sinwma: 10.7480 ms (0.0107 s)
[+] skew: 0.3062 ms (0.0003 s)
[+] slope: 0.2510 ms (0.0003 s)
[+] sma: 0.1660 ms (0.0002 s)
[+] smi: 1.1754 ms (0.0012 s)
[+] smma: 71.3380 ms (0.0713 s)
[+] squeeze: 3.1300 ms (0.0031 s)
[+] squeeze_pro: 5.5751 ms (0.0056 s)
[+] ssf: 0.1944 ms (0.0002 s)
[+] ssf3: 0.1687 ms (0.0002 s)
[+] stc: 24.6713 ms (0.0247 s)
[+] stdev: 0.1866 ms (0.0002 s)
[+] stoch: 0.5962 ms (0.0006 s)
[+] stochf: 0.5749 ms (0.0006 s)
[+] stochrsi: 1.3901 ms (0.0014 s)
[+] supertrend: 53.9695 ms (0.0540 s)
[+] swma: 2.1357 ms (0.0021 s)
[+] t3: 0.1875 ms (0.0002 s)
[+] td_seq: 919.0886 ms (0.9191 s)
[+] tema: 0.2817 ms (0.0003 s)
[+] thermo: 1.8349 ms (0.0018 s)
[+] tos_stdevall: 3.2026 ms (0.0032 s)
[+] trendflex: 0.2153 ms (0.0002 s)
[+] trima: 0.1792 ms (0.0002 s)
[+] trix: 0.9219 ms (0.0009 s)
[+] true_range: 0.3660 ms (0.0004 s)
[+] tsi: 0.8074 ms (0.0008 s)
[+] tsignals: 0.0016 ms (0.0000 s)
[+] ttm_trend: 2.0149 ms (0.0020 s)
[+] ui: 1.0273 ms (0.0010 s)
[+] uo: 0.4113 ms (0.0004 s)
[+] variance: 0.1669 ms (0.0002 s)
[+] vhf: 1.2475 ms (0.0012 s)
[+] vidya: 50.6357 ms (0.0506 s)
[+] vortex: 1.7260 ms (0.0017 s)
[+] vwap: 2.1095 ms (0.0021 s)
[+] vwma: 0.4720 ms (0.0005 s)
[+] wb_tsv: 4.1343 ms (0.0041 s)
[+] wcp: 0.3865 ms (0.0004 s)
[+] willr: 0.3631 ms (0.0004 s)
[+] wma: 0.1553 ms (0.0002 s)
[+] xsignals: 0.0016 ms (0.0000 s)
[+] zlma: 0.3429 ms (0.0003 s)
[+] zscore: 0.3980 ms (0.0004 s)

============================================================
  Slowest 10 Indicators [145]
  Observations[talib]: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.91909  919.0886
alligator   0.21324  213.2352
qqe         0.19744  197.4433
psar        0.10738  107.3772
hilo        0.08259   82.5885
ha          0.07700   77.0000
smma        0.07134   71.3380
supertrend  0.05397   53.9695
vidya       0.05064   50.6357
ebsw        0.04020   40.1970

============================================================
Time Stats:
           secs           ms
min    0.000000     0.001200
50%    0.000640     0.638000
mean   0.014416    14.415851
max    0.919090   919.088600
total  2.090310  2090.298400

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

In [9]:
tal_speedsdf
Out [9]:
  secs ms
Indicator    
td_seq 0.919090 919.088600
alligator 0.213240 213.235200
qqe 0.197440 197.443300
psar 0.107380 107.377200
hilo 0.082590 82.588500
ha 0.077000 77.000000
smma 0.071340 71.338000
supertrend 0.053970 53.969500
vidya 0.050640 50.635700
ebsw 0.040200 40.197000
In [10]:
tal_statsdf
Out [10]:
secs ms
min 0.000000 0.001200
50% 0.000640 0.638000
mean 0.014416 14.415851
max 0.919090 919.088600
total 2.090310 2090.298400

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.0000 0.00064 0.014416 0.91909 2.09031
ms 0.0012 0.63800 14.415851 919.08860 2090.29840
Pandas TA secs 0.0000 0.00135 0.015054 0.91420 2.18279
ms 0.0013 1.35290 15.053662 914.20040 2182.78100
In [12]:
diffdf = (tal_statsdf - pta_statsdf).abs().T
diffdf.columns.name = "Differences"
diffdf
Out [12]:
Differences min 50% mean max total
secs 0.0000 0.00071 0.000638 0.00489 0.09248
ms 0.0001 0.71490 0.637811 4.88820 92.48260