Files
pandas-ta/examples/Speed_Test.ipynb
T

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.53b0
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): 3021.3010 ms (3.0213 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.49179  1491.7925
reflex       0.24176   241.7576
trendflex    0.17356   173.5640
td_seq       0.11696   116.9565
ssf          0.11040   110.4000
ssf3         0.09443    94.4307
qqe          0.02406    24.0637
cdl_pattern  0.01379    13.7947
psar         0.01376    13.7594
ha           0.01098    10.9793

============================================================
Time Stats:
           secs           ms
min    0.000000     0.001200
50%    0.001160     1.163700
mean   0.017315    17.314715
max    1.491790  1491.792500
total  2.510610  2510.633700

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

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.6990 ms (0.0017 s)
[+] accbands: 1.8994 ms (0.0019 s)
[+] ad: 1.2811 ms (0.0013 s)
[+] adosc: 2.9222 ms (0.0029 s)
[+] adx: 4.5722 ms (0.0046 s)
[+] alligator: 226.0575 ms (0.2261 s)
[+] alma: 0.5551 ms (0.0006 s)
[+] amat: 3.4300 ms (0.0034 s)
[+] ao: 0.6411 ms (0.0006 s)
[+] aobv: 6.0598 ms (0.0061 s)
[+] apo: 0.9210 ms (0.0009 s)
[+] aroon: 8.8892 ms (0.0089 s)
[+] atr: 1.7015 ms (0.0017 s)
[+] bbands: 1.6626 ms (0.0017 s)
[+] bias: 0.6522 ms (0.0007 s)
[+] bop: 0.8675 ms (0.0009 s)
[+] brar: 4.3142 ms (0.0043 s)
[+] cci: 16.5590 ms (0.0166 s)
[+] cdl_pattern: 11.1535 ms (0.0112 s)
[+] cdl_z: 1.7875 ms (0.0018 s)
[+] cfo: 0.3952 ms (0.0004 s)
[+] cg: 5.4697 ms (0.0055 s)
[+] chop: 1.4557 ms (0.0015 s)
[+] cksp: 1.6924 ms (0.0017 s)
[+] cmf: 1.2164 ms (0.0012 s)
[+] cmo: 2.4125 ms (0.0024 s)
[+] coppock: 0.3712 ms (0.0004 s)
[+] cti: 0.1973 ms (0.0002 s)
[+] cube: 0.5875 ms (0.0006 s)
[+] decay: 0.6320 ms (0.0006 s)
[+] decreasing: 0.3385 ms (0.0003 s)
[+] dema: 0.9428 ms (0.0009 s)
[+] dm: 2.4339 ms (0.0024 s)
[+] donchian: 1.0355 ms (0.0010 s)
[+] dpo: 0.5002 ms (0.0005 s)
[+] ebsw: 40.8816 ms (0.0409 s)
[+] efi: 0.4551 ms (0.0005 s)
[+] ema: 0.4725 ms (0.0005 s)
[+] entropy: 0.8759 ms (0.0009 s)
[+] eom: 1.0703 ms (0.0011 s)
[+] er: 0.6870 ms (0.0007 s)
[+] eri: 0.7210 ms (0.0007 s)
[+] fisher: 10.0844 ms (0.0101 s)
[+] fwma: 2.5778 ms (0.0026 s)
[+] ha: 77.6224 ms (0.0776 s)
[+] hilo: 83.8590 ms (0.0839 s)
[+] hl2: 0.3308 ms (0.0003 s)
[+] hlc3: 0.3575 ms (0.0004 s)
[+] hma: 0.4153 ms (0.0004 s)
[+] hwc: 8.5444 ms (0.0085 s)
[+] hwma: 6.3970 ms (0.0064 s)
[+] ifisher: 0.7444 ms (0.0007 s)
[+] increasing: 0.3444 ms (0.0003 s)
[+] inertia: 4.2545 ms (0.0043 s)
[+] jma: 29.2913 ms (0.0293 s)
[+] kama: 15.8392 ms (0.0158 s)
[+] kc: 0.9329 ms (0.0009 s)
[+] kdj: 1.6008 ms (0.0016 s)
[+] kst: 1.6042 ms (0.0016 s)
[+] kurtosis: 0.3775 ms (0.0004 s)
[+] kvo: 3.5412 ms (0.0035 s)
[+] linreg: 13.0964 ms (0.0131 s)
[+] log_return: 0.2040 ms (0.0002 s)
[+] long_run: 0.0013 ms (0.0000 s)
[+] macd: 2.5436 ms (0.0025 s)
[+] mad: 15.4106 ms (0.0154 s)
[+] massi: 1.3134 ms (0.0013 s)
[+] mcgd: 2.3588 ms (0.0024 s)
[+] median: 0.7268 ms (0.0007 s)
[+] mfi: 4.2106 ms (0.0042 s)
[+] midpoint: 0.6627 ms (0.0007 s)
[+] midprice: 0.7458 ms (0.0007 s)
[+] mom: 0.1954 ms (0.0002 s)
[+] natr: 1.8642 ms (0.0019 s)
[+] nvi: 2.9060 ms (0.0029 s)
[+] obv: 2.1550 ms (0.0022 s)
[+] ohlc4: 0.4605 ms (0.0005 s)
[+] pdist: 1.2077 ms (0.0012 s)
[+] percent_return: 0.1893 ms (0.0002 s)
[+] pgo: 0.6018 ms (0.0006 s)
[+] ppo: 1.6487 ms (0.0016 s)
[+] psar: 109.3518 ms (0.1094 s)
[+] psl: 1.8030 ms (0.0018 s)
[+] pvi: 3.3031 ms (0.0033 s)
[+] pvo: 0.8551 ms (0.0009 s)
[+] pvol: 0.3116 ms (0.0003 s)
[+] pvr: 1.4845 ms (0.0015 s)
[+] pvt: 0.4651 ms (0.0005 s)
[+] pwma: 2.4545 ms (0.0025 s)
[+] qqe: 206.4712 ms (0.2065 s)
[+] qstick: 0.9601 ms (0.0010 s)
[+] quantile: 1.1280 ms (0.0011 s)
[+] reflex: 0.3011 ms (0.0003 s)
[+] remap: 0.1953 ms (0.0002 s)
[+] rma: 0.3529 ms (0.0004 s)
[+] roc: 0.5170 ms (0.0005 s)
[+] rsi: 3.3309 ms (0.0033 s)
[+] rsx: 10.6474 ms (0.0106 s)
[+] rvgi: 9.2533 ms (0.0093 s)
[+] rvi: 4.9665 ms (0.0050 s)
[+] short_run: 0.0019 ms (0.0000 s)
[+] sinwma: 11.9132 ms (0.0119 s)
[+] skew: 0.5036 ms (0.0005 s)
[+] slope: 0.3027 ms (0.0003 s)
[+] sma: 0.4217 ms (0.0004 s)
[+] smi: 1.3297 ms (0.0013 s)
[+] smma: 75.4902 ms (0.0755 s)
[+] squeeze: 3.5868 ms (0.0036 s)
[+] squeeze_pro: 5.3236 ms (0.0053 s)
[+] ssf: 0.2360 ms (0.0002 s)
[+] ssf3: 0.1757 ms (0.0002 s)
[+] stc: 27.1239 ms (0.0271 s)
[+] stdev: 0.5240 ms (0.0005 s)
[+] stoch: 2.3041 ms (0.0023 s)
[+] stochf: 2.0025 ms (0.0020 s)
[+] stochrsi: 1.5106 ms (0.0015 s)
[+] supertrend: 56.9796 ms (0.0570 s)
[+] swma: 2.8700 ms (0.0029 s)
[+] t3: 3.1274 ms (0.0031 s)
[+] td_seq: 924.8030 ms (0.9248 s)
[+] tema: 2.2817 ms (0.0023 s)
[+] thermo: 2.2034 ms (0.0022 s)
[+] tos_stdevall: 3.7372 ms (0.0037 s)
[+] trendflex: 0.2847 ms (0.0003 s)
[+] trima: 0.6991 ms (0.0007 s)
[+] trix: 2.4016 ms (0.0024 s)
[+] true_range: 1.5648 ms (0.0016 s)
[+] tsi: 2.4255 ms (0.0024 s)
[+] tsignals: 0.0019 ms (0.0000 s)
[+] ttm_trend: 2.1762 ms (0.0022 s)
[+] ui: 0.9940 ms (0.0010 s)
[+] uo: 3.6072 ms (0.0036 s)
[+] variance: 0.3985 ms (0.0004 s)
[+] vhf: 1.1904 ms (0.0012 s)
[+] vidya: 51.5321 ms (0.0515 s)
[+] vortex: 1.9518 ms (0.0020 s)
[+] vwap: 2.2675 ms (0.0023 s)
[+] vwma: 0.5045 ms (0.0005 s)
[+] wb_tsv: 4.6214 ms (0.0046 s)
[+] wcp: 0.5947 ms (0.0006 s)
[+] willr: 1.1791 ms (0.0012 s)
[+] wma: 12.1194 ms (0.0121 s)
[+] xsignals: 0.0018 ms (0.0000 s)
[+] zlma: 1.0490 ms (0.0010 s)
[+] zscore: 1.1023 ms (0.0011 s)

============================================================
  Slowest 10 Indicators [145]
  Observations: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.92480  924.8030
alligator   0.22606  226.0575
qqe         0.20647  206.4712
psar        0.10935  109.3518
hilo        0.08386   83.8590
ha          0.07762   77.6224
smma        0.07549   75.4902
supertrend  0.05698   56.9796
vidya       0.05153   51.5321
ebsw        0.04088   40.8816

============================================================
Time Stats:
          secs           ms
min    0.00000     0.001300
50%    0.00156     1.564800
mean   0.01547    15.470785
max    0.92480   924.803000
total  2.24321  2243.263800

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

In [6]:
pta_speedsdf
Out [6]:
  secs ms
Indicator    
td_seq 0.924800 924.803000
alligator 0.226060 226.057500
qqe 0.206470 206.471200
psar 0.109350 109.351800
hilo 0.083860 83.859000
ha 0.077620 77.622400
smma 0.075490 75.490200
supertrend 0.056980 56.979600
vidya 0.051530 51.532100
ebsw 0.040880 40.881600
In [7]:
pta_statsdf
Out [7]:
secs ms
min 0.00000 0.001300
50% 0.00156 1.564800
mean 0.01547 15.470785
max 0.92480 924.803000
total 2.24321 2243.263800

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.3489 ms (0.0013 s)
[+] accbands: 2.4293 ms (0.0024 s)
[+] ad: 0.9455 ms (0.0009 s)
[+] adosc: 0.7832 ms (0.0008 s)
[+] adx: 5.4440 ms (0.0054 s)
[+] alligator: 223.6330 ms (0.2236 s)
[+] alma: 0.5845 ms (0.0006 s)
[+] amat: 2.3477 ms (0.0023 s)
[+] ao: 0.5491 ms (0.0005 s)
[+] aobv: 2.9005 ms (0.0029 s)
[+] apo: 0.2188 ms (0.0002 s)
[+] aroon: 0.6285 ms (0.0006 s)
[+] atr: 0.3972 ms (0.0004 s)
[+] bbands: 1.0745 ms (0.0011 s)
[+] bias: 0.3144 ms (0.0003 s)
[+] bop: 0.5317 ms (0.0005 s)
[+] brar: 4.5775 ms (0.0046 s)
[+] cci: 0.4110 ms (0.0004 s)
[+] cdl_pattern: 11.3495 ms (0.0113 s)
[+] cdl_z: 1.7693 ms (0.0018 s)
[+] cfo: 0.3880 ms (0.0004 s)
[+] cg: 5.4936 ms (0.0055 s)
[+] chop: 1.5248 ms (0.0015 s)
[+] cksp: 1.7432 ms (0.0017 s)
[+] cmf: 1.2950 ms (0.0013 s)
[+] cmo: 0.2060 ms (0.0002 s)
[+] coppock: 0.3344 ms (0.0003 s)
[+] cti: 0.1915 ms (0.0002 s)
[+] cube: 0.5648 ms (0.0006 s)
[+] decay: 0.7421 ms (0.0007 s)
[+] decreasing: 0.3255 ms (0.0003 s)
[+] dema: 0.1846 ms (0.0002 s)
[+] dm: 0.5300 ms (0.0005 s)
[+] donchian: 1.0090 ms (0.0010 s)
[+] dpo: 0.4582 ms (0.0005 s)
[+] ebsw: 39.9616 ms (0.0400 s)
[+] efi: 0.4260 ms (0.0004 s)
[+] ema: 0.1680 ms (0.0002 s)
[+] entropy: 0.7691 ms (0.0008 s)
[+] eom: 1.0576 ms (0.0011 s)
[+] er: 0.5908 ms (0.0006 s)
[+] eri: 0.7143 ms (0.0007 s)
[+] fisher: 9.8485 ms (0.0098 s)
[+] fwma: 2.7073 ms (0.0027 s)
[+] ha: 78.0391 ms (0.0780 s)
[+] hilo: 83.0280 ms (0.0830 s)
[+] hl2: 0.3353 ms (0.0003 s)
[+] hlc3: 0.3761 ms (0.0004 s)
[+] hma: 0.4238 ms (0.0004 s)
[+] hwc: 8.7674 ms (0.0088 s)
[+] hwma: 6.3823 ms (0.0064 s)
[+] ifisher: 0.6245 ms (0.0006 s)
[+] increasing: 0.3509 ms (0.0004 s)
[+] inertia: 4.5350 ms (0.0045 s)
[+] jma: 29.0445 ms (0.0290 s)
[+] kama: 15.7992 ms (0.0158 s)
[+] kc: 0.9468 ms (0.0009 s)
[+] kdj: 2.2830 ms (0.0023 s)
[+] kst: 2.1218 ms (0.0021 s)
[+] kurtosis: 0.4168 ms (0.0004 s)
[+] kvo: 3.5203 ms (0.0035 s)
[+] linreg: 0.1928 ms (0.0002 s)
[+] log_return: 0.2250 ms (0.0002 s)
[+] long_run: 0.0012 ms (0.0000 s)
[+] macd: 0.5909 ms (0.0006 s)
[+] mad: 15.6281 ms (0.0156 s)
[+] massi: 0.8248 ms (0.0008 s)
[+] mcgd: 2.4290 ms (0.0024 s)
[+] median: 0.7134 ms (0.0007 s)
[+] mfi: 0.4927 ms (0.0005 s)
[+] midpoint: 0.1744 ms (0.0002 s)
[+] midprice: 0.2610 ms (0.0003 s)
[+] mom: 0.1597 ms (0.0002 s)
[+] natr: 0.3542 ms (0.0004 s)
[+] nvi: 2.8844 ms (0.0029 s)
[+] obv: 0.2790 ms (0.0003 s)
[+] ohlc4: 0.4323 ms (0.0004 s)
[+] pdist: 1.2215 ms (0.0012 s)
[+] percent_return: 0.1815 ms (0.0002 s)
[+] pgo: 0.5857 ms (0.0006 s)
[+] ppo: 0.5495 ms (0.0005 s)
[+] psar: 112.1881 ms (0.1122 s)
[+] psl: 2.0118 ms (0.0020 s)
[+] pvi: 3.9342 ms (0.0039 s)
[+] pvo: 1.0618 ms (0.0011 s)
[+] pvol: 0.3546 ms (0.0004 s)
[+] pvr: 1.5022 ms (0.0015 s)
[+] pvt: 0.4697 ms (0.0005 s)
[+] pwma: 2.7101 ms (0.0027 s)
[+] qqe: 204.8261 ms (0.2048 s)
[+] qstick: 0.7035 ms (0.0007 s)
[+] quantile: 1.0763 ms (0.0011 s)
[+] reflex: 0.2878 ms (0.0003 s)
[+] remap: 0.1859 ms (0.0002 s)
[+] rma: 0.3788 ms (0.0004 s)
[+] roc: 0.2313 ms (0.0002 s)
[+] rsi: 0.2051 ms (0.0002 s)
[+] rsx: 10.8439 ms (0.0108 s)
[+] rvgi: 8.8667 ms (0.0089 s)
[+] rvi: 4.7788 ms (0.0048 s)
[+] short_run: 0.0015 ms (0.0000 s)
[+] sinwma: 12.2524 ms (0.0123 s)
[+] skew: 0.4899 ms (0.0005 s)
[+] slope: 0.3041 ms (0.0003 s)
[+] sma: 0.1882 ms (0.0002 s)
[+] smi: 1.3069 ms (0.0013 s)
[+] smma: 75.5255 ms (0.0755 s)
[+] squeeze: 3.7737 ms (0.0038 s)
[+] squeeze_pro: 5.9985 ms (0.0060 s)
[+] ssf: 0.2486 ms (0.0002 s)
[+] ssf3: 0.1862 ms (0.0002 s)
[+] stc: 27.0081 ms (0.0270 s)
[+] stdev: 0.2499 ms (0.0002 s)
[+] stoch: 0.6170 ms (0.0006 s)
[+] stochf: 0.5804 ms (0.0006 s)
[+] stochrsi: 1.4117 ms (0.0014 s)
[+] supertrend: 55.7674 ms (0.0558 s)
[+] swma: 3.0320 ms (0.0030 s)
[+] t3: 0.2453 ms (0.0002 s)
[+] td_seq: 941.5795 ms (0.9416 s)
[+] tema: 0.3026 ms (0.0003 s)
[+] thermo: 1.9388 ms (0.0019 s)
[+] tos_stdevall: 4.7227 ms (0.0047 s)
[+] trendflex: 0.3933 ms (0.0004 s)
[+] trima: 0.3540 ms (0.0004 s)
[+] trix: 1.2669 ms (0.0013 s)
[+] true_range: 0.4323 ms (0.0004 s)
[+] tsi: 0.9440 ms (0.0009 s)
[+] tsignals: 0.0012 ms (0.0000 s)
[+] ttm_trend: 2.1110 ms (0.0021 s)
[+] ui: 0.8789 ms (0.0009 s)
[+] uo: 0.4450 ms (0.0004 s)
[+] variance: 0.1747 ms (0.0002 s)
[+] vhf: 1.3563 ms (0.0014 s)
[+] vidya: 54.0799 ms (0.0541 s)
[+] vortex: 2.6115 ms (0.0026 s)
[+] vwap: 2.2898 ms (0.0023 s)
[+] vwma: 0.5058 ms (0.0005 s)
[+] wb_tsv: 4.7364 ms (0.0047 s)
[+] wcp: 0.4440 ms (0.0004 s)
[+] willr: 0.3801 ms (0.0004 s)
[+] wma: 0.1650 ms (0.0002 s)
[+] xsignals: 0.0016 ms (0.0000 s)
[+] zlma: 0.3880 ms (0.0004 s)
[+] zscore: 0.4089 ms (0.0004 s)

============================================================
  Slowest 10 Indicators [145]
  Observations[talib]: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.94158  941.5795
alligator   0.22363  223.6330
qqe         0.20483  204.8261
psar        0.11219  112.1881
hilo        0.08303   83.0280
ha          0.07804   78.0391
smma        0.07553   75.5255
supertrend  0.05577   55.7674
vidya       0.05408   54.0799
ebsw        0.03996   39.9616

============================================================
Time Stats:
           secs           ms
min    0.000000     0.001200
50%    0.000710     0.713400
mean   0.014947    14.947339
max    0.941580   941.579500
total  2.167320  2167.364100

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

In [9]:
tal_speedsdf
Out [9]:
  secs ms
Indicator    
td_seq 0.941580 941.579500
alligator 0.223630 223.633000
qqe 0.204830 204.826100
psar 0.112190 112.188100
hilo 0.083030 83.028000
ha 0.078040 78.039100
smma 0.075530 75.525500
supertrend 0.055770 55.767400
vidya 0.054080 54.079900
ebsw 0.039960 39.961600
In [10]:
tal_statsdf
Out [10]:
secs ms
min 0.000000 0.001200
50% 0.000710 0.713400
mean 0.014947 14.947339
max 0.941580 941.579500
total 2.167320 2167.364100

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.00071 0.014947 0.94158 2.16732
ms 0.0012 0.71340 14.947339 941.57950 2167.36410
Pandas TA secs 0.0000 0.00156 0.015470 0.92480 2.24321
ms 0.0013 1.56480 15.470785 924.80300 2243.26380
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.00085 0.000523 0.01678 0.07589
ms 0.0001 0.85140 0.523446 16.77650 75.89970
In [ ]: