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.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): 3134.9958 ms (3.1350 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  1496.8930  1.49689
atrts       415.8880  0.41589
reflex      192.3144  0.19231
trendflex   159.5207  0.15952
td_seq      109.6769  0.10968
...              ...      ...
cti           0.1705  0.00017
tsignals      0.0013  0.00000
short_run     0.0014  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.119900  0.001120
mean     19.449172  0.019449
max    1496.893000  1.496890
total  2839.579100  2.839580

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

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.0925 ms (0.0011 s)
[+] accbands: 1.2377 ms (0.0012 s)
[+] ad: 1.1768 ms (0.0012 s)
[+] adosc: 2.3483 ms (0.0023 s)
[+] adx: 3.3845 ms (0.0034 s)
[+] alligator: 219.4132 ms (0.2194 s)
[+] alma: 0.5391 ms (0.0005 s)
[+] amat: 3.1778 ms (0.0032 s)
[+] ao: 0.5460 ms (0.0005 s)
[+] aobv: 5.7913 ms (0.0058 s)
[+] apo: 1.0890 ms (0.0011 s)
[+] aroon: 8.9856 ms (0.0090 s)
[+] atr: 1.8194 ms (0.0018 s)
[+] atrts: 2.3529 ms (0.0024 s)
[+] bbands: 1.5946 ms (0.0016 s)
[+] bias: 0.6733 ms (0.0007 s)
[+] bop: 0.8715 ms (0.0009 s)
[+] brar: 4.6938 ms (0.0047 s)
[+] cci: 15.6281 ms (0.0156 s)
[+] cdl_pattern: 10.3017 ms (0.0103 s)
[+] cdl_z: 1.7850 ms (0.0018 s)
[+] cfo: 0.3909 ms (0.0004 s)
[+] cg: 5.2792 ms (0.0053 s)
[+] chop: 1.5169 ms (0.0015 s)
[+] cksp: 1.8153 ms (0.0018 s)
[+] cmf: 1.2263 ms (0.0012 s)
[+] cmo: 2.2767 ms (0.0023 s)
[+] coppock: 0.3589 ms (0.0004 s)
[+] cti: 0.1935 ms (0.0002 s)
[+] cube: 0.5720 ms (0.0006 s)
[+] decay: 0.8061 ms (0.0008 s)
[+] decreasing: 0.3315 ms (0.0003 s)
[+] dema: 1.1394 ms (0.0011 s)
[+] dm: 2.2477 ms (0.0022 s)
[+] donchian: 1.0922 ms (0.0011 s)
[+] dpo: 0.4757 ms (0.0005 s)
[+] ebsw: 40.1932 ms (0.0402 s)
[+] efi: 0.4309 ms (0.0004 s)
[+] ema: 0.4663 ms (0.0005 s)
[+] entropy: 0.8890 ms (0.0009 s)
[+] eom: 1.0685 ms (0.0011 s)
[+] er: 0.7039 ms (0.0007 s)
[+] eri: 0.7141 ms (0.0007 s)
[+] fisher: 9.9928 ms (0.0100 s)
[+] fwma: 2.5179 ms (0.0025 s)
[+] ha: 77.6575 ms (0.0777 s)
[+] hilo: 84.2990 ms (0.0843 s)
[+] hl2: 0.3635 ms (0.0004 s)
[+] hlc3: 0.3576 ms (0.0004 s)
[+] hma: 0.4158 ms (0.0004 s)
[+] hwc: 8.5273 ms (0.0085 s)
[+] hwma: 6.4855 ms (0.0065 s)
[+] ifisher: 0.6070 ms (0.0006 s)
[+] increasing: 0.3525 ms (0.0004 s)
[+] inertia: 4.2218 ms (0.0042 s)
[+] jma: 28.2376 ms (0.0282 s)
[+] kama: 15.8834 ms (0.0159 s)
[+] kc: 0.9397 ms (0.0009 s)
[+] kdj: 1.7454 ms (0.0017 s)
[+] kst: 1.4877 ms (0.0015 s)
[+] kurtosis: 0.4252 ms (0.0004 s)
[+] kvo: 3.5205 ms (0.0035 s)
[+] linreg: 13.0294 ms (0.0130 s)
[+] log_return: 0.2041 ms (0.0002 s)
[+] long_run: 0.0011 ms (0.0000 s)
[+] macd: 2.7193 ms (0.0027 s)
[+] mad: 14.5471 ms (0.0145 s)
[+] massi: 1.3195 ms (0.0013 s)
[+] mcgd: 2.3247 ms (0.0023 s)
[+] median: 0.7084 ms (0.0007 s)
[+] mfi: 4.1935 ms (0.0042 s)
[+] midpoint: 0.6485 ms (0.0006 s)
[+] midprice: 0.6756 ms (0.0007 s)
[+] mom: 0.2173 ms (0.0002 s)
[+] natr: 1.8147 ms (0.0018 s)
[+] nvi: 2.7327 ms (0.0027 s)
[+] obv: 2.1172 ms (0.0021 s)
[+] ohlc4: 0.4611 ms (0.0005 s)
[+] pdist: 1.2092 ms (0.0012 s)
[+] percent_return: 0.1870 ms (0.0002 s)
[+] pgo: 0.6019 ms (0.0006 s)
[+] ppo: 1.6355 ms (0.0016 s)
[+] psar: 108.8582 ms (0.1089 s)
[+] psl: 1.7168 ms (0.0017 s)
[+] pvi: 2.7434 ms (0.0027 s)
[+] pvo: 0.8043 ms (0.0008 s)
[+] pvol: 0.2969 ms (0.0003 s)
[+] pvr: 1.3597 ms (0.0014 s)
[+] pvt: 0.3973 ms (0.0004 s)
[+] pwma: 2.2865 ms (0.0023 s)
[+] qqe: 199.6916 ms (0.1997 s)
[+] qstick: 0.7852 ms (0.0008 s)
[+] quantile: 0.7704 ms (0.0008 s)
[+] reflex: 0.2441 ms (0.0002 s)
[+] remap: 0.1834 ms (0.0002 s)
[+] rma: 0.3475 ms (0.0003 s)
[+] roc: 0.4204 ms (0.0004 s)
[+] rsi: 2.6160 ms (0.0026 s)
[+] rsx: 10.6464 ms (0.0106 s)
[+] rvgi: 8.3236 ms (0.0083 s)
[+] rvi: 4.9372 ms (0.0049 s)
[+] short_run: 0.0012 ms (0.0000 s)
[+] sinwma: 11.2597 ms (0.0113 s)
[+] skew: 0.6183 ms (0.0006 s)
[+] slope: 0.2954 ms (0.0003 s)
[+] sma: 0.4162 ms (0.0004 s)
[+] smi: 1.2353 ms (0.0012 s)
[+] smma: 72.7620 ms (0.0728 s)
[+] squeeze: 3.2674 ms (0.0033 s)
[+] squeeze_pro: 5.1635 ms (0.0052 s)
[+] ssf: 0.1887 ms (0.0002 s)
[+] ssf3: 0.1724 ms (0.0002 s)
[+] stc: 24.5385 ms (0.0245 s)
[+] stdev: 0.4670 ms (0.0005 s)
[+] stoch: 2.1049 ms (0.0021 s)
[+] stochf: 1.8578 ms (0.0019 s)
[+] stochrsi: 1.3623 ms (0.0014 s)
[+] supertrend: 54.3731 ms (0.0544 s)
[+] swma: 2.3784 ms (0.0024 s)
[+] t3: 2.4433 ms (0.0024 s)
[+] td_seq: 939.3749 ms (0.9394 s)
[+] tema: 2.3474 ms (0.0023 s)
[+] thermo: 1.8748 ms (0.0019 s)
[+] tos_stdevall: 3.7445 ms (0.0037 s)
[+] trendflex: 0.2807 ms (0.0003 s)
[+] trima: 0.7627 ms (0.0008 s)
[+] trix: 2.5868 ms (0.0026 s)
[+] true_range: 2.2454 ms (0.0022 s)
[+] tsi: 3.7692 ms (0.0038 s)
[+] tsignals: 0.0018 ms (0.0000 s)
[+] ttm_trend: 2.1323 ms (0.0021 s)
[+] ui: 1.0357 ms (0.0010 s)
[+] uo: 3.8208 ms (0.0038 s)
[+] variance: 0.4530 ms (0.0005 s)
[+] vhf: 1.3929 ms (0.0014 s)
[+] vidya: 55.6581 ms (0.0557 s)
[+] vortex: 2.2883 ms (0.0023 s)
[+] vwap: 2.8340 ms (0.0028 s)
[+] vwma: 0.6360 ms (0.0006 s)
[+] wb_tsv: 5.5872 ms (0.0056 s)
[+] wcp: 0.5243 ms (0.0005 s)
[+] willr: 1.2556 ms (0.0013 s)
[+] wma: 12.9237 ms (0.0129 s)
[+] xsignals: 0.0019 ms (0.0000 s)
[+] zlma: 1.0086 ms (0.0010 s)
[+] zscore: 1.2827 ms (0.0013 s)

============================================================
  Slowest 10 Indicators [146]
  Observations: 1260
============================================================
                  ms     secs
Indicator                    
td_seq      939.3749  0.93937
alligator   219.4132  0.21941
qqe         199.6916  0.19969
psar        108.8582  0.10886
hilo         84.2990  0.08430
ha           77.6575  0.07766
smma         72.7620  0.07276
vidya        55.6581  0.05566
supertrend   54.3731  0.05437
ebsw         40.1932  0.04019

============================================================
Time Stats:
                ms      secs
min       0.001100  0.000000
50%       1.440300  0.001440
mean     15.302968  0.015303
max     939.374900  0.939370
total  2234.233400  2.234260

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

In [6]:
pta_speedsdf
Out [6]:
  ms secs
Indicator    
td_seq 939.374900 0.939370
alligator 219.413200 0.219410
qqe 199.691600 0.199690
psar 108.858200 0.108860
hilo 84.299000 0.084300
ha 77.657500 0.077660
smma 72.762000 0.072760
vidya 55.658100 0.055660
supertrend 54.373100 0.054370
ebsw 40.193200 0.040190
In [7]:
pta_statsdf
Out [7]:
ms secs
min 0.001100 0.000000
50% 1.440300 0.001440
mean 15.302968 0.015303
max 939.374900 0.939370
total 2234.233400 2.234260
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.4574 ms (0.0015 s)
[+] accbands: 1.5594 ms (0.0016 s)
[+] ad: 0.6050 ms (0.0006 s)
[+] adosc: 0.5090 ms (0.0005 s)
[+] adx: 6.9582 ms (0.0070 s)
[+] alligator: 234.2123 ms (0.2342 s)
[+] alma: 0.5487 ms (0.0005 s)
[+] amat: 2.3552 ms (0.0024 s)
[+] ao: 0.5406 ms (0.0005 s)
[+] aobv: 3.0123 ms (0.0030 s)
[+] apo: 0.2258 ms (0.0002 s)
[+] aroon: 0.6451 ms (0.0006 s)
[+] atr: 0.3848 ms (0.0004 s)
[+] atrts: 0.5595 ms (0.0006 s)
[+] bbands: 0.9761 ms (0.0010 s)
[+] bias: 0.3614 ms (0.0004 s)
[+] bop: 0.5203 ms (0.0005 s)
[+] brar: 5.0789 ms (0.0051 s)
[+] cci: 0.4582 ms (0.0005 s)
[+] cdl_pattern: 12.4430 ms (0.0124 s)
[+] cdl_z: 2.2153 ms (0.0022 s)
[+] cfo: 0.4864 ms (0.0005 s)
[+] cg: 7.3939 ms (0.0074 s)
[+] chop: 1.7344 ms (0.0017 s)
[+] cksp: 1.7417 ms (0.0017 s)
[+] cmf: 1.5916 ms (0.0016 s)
[+] cmo: 0.2477 ms (0.0002 s)
[+] coppock: 0.3745 ms (0.0004 s)
[+] cti: 0.2111 ms (0.0002 s)
[+] cube: 0.8503 ms (0.0009 s)
[+] decay: 0.8619 ms (0.0009 s)
[+] decreasing: 0.3596 ms (0.0004 s)
[+] dema: 0.2110 ms (0.0002 s)
[+] dm: 0.5595 ms (0.0006 s)
[+] donchian: 1.0422 ms (0.0010 s)
[+] dpo: 0.5036 ms (0.0005 s)
[+] ebsw: 42.1200 ms (0.0421 s)
[+] efi: 0.5090 ms (0.0005 s)
[+] ema: 0.1804 ms (0.0002 s)
[+] entropy: 0.8325 ms (0.0008 s)
[+] eom: 1.1210 ms (0.0011 s)
[+] er: 0.6062 ms (0.0006 s)
[+] eri: 0.7919 ms (0.0008 s)
[+] fisher: 10.7730 ms (0.0108 s)
[+] fwma: 4.7763 ms (0.0048 s)
[+] ha: 91.8492 ms (0.0918 s)
[+] hilo: 89.0798 ms (0.0891 s)
[+] hl2: 0.5440 ms (0.0005 s)
[+] hlc3: 0.4229 ms (0.0004 s)
[+] hma: 0.4605 ms (0.0005 s)
[+] hwc: 9.0071 ms (0.0090 s)
[+] hwma: 7.2081 ms (0.0072 s)
[+] ifisher: 0.7474 ms (0.0007 s)
[+] increasing: 0.4005 ms (0.0004 s)
[+] inertia: 5.0944 ms (0.0051 s)
[+] jma: 30.4198 ms (0.0304 s)
[+] kama: 16.8293 ms (0.0168 s)
[+] kc: 1.0569 ms (0.0011 s)
[+] kdj: 1.7952 ms (0.0018 s)
[+] kst: 1.8727 ms (0.0019 s)
[+] kurtosis: 0.3943 ms (0.0004 s)
[+] kvo: 3.8675 ms (0.0039 s)
[+] linreg: 0.2095 ms (0.0002 s)
[+] log_return: 0.3195 ms (0.0003 s)
[+] long_run: 0.0013 ms (0.0000 s)
[+] macd: 0.5531 ms (0.0006 s)
[+] mad: 15.0788 ms (0.0151 s)
[+] massi: 0.7279 ms (0.0007 s)
[+] mcgd: 2.4638 ms (0.0025 s)
[+] median: 0.8215 ms (0.0008 s)
[+] mfi: 0.5097 ms (0.0005 s)
[+] midpoint: 0.1810 ms (0.0002 s)
[+] midprice: 0.2682 ms (0.0003 s)
[+] mom: 0.1870 ms (0.0002 s)
[+] natr: 0.4198 ms (0.0004 s)
[+] nvi: 3.2221 ms (0.0032 s)
[+] obv: 0.3030 ms (0.0003 s)
[+] ohlc4: 0.4550 ms (0.0005 s)
[+] pdist: 1.2511 ms (0.0013 s)
[+] percent_return: 0.1915 ms (0.0002 s)
[+] pgo: 0.6167 ms (0.0006 s)
[+] ppo: 0.5543 ms (0.0006 s)
[+] psar: 112.6814 ms (0.1127 s)
[+] psl: 1.7091 ms (0.0017 s)
[+] pvi: 2.9347 ms (0.0029 s)
[+] pvo: 0.7635 ms (0.0008 s)
[+] pvol: 0.3239 ms (0.0003 s)
[+] pvr: 1.3519 ms (0.0014 s)
[+] pvt: 0.3971 ms (0.0004 s)
[+] pwma: 2.3767 ms (0.0024 s)
[+] qqe: 197.1505 ms (0.1972 s)
[+] qstick: 0.5424 ms (0.0005 s)
[+] quantile: 0.7355 ms (0.0007 s)
[+] reflex: 0.2276 ms (0.0002 s)
[+] remap: 0.1761 ms (0.0002 s)
[+] rma: 0.3241 ms (0.0003 s)
[+] roc: 0.1672 ms (0.0002 s)
[+] rsi: 0.1781 ms (0.0002 s)
[+] rsx: 10.2953 ms (0.0103 s)
[+] rvgi: 8.2884 ms (0.0083 s)
[+] rvi: 4.5673 ms (0.0046 s)
[+] short_run: 0.0015 ms (0.0000 s)
[+] sinwma: 10.9650 ms (0.0110 s)
[+] skew: 0.4569 ms (0.0005 s)
[+] slope: 0.2607 ms (0.0003 s)
[+] sma: 0.1720 ms (0.0002 s)
[+] smi: 1.1787 ms (0.0012 s)
[+] smma: 72.3567 ms (0.0724 s)
[+] squeeze: 3.1259 ms (0.0031 s)
[+] squeeze_pro: 4.9297 ms (0.0049 s)
[+] ssf: 0.1875 ms (0.0002 s)
[+] ssf3: 0.1669 ms (0.0002 s)
[+] stc: 25.7928 ms (0.0258 s)
[+] stdev: 0.2406 ms (0.0002 s)
[+] stoch: 0.6115 ms (0.0006 s)
[+] stochf: 0.5768 ms (0.0006 s)
[+] stochrsi: 1.3957 ms (0.0014 s)
[+] supertrend: 54.8945 ms (0.0549 s)
[+] swma: 2.5675 ms (0.0026 s)
[+] t3: 0.2058 ms (0.0002 s)
[+] td_seq: 920.2317 ms (0.9202 s)
[+] tema: 0.2495 ms (0.0002 s)
[+] thermo: 1.5787 ms (0.0016 s)
[+] tos_stdevall: 3.7933 ms (0.0038 s)
[+] trendflex: 0.2212 ms (0.0002 s)
[+] trima: 0.1798 ms (0.0002 s)
[+] trix: 1.0912 ms (0.0011 s)
[+] true_range: 0.3817 ms (0.0004 s)
[+] tsi: 0.8223 ms (0.0008 s)
[+] tsignals: 0.0015 ms (0.0000 s)
[+] ttm_trend: 1.8579 ms (0.0019 s)
[+] ui: 1.0563 ms (0.0011 s)
[+] uo: 0.4031 ms (0.0004 s)
[+] variance: 0.1758 ms (0.0002 s)
[+] vhf: 1.2903 ms (0.0013 s)
[+] vidya: 50.9213 ms (0.0509 s)
[+] vortex: 1.8401 ms (0.0018 s)
[+] vwap: 2.1093 ms (0.0021 s)
[+] vwma: 0.4780 ms (0.0005 s)
[+] wb_tsv: 4.1540 ms (0.0042 s)
[+] wcp: 0.3857 ms (0.0004 s)
[+] willr: 0.3641 ms (0.0004 s)
[+] wma: 0.1608 ms (0.0002 s)
[+] xsignals: 0.0017 ms (0.0000 s)
[+] zlma: 0.3506 ms (0.0004 s)
[+] zscore: 0.3875 ms (0.0004 s)

============================================================
  Slowest 10 Indicators [146]
  Observations[talib]: 1260
============================================================
                  ms     secs
Indicator                    
td_seq      920.2317  0.92023
alligator   234.2123  0.23421
qqe         197.1505  0.19715
psar        112.6814  0.11268
ha           91.8492  0.09185
hilo         89.0798  0.08908
smma         72.3567  0.07236
supertrend   54.8945  0.05489
vidya        50.9213  0.05092
ebsw         42.1200  0.04212

============================================================
Time Stats:
                ms      secs
min       0.001300  0.000000
50%       0.686500  0.000690
mean     14.826408  0.014827
max     920.231700  0.920230
total  2164.655500  2.164670

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

In [9]:
tal_speedsdf
Out [9]:
  ms secs
Indicator    
td_seq 920.231700 0.920230
alligator 234.212300 0.234210
qqe 197.150500 0.197150
psar 112.681400 0.112680
ha 91.849200 0.091850
hilo 89.079800 0.089080
smma 72.356700 0.072360
supertrend 54.894500 0.054890
vidya 50.921300 0.050920
ebsw 42.120000 0.042120
In [10]:
tal_statsdf
Out [10]:
ms secs
min 0.001300 0.000000
50% 0.686500 0.000690
mean 14.826408 0.014827
max 920.231700 0.920230
total 2164.655500 2.164670

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.0013 0.68650 14.826408 920.23170 2164.65550
secs 0.0000 0.00069 0.014827 0.92023 2.16467
Pandas TA ms 0.0011 1.44030 15.302968 939.37490 2234.23340
secs 0.0000 0.00144 0.015303 0.93937 2.23426
In [12]:
diffdf = (tal_statsdf - pta_statsdf).abs().T
diffdf.columns.name = "Differences"
diffdf
Out [12]:
Differences min 50% mean max total
ms 0.0002 0.75380 0.476561 19.14320 69.57790
secs 0.0000 0.00075 0.000477 0.01914 0.06959
In [ ]: