Files
pandas-ta/examples/Speed_Test.ipynb
T

41 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): 3214.8837 ms (3.2149 s)
In [3]:
df = _df.copy()
df.shape
Out [3]:
(1260, 7)

If numba installed, prep @njit functions

In [4]:
if has_numba:
    ta.speed_test(df.iloc[-150:], talib=False)
============================================================
  Slowest Indicators
  Observations: 150
============================================================
                  ms     secs
Indicator                    
alligator  1545.3249  1.54532
atrts       397.8743  0.39787
reflex      196.2966  0.19630
trendflex   162.9574  0.16296
td_seq      113.5860  0.11359
...              ...      ...
mom           0.1823  0.00018
tsignals      0.0015  0.00000
short_run     0.0018  0.00000
long_run      0.0012  0.00000
xsignals      0.0016  0.00000

[146 rows x 2 columns]

============================================================
Time Stats:
                ms      secs
min       0.001200  0.000000
50%       1.167250  0.001170
mean     19.846779  0.019847
max    1545.324900  1.545320
total  2897.629700  2.897610

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

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.1934 ms (0.0012 s)
[+] accbands: 1.3275 ms (0.0013 s)
[+] ad: 0.9927 ms (0.0010 s)
[+] adosc: 2.0405 ms (0.0020 s)
[+] adx: 3.3097 ms (0.0033 s)
[+] alligator: 220.9520 ms (0.2210 s)
[+] alma: 0.6661 ms (0.0007 s)
[+] amat: 3.1515 ms (0.0032 s)
[+] ao: 0.5532 ms (0.0006 s)
[+] aobv: 5.7468 ms (0.0057 s)
[+] apo: 0.8981 ms (0.0009 s)
[+] aroon: 7.2886 ms (0.0073 s)
[+] atr: 1.6734 ms (0.0017 s)
[+] atrts: 2.1999 ms (0.0022 s)
[+] bbands: 1.6733 ms (0.0017 s)
[+] bias: 0.6645 ms (0.0007 s)
[+] bop: 0.8861 ms (0.0009 s)
[+] brar: 4.2863 ms (0.0043 s)
[+] cci: 15.9824 ms (0.0160 s)
[+] cdl_pattern: 10.7079 ms (0.0107 s)
[+] cdl_z: 1.7786 ms (0.0018 s)
[+] cfo: 0.4038 ms (0.0004 s)
[+] cg: 5.6990 ms (0.0057 s)
[+] chop: 1.3866 ms (0.0014 s)
[+] cksp: 1.7014 ms (0.0017 s)
[+] cmf: 1.2351 ms (0.0012 s)
[+] cmo: 2.4472 ms (0.0024 s)
[+] coppock: 0.3521 ms (0.0004 s)
[+] cti: 0.1978 ms (0.0002 s)
[+] cube: 0.5798 ms (0.0006 s)
[+] decay: 0.7265 ms (0.0007 s)
[+] decreasing: 0.3314 ms (0.0003 s)
[+] dema: 1.0735 ms (0.0011 s)
[+] dm: 2.2631 ms (0.0023 s)
[+] donchian: 1.0483 ms (0.0010 s)
[+] dpo: 0.5014 ms (0.0005 s)
[+] ebsw: 40.3295 ms (0.0403 s)
[+] efi: 0.4365 ms (0.0004 s)
[+] ema: 0.4680 ms (0.0005 s)
[+] entropy: 0.8692 ms (0.0009 s)
[+] eom: 1.0560 ms (0.0011 s)
[+] er: 0.5839 ms (0.0006 s)
[+] eri: 0.7530 ms (0.0008 s)
[+] fisher: 10.0730 ms (0.0101 s)
[+] fwma: 2.5933 ms (0.0026 s)
[+] ha: 78.9096 ms (0.0789 s)
[+] hilo: 84.2305 ms (0.0842 s)
[+] hl2: 0.2878 ms (0.0003 s)
[+] hlc3: 0.3543 ms (0.0004 s)
[+] hma: 0.4175 ms (0.0004 s)
[+] hwc: 8.7230 ms (0.0087 s)
[+] hwma: 6.6251 ms (0.0066 s)
[+] ifisher: 0.6008 ms (0.0006 s)
[+] increasing: 0.3443 ms (0.0003 s)
[+] inertia: 4.5348 ms (0.0045 s)
[+] jma: 28.5384 ms (0.0285 s)
[+] kama: 16.0007 ms (0.0160 s)
[+] kc: 0.9843 ms (0.0010 s)
[+] kdj: 1.7305 ms (0.0017 s)
[+] kst: 1.9293 ms (0.0019 s)
[+] kurtosis: 0.3692 ms (0.0004 s)
[+] kvo: 3.7142 ms (0.0037 s)
[+] linreg: 13.2551 ms (0.0133 s)
[+] log_return: 0.2034 ms (0.0002 s)
[+] long_run: 0.0013 ms (0.0000 s)
[+] macd: 2.8142 ms (0.0028 s)
[+] mad: 14.8339 ms (0.0148 s)
[+] massi: 1.3622 ms (0.0014 s)
[+] mcgd: 2.3288 ms (0.0023 s)
[+] median: 0.7961 ms (0.0008 s)
[+] mfi: 4.2371 ms (0.0042 s)
[+] midpoint: 0.6487 ms (0.0006 s)
[+] midprice: 0.7317 ms (0.0007 s)
[+] mom: 0.1998 ms (0.0002 s)
[+] natr: 1.9175 ms (0.0019 s)
[+] nvi: 3.1174 ms (0.0031 s)
[+] obv: 2.3015 ms (0.0023 s)
[+] ohlc4: 0.4677 ms (0.0005 s)
[+] pdist: 1.2363 ms (0.0012 s)
[+] percent_return: 0.1922 ms (0.0002 s)
[+] pgo: 0.6081 ms (0.0006 s)
[+] ppo: 1.7576 ms (0.0018 s)
[+] psar: 111.5600 ms (0.1116 s)
[+] psl: 1.8368 ms (0.0018 s)
[+] pvi: 3.0967 ms (0.0031 s)
[+] pvo: 0.7764 ms (0.0008 s)
[+] pvol: 0.3023 ms (0.0003 s)
[+] pvr: 1.3837 ms (0.0014 s)
[+] pvt: 0.4049 ms (0.0004 s)
[+] pwma: 2.3160 ms (0.0023 s)
[+] qqe: 203.7224 ms (0.2037 s)
[+] qstick: 0.9084 ms (0.0009 s)
[+] quantile: 0.7640 ms (0.0008 s)
[+] reflex: 0.2181 ms (0.0002 s)
[+] remap: 0.1712 ms (0.0002 s)
[+] rma: 0.3508 ms (0.0004 s)
[+] roc: 0.4792 ms (0.0005 s)
[+] rsi: 2.7735 ms (0.0028 s)
[+] rsx: 10.2466 ms (0.0102 s)
[+] rvgi: 7.7346 ms (0.0077 s)
[+] rvi: 4.4438 ms (0.0044 s)
[+] short_run: 0.0015 ms (0.0000 s)
[+] sinwma: 10.7341 ms (0.0107 s)
[+] skew: 0.2976 ms (0.0003 s)
[+] slope: 0.2550 ms (0.0003 s)
[+] sma: 0.3979 ms (0.0004 s)
[+] smi: 1.1831 ms (0.0012 s)
[+] smma: 73.9506 ms (0.0740 s)
[+] squeeze: 3.5436 ms (0.0035 s)
[+] squeeze_pro: 5.0888 ms (0.0051 s)
[+] ssf: 0.1950 ms (0.0002 s)
[+] ssf3: 0.1759 ms (0.0002 s)
[+] stc: 25.0177 ms (0.0250 s)
[+] stdev: 0.4016 ms (0.0004 s)
[+] stoch: 2.1441 ms (0.0021 s)
[+] stochf: 1.9049 ms (0.0019 s)
[+] stochrsi: 1.4435 ms (0.0014 s)
[+] supertrend: 54.9402 ms (0.0549 s)
[+] swma: 2.4172 ms (0.0024 s)
[+] t3: 2.8430 ms (0.0028 s)
[+] td_seq: 999.4675 ms (0.9995 s)
[+] tema: 2.0117 ms (0.0020 s)
[+] thermo: 1.8119 ms (0.0018 s)
[+] tos_stdevall: 3.6279 ms (0.0036 s)
[+] trendflex: 0.2490 ms (0.0002 s)
[+] trima: 0.7651 ms (0.0008 s)
[+] trix: 2.3213 ms (0.0023 s)
[+] true_range: 1.5085 ms (0.0015 s)
[+] tsi: 2.3977 ms (0.0024 s)
[+] tsignals: 0.0017 ms (0.0000 s)
[+] ttm_trend: 1.8140 ms (0.0018 s)
[+] ui: 0.8805 ms (0.0009 s)
[+] uo: 3.1802 ms (0.0032 s)
[+] variance: 0.4477 ms (0.0004 s)
[+] vhf: 1.6950 ms (0.0017 s)
[+] vidya: 55.9338 ms (0.0559 s)
[+] vortex: 1.9768 ms (0.0020 s)
[+] vwap: 2.1248 ms (0.0021 s)
[+] vwma: 0.4802 ms (0.0005 s)
[+] wb_tsv: 4.8831 ms (0.0049 s)
[+] wcp: 0.4161 ms (0.0004 s)
[+] willr: 1.0852 ms (0.0011 s)
[+] wma: 11.8522 ms (0.0119 s)
[+] xsignals: 0.0019 ms (0.0000 s)
[+] zlma: 0.8534 ms (0.0009 s)
[+] zscore: 1.1000 ms (0.0011 s)

============================================================
  Slowest 10 Indicators [146]
  Observations: 1260
============================================================
                  ms     secs
Indicator                    
td_seq      999.4675  0.99947
alligator   220.9520  0.22095
qqe         203.7224  0.20372
psar        111.5600  0.11156
hilo         84.2305  0.08423
ha           78.9096  0.07891
smma         73.9506  0.07395
vidya        55.9338  0.05593
supertrend   54.9402  0.05494
ebsw         40.3295  0.04033

============================================================
Time Stats:
                ms      secs
min       0.001300  0.000000
50%       1.476000  0.001475
mean     15.751361  0.015751
max     999.467500  0.999470
total  2299.698700  2.299680

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

In [6]:
pta_speedsdf
Out [6]:
  ms secs
Indicator    
td_seq 999.467500 0.999470
alligator 220.952000 0.220950
qqe 203.722400 0.203720
psar 111.560000 0.111560
hilo 84.230500 0.084230
ha 78.909600 0.078910
smma 73.950600 0.073950
vidya 55.933800 0.055930
supertrend 54.940200 0.054940
ebsw 40.329500 0.040330
In [7]:
pta_statsdf
Out [7]:
ms secs
min 0.001300 0.000000
50% 1.476000 0.001475
mean 15.751361 0.015751
max 999.467500 0.999470
total 2299.698700 2.299680
In [ ]:

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.3793 ms (0.0014 s)
[+] accbands: 1.4010 ms (0.0014 s)
[+] ad: 0.5917 ms (0.0006 s)
[+] adosc: 0.5685 ms (0.0006 s)
[+] adx: 4.4657 ms (0.0045 s)
[+] alligator: 228.3049 ms (0.2283 s)
[+] alma: 0.5764 ms (0.0006 s)
[+] amat: 2.2803 ms (0.0023 s)
[+] ao: 0.5338 ms (0.0005 s)
[+] aobv: 2.8592 ms (0.0029 s)
[+] apo: 0.2774 ms (0.0003 s)
[+] aroon: 0.7200 ms (0.0007 s)
[+] atr: 0.4331 ms (0.0004 s)
[+] atrts: 0.6452 ms (0.0006 s)
[+] bbands: 1.1492 ms (0.0011 s)
[+] bias: 0.4188 ms (0.0004 s)
[+] bop: 0.5234 ms (0.0005 s)
[+] brar: 5.4278 ms (0.0054 s)
[+] cci: 0.4665 ms (0.0005 s)
[+] cdl_pattern: 11.3982 ms (0.0114 s)
[+] cdl_z: 1.8717 ms (0.0019 s)
[+] cfo: 0.4020 ms (0.0004 s)
[+] cg: 5.2331 ms (0.0052 s)
[+] chop: 1.3737 ms (0.0014 s)
[+] cksp: 1.6990 ms (0.0017 s)
[+] cmf: 1.3847 ms (0.0014 s)
[+] cmo: 0.2127 ms (0.0002 s)
[+] coppock: 0.3416 ms (0.0003 s)
[+] cti: 0.1917 ms (0.0002 s)
[+] cube: 0.6841 ms (0.0007 s)
[+] decay: 0.9472 ms (0.0009 s)
[+] decreasing: 0.3457 ms (0.0003 s)
[+] dema: 0.1865 ms (0.0002 s)
[+] dm: 0.5415 ms (0.0005 s)
[+] donchian: 1.0367 ms (0.0010 s)
[+] dpo: 0.4708 ms (0.0005 s)
[+] ebsw: 39.8448 ms (0.0398 s)
[+] efi: 0.4461 ms (0.0004 s)
[+] ema: 0.1732 ms (0.0002 s)
[+] entropy: 0.8852 ms (0.0009 s)
[+] eom: 1.0705 ms (0.0011 s)
[+] er: 0.6456 ms (0.0006 s)
[+] eri: 0.7156 ms (0.0007 s)
[+] fisher: 9.8860 ms (0.0099 s)
[+] fwma: 2.8592 ms (0.0029 s)
[+] ha: 78.0263 ms (0.0780 s)
[+] hilo: 85.0740 ms (0.0851 s)
[+] hl2: 0.5325 ms (0.0005 s)
[+] hlc3: 0.3987 ms (0.0004 s)
[+] hma: 0.4288 ms (0.0004 s)
[+] hwc: 9.6443 ms (0.0096 s)
[+] hwma: 7.2366 ms (0.0072 s)
[+] ifisher: 0.8933 ms (0.0009 s)
[+] increasing: 0.4210 ms (0.0004 s)
[+] inertia: 5.5727 ms (0.0056 s)
[+] jma: 28.8803 ms (0.0289 s)
[+] kama: 16.1582 ms (0.0162 s)
[+] kc: 1.0144 ms (0.0010 s)
[+] kdj: 1.8746 ms (0.0019 s)
[+] kst: 1.9180 ms (0.0019 s)
[+] kurtosis: 0.3783 ms (0.0004 s)
[+] kvo: 3.6907 ms (0.0037 s)
[+] linreg: 0.1978 ms (0.0002 s)
[+] log_return: 0.1905 ms (0.0002 s)
[+] long_run: 0.0010 ms (0.0000 s)
[+] macd: 0.4756 ms (0.0005 s)
[+] mad: 14.7116 ms (0.0147 s)
[+] massi: 0.7483 ms (0.0007 s)
[+] mcgd: 2.3136 ms (0.0023 s)
[+] median: 0.7458 ms (0.0007 s)
[+] mfi: 0.4803 ms (0.0005 s)
[+] midpoint: 0.1726 ms (0.0002 s)
[+] midprice: 0.2598 ms (0.0003 s)
[+] mom: 0.1576 ms (0.0002 s)
[+] natr: 0.3524 ms (0.0004 s)
[+] nvi: 3.0145 ms (0.0030 s)
[+] obv: 0.2855 ms (0.0003 s)
[+] ohlc4: 0.4319 ms (0.0004 s)
[+] pdist: 1.2352 ms (0.0012 s)
[+] percent_return: 0.1985 ms (0.0002 s)
[+] pgo: 0.6131 ms (0.0006 s)
[+] ppo: 0.5387 ms (0.0005 s)
[+] psar: 109.9897 ms (0.1100 s)
[+] psl: 1.8392 ms (0.0018 s)
[+] pvi: 2.9197 ms (0.0029 s)
[+] pvo: 0.7821 ms (0.0008 s)
[+] pvol: 0.2993 ms (0.0003 s)
[+] pvr: 1.3610 ms (0.0014 s)
[+] pvt: 0.4026 ms (0.0004 s)
[+] pwma: 2.5216 ms (0.0025 s)
[+] qqe: 200.0846 ms (0.2001 s)
[+] qstick: 0.6347 ms (0.0006 s)
[+] quantile: 0.8188 ms (0.0008 s)
[+] reflex: 0.2335 ms (0.0002 s)
[+] remap: 0.1762 ms (0.0002 s)
[+] rma: 0.3200 ms (0.0003 s)
[+] roc: 0.1771 ms (0.0002 s)
[+] rsi: 0.1747 ms (0.0002 s)
[+] rsx: 10.2025 ms (0.0102 s)
[+] rvgi: 7.4596 ms (0.0075 s)
[+] rvi: 4.7372 ms (0.0047 s)
[+] short_run: 0.0015 ms (0.0000 s)
[+] sinwma: 11.0507 ms (0.0111 s)
[+] skew: 0.4837 ms (0.0005 s)
[+] slope: 0.2922 ms (0.0003 s)
[+] sma: 0.1789 ms (0.0002 s)
[+] smi: 1.2504 ms (0.0013 s)
[+] smma: 72.6012 ms (0.0726 s)
[+] squeeze: 3.1763 ms (0.0032 s)
[+] squeeze_pro: 4.9525 ms (0.0050 s)
[+] ssf: 0.1910 ms (0.0002 s)
[+] ssf3: 0.1714 ms (0.0002 s)
[+] stc: 24.9705 ms (0.0250 s)
[+] stdev: 0.1919 ms (0.0002 s)
[+] stoch: 0.6312 ms (0.0006 s)
[+] stochf: 0.5892 ms (0.0006 s)
[+] stochrsi: 1.3907 ms (0.0014 s)
[+] supertrend: 54.8929 ms (0.0549 s)
[+] swma: 2.4607 ms (0.0025 s)
[+] t3: 0.1944 ms (0.0002 s)
[+] td_seq: 927.9966 ms (0.9280 s)
[+] tema: 0.2589 ms (0.0003 s)
[+] thermo: 1.7630 ms (0.0018 s)
[+] tos_stdevall: 3.3983 ms (0.0034 s)
[+] trendflex: 0.2196 ms (0.0002 s)
[+] trima: 0.1792 ms (0.0002 s)
[+] trix: 0.9243 ms (0.0009 s)
[+] true_range: 0.3720 ms (0.0004 s)
[+] tsi: 0.8120 ms (0.0008 s)
[+] tsignals: 0.0012 ms (0.0000 s)
[+] ttm_trend: 1.8103 ms (0.0018 s)
[+] ui: 0.9170 ms (0.0009 s)
[+] uo: 0.4060 ms (0.0004 s)
[+] variance: 0.1671 ms (0.0002 s)
[+] vhf: 1.2351 ms (0.0012 s)
[+] vidya: 50.3791 ms (0.0504 s)
[+] vortex: 1.7108 ms (0.0017 s)
[+] vwap: 2.0017 ms (0.0020 s)
[+] vwma: 0.4636 ms (0.0005 s)
[+] wb_tsv: 4.2580 ms (0.0043 s)
[+] wcp: 0.3908 ms (0.0004 s)
[+] willr: 0.3693 ms (0.0004 s)
[+] wma: 0.1618 ms (0.0002 s)
[+] xsignals: 0.0017 ms (0.0000 s)
[+] zlma: 0.3481 ms (0.0003 s)
[+] zscore: 0.3853 ms (0.0004 s)

============================================================
  Slowest 10 Indicators [146]
  Observations[talib]: 1260
============================================================
                  ms     secs
Indicator                    
td_seq      927.9966  0.92800
alligator   228.3049  0.22830
qqe         200.0846  0.20008
psar        109.9897  0.10999
hilo         85.0740  0.08507
ha           78.0263  0.07803
smma         72.6012  0.07260
supertrend   54.8929  0.05489
vidya        50.3791  0.05038
ebsw         39.8448  0.03984

============================================================
Time Stats:
                ms      secs
min       0.001000  0.000000
50%       0.699850  0.000700
mean     14.608716  0.014609
max     927.996600  0.928000
total  2132.872500  2.132850

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

In [9]:
tal_speedsdf
Out [9]:
  ms secs
Indicator    
td_seq 927.996600 0.928000
alligator 228.304900 0.228300
qqe 200.084600 0.200080
psar 109.989700 0.109990
hilo 85.074000 0.085070
ha 78.026300 0.078030
smma 72.601200 0.072600
supertrend 54.892900 0.054890
vidya 50.379100 0.050380
ebsw 39.844800 0.039840
In [10]:
tal_statsdf
Out [10]:
ms secs
min 0.001000 0.000000
50% 0.699850 0.000700
mean 14.608716 0.014609
max 927.996600 0.928000
total 2132.872500 2.132850

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 ms 0.0010 0.699850 14.608716 927.99660 2132.87250
secs 0.0000 0.000700 0.014609 0.92800 2.13285
Pandas TA ms 0.0013 1.476000 15.751361 999.46750 2299.69870
secs 0.0000 0.001475 0.015751 0.99947 2.29968
In [12]:
diffdf = (tal_statsdf - pta_statsdf).abs().T
diffdf.columns.name = "Differences"
diffdf
Out [12]:
Differences min 50% mean max total
ms 0.0003 0.776150 1.142645 71.47090 166.82620
secs 0.0000 0.000775 0.001143 0.07147 0.16683
In [ ]: