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.32b0
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): 3380.2781 ms (3.3803 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.45920  1459.2033
reflex       0.24182   241.8210
trendflex    0.16111   161.1101
td_seq       0.11252   112.5188
ssf          0.11095   110.9542
ssf3         0.09521    95.2070
qqe          0.02522    25.2180
psar         0.01386    13.8627
cdl_pattern  0.01341    13.4125
hilo         0.01055    10.5541

============================================================
Time Stats:
           secs           ms
min    0.000020     0.023900
50%    0.001170     1.165000
mean   0.016922    16.921756
max    1.459200  1459.203300
total  2.453640  2453.654600

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

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.4722 ms (0.0015 s)
[+] accbands: 1.3315 ms (0.0013 s)
[+] ad: 1.0733 ms (0.0011 s)
[+] adosc: 1.8623 ms (0.0019 s)
[+] adx: 3.5369 ms (0.0035 s)
[+] alligator: 220.5254 ms (0.2205 s)
[+] alma: 0.6777 ms (0.0007 s)
[+] amat: 3.1196 ms (0.0031 s)
[+] ao: 0.5810 ms (0.0006 s)
[+] aobv: 6.0129 ms (0.0060 s)
[+] apo: 0.9975 ms (0.0010 s)
[+] aroon: 8.4711 ms (0.0085 s)
[+] atr: 1.6253 ms (0.0016 s)
[+] bbands: 1.6878 ms (0.0017 s)
[+] bias: 0.7043 ms (0.0007 s)
[+] bop: 0.9118 ms (0.0009 s)
[+] brar: 4.6133 ms (0.0046 s)
[+] cci: 16.5764 ms (0.0166 s)
[+] cdl_pattern: 11.0386 ms (0.0110 s)
[+] cdl_z: 1.8040 ms (0.0018 s)
[+] cfo: 0.4258 ms (0.0004 s)
[+] cg: 5.4734 ms (0.0055 s)
[+] chop: 1.6110 ms (0.0016 s)
[+] cksp: 1.4307 ms (0.0014 s)
[+] cmf: 1.2531 ms (0.0013 s)
[+] cmo: 2.4495 ms (0.0024 s)
[+] coppock: 0.3767 ms (0.0004 s)
[+] cti: 0.2171 ms (0.0002 s)
[+] cube: 0.6050 ms (0.0006 s)
[+] decay: 0.6650 ms (0.0007 s)
[+] decreasing: 0.3498 ms (0.0003 s)
[+] dema: 1.0834 ms (0.0011 s)
[+] dm: 2.4016 ms (0.0024 s)
[+] donchian: 1.0575 ms (0.0011 s)
[+] dpo: 0.5007 ms (0.0005 s)
[+] ebsw: 40.4991 ms (0.0405 s)
[+] efi: 0.4537 ms (0.0005 s)
[+] ema: 0.4947 ms (0.0005 s)
[+] entropy: 0.7234 ms (0.0007 s)
[+] eom: 1.0735 ms (0.0011 s)
[+] er: 0.7715 ms (0.0008 s)
[+] eri: 0.7635 ms (0.0008 s)
[+] fisher: 9.9180 ms (0.0099 s)
[+] fwma: 2.7818 ms (0.0028 s)
[+] ha: 77.3844 ms (0.0774 s)
[+] hilo: 84.6632 ms (0.0847 s)
[+] hl2: 0.3775 ms (0.0004 s)
[+] hlc3: 0.3831 ms (0.0004 s)
[+] hma: 0.4317 ms (0.0004 s)
[+] hwc: 8.5210 ms (0.0085 s)
[+] hwma: 6.6964 ms (0.0067 s)
[+] ifisher: 0.6250 ms (0.0006 s)
[+] increasing: 0.3676 ms (0.0004 s)
[+] inertia: 4.5042 ms (0.0045 s)
[+] jma: 28.7822 ms (0.0288 s)
[+] kama: 15.9558 ms (0.0160 s)
[+] kc: 0.9610 ms (0.0010 s)
[+] kdj: 1.6791 ms (0.0017 s)
[+] kst: 1.7736 ms (0.0018 s)
[+] kurtosis: 0.4567 ms (0.0005 s)
[+] kvo: 3.4107 ms (0.0034 s)
[+] linreg: 13.1770 ms (0.0132 s)
[+] log_return: 0.2290 ms (0.0002 s)
[+] long_run: 0.0252 ms (0.0000 s)
[+] macd: 2.7349 ms (0.0027 s)
[+] mad: 15.1011 ms (0.0151 s)
[+] massi: 1.3525 ms (0.0014 s)
[+] mcgd: 2.3523 ms (0.0024 s)
[+] median: 0.7421 ms (0.0007 s)
[+] mfi: 4.2362 ms (0.0042 s)
[+] midpoint: 0.6113 ms (0.0006 s)
[+] midprice: 0.7736 ms (0.0008 s)
[+] mom: 0.2211 ms (0.0002 s)
[+] natr: 1.8198 ms (0.0018 s)
[+] nvi: 2.7815 ms (0.0028 s)
[+] obv: 2.1530 ms (0.0022 s)
[+] ohlc4: 0.5163 ms (0.0005 s)
[+] pdist: 1.2728 ms (0.0013 s)
[+] percent_return: 0.2121 ms (0.0002 s)
[+] pgo: 0.6212 ms (0.0006 s)
[+] ppo: 1.6433 ms (0.0016 s)
[+] psar: 110.1239 ms (0.1101 s)
[+] psl: 1.8652 ms (0.0019 s)
[+] pvi: 2.9867 ms (0.0030 s)
[+] pvo: 0.7869 ms (0.0008 s)
[+] pvol: 0.3251 ms (0.0003 s)
[+] pvr: 1.4053 ms (0.0014 s)
[+] pvt: 0.4239 ms (0.0004 s)
[+] pwma: 2.2921 ms (0.0023 s)
[+] qqe: 202.4979 ms (0.2025 s)
[+] qstick: 0.5950 ms (0.0006 s)
[+] quantile: 0.8870 ms (0.0009 s)
[+] reflex: 0.2663 ms (0.0003 s)
[+] remap: 0.1999 ms (0.0002 s)
[+] rma: 0.3609 ms (0.0004 s)
[+] roc: 0.4297 ms (0.0004 s)
[+] rsi: 2.7048 ms (0.0027 s)
[+] rsx: 10.4901 ms (0.0105 s)
[+] rvgi: 8.2257 ms (0.0082 s)
[+] rvi: 4.5158 ms (0.0045 s)
[+] short_run: 0.0304 ms (0.0000 s)
[+] sinwma: 11.5249 ms (0.0115 s)
[+] skew: 0.3479 ms (0.0003 s)
[+] slope: 0.2849 ms (0.0003 s)
[+] sma: 0.4494 ms (0.0004 s)
[+] smi: 1.2362 ms (0.0012 s)
[+] smma: 72.9790 ms (0.0730 s)
[+] squeeze: 3.2773 ms (0.0033 s)
[+] squeeze_pro: 5.0077 ms (0.0050 s)
[+] ssf: 0.2083 ms (0.0002 s)
[+] ssf3: 0.1890 ms (0.0002 s)
[+] stc: 25.6936 ms (0.0257 s)
[+] stdev: 0.4910 ms (0.0005 s)
[+] stoch: 2.1889 ms (0.0022 s)
[+] stochf: 1.8831 ms (0.0019 s)
[+] stochrsi: 1.4041 ms (0.0014 s)
[+] supertrend: 55.8861 ms (0.0559 s)
[+] swma: 2.6545 ms (0.0027 s)
[+] t3: 2.6659 ms (0.0027 s)
[+] td_seq: 937.1583 ms (0.9372 s)
[+] tema: 1.8220 ms (0.0018 s)
[+] thermo: 1.6950 ms (0.0017 s)
[+] tos_stdevall: 3.3111 ms (0.0033 s)
[+] trendflex: 0.2563 ms (0.0003 s)
[+] trima: 0.7357 ms (0.0007 s)
[+] trix: 1.9558 ms (0.0020 s)
[+] true_range: 1.5495 ms (0.0015 s)
[+] tsi: 2.1724 ms (0.0022 s)
[+] tsignals: 0.0275 ms (0.0000 s)
[+] ttm_trend: 2.1432 ms (0.0021 s)
[+] ui: 1.4793 ms (0.0015 s)
[+] uo: 3.4682 ms (0.0035 s)
[+] variance: 0.4118 ms (0.0004 s)
[+] vhf: 1.1906 ms (0.0012 s)
[+] vidya: 51.9438 ms (0.0519 s)
[+] vortex: 1.8846 ms (0.0019 s)
[+] vwap: 2.2513 ms (0.0023 s)
[+] vwma: 0.4909 ms (0.0005 s)
[+] wb_tsv: 4.4283 ms (0.0044 s)
[+] wcp: 0.4215 ms (0.0004 s)
[+] willr: 1.0241 ms (0.0010 s)
[+] wma: 11.4104 ms (0.0114 s)
[+] xsignals: 0.0300 ms (0.0000 s)
[+] zlma: 0.7986 ms (0.0008 s)
[+] zscore: 1.0893 ms (0.0011 s)

============================================================
  Slowest 10 Indicators [145]
  Observations: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.93716  937.1583
alligator   0.22053  220.5254
qqe         0.20250  202.4979
psar        0.11012  110.1239
hilo        0.08466   84.6632
ha          0.07738   77.3844
smma        0.07298   72.9790
supertrend  0.05589   55.8861
vidya       0.05194   51.9438
ebsw        0.04050   40.4991

============================================================
Time Stats:
           secs           ms
min    0.000030     0.025200
50%    0.001470     1.472200
mean   0.015382    15.382661
max    0.937160   937.158300
total  2.230460  2230.485800

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

In [6]:
pta_speedsdf
Out [6]:
  secs ms
Indicator    
td_seq 0.937160 937.158300
alligator 0.220530 220.525400
qqe 0.202500 202.497900
psar 0.110120 110.123900
hilo 0.084660 84.663200
ha 0.077380 77.384400
smma 0.072980 72.979000
supertrend 0.055890 55.886100
vidya 0.051940 51.943800
ebsw 0.040500 40.499100
In [7]:
pta_statsdf
Out [7]:
secs ms
min 0.000030 0.025200
50% 0.001470 1.472200
mean 0.015382 15.382661
max 0.937160 937.158300
total 2.230460 2230.485800

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.6333 ms (0.0016 s)
[+] accbands: 2.0687 ms (0.0021 s)
[+] ad: 0.6342 ms (0.0006 s)
[+] adosc: 0.5248 ms (0.0005 s)
[+] adx: 3.4648 ms (0.0035 s)
[+] alligator: 225.9000 ms (0.2259 s)
[+] alma: 0.5783 ms (0.0006 s)
[+] amat: 2.2699 ms (0.0023 s)
[+] ao: 0.5630 ms (0.0006 s)
[+] aobv: 3.0264 ms (0.0030 s)
[+] apo: 0.2437 ms (0.0002 s)
[+] aroon: 0.6769 ms (0.0007 s)
[+] atr: 0.4435 ms (0.0004 s)
[+] bbands: 1.0109 ms (0.0010 s)
[+] bias: 0.3372 ms (0.0003 s)
[+] bop: 0.5036 ms (0.0005 s)
[+] brar: 4.3784 ms (0.0044 s)
[+] cci: 0.5048 ms (0.0005 s)
[+] cdl_pattern: 11.8356 ms (0.0118 s)
[+] cdl_z: 1.7994 ms (0.0018 s)
[+] cfo: 0.4170 ms (0.0004 s)
[+] cg: 5.3630 ms (0.0054 s)
[+] chop: 1.3467 ms (0.0013 s)
[+] cksp: 1.7165 ms (0.0017 s)
[+] cmf: 1.4513 ms (0.0015 s)
[+] cmo: 0.2392 ms (0.0002 s)
[+] coppock: 0.3602 ms (0.0004 s)
[+] cti: 0.2123 ms (0.0002 s)
[+] cube: 0.6690 ms (0.0007 s)
[+] decay: 0.7886 ms (0.0008 s)
[+] decreasing: 0.3615 ms (0.0004 s)
[+] dema: 0.2139 ms (0.0002 s)
[+] dm: 0.5525 ms (0.0006 s)
[+] donchian: 1.0676 ms (0.0011 s)
[+] dpo: 0.5136 ms (0.0005 s)
[+] ebsw: 40.0562 ms (0.0401 s)
[+] efi: 0.4580 ms (0.0005 s)
[+] ema: 0.1940 ms (0.0002 s)
[+] entropy: 0.9792 ms (0.0010 s)
[+] eom: 1.0946 ms (0.0011 s)
[+] er: 0.7109 ms (0.0007 s)
[+] eri: 0.7485 ms (0.0007 s)
[+] fisher: 10.0558 ms (0.0101 s)
[+] fwma: 2.4774 ms (0.0025 s)
[+] ha: 76.2901 ms (0.0763 s)
[+] hilo: 85.5753 ms (0.0856 s)
[+] hl2: 0.4205 ms (0.0004 s)
[+] hlc3: 0.4163 ms (0.0004 s)
[+] hma: 0.4381 ms (0.0004 s)
[+] hwc: 8.7005 ms (0.0087 s)
[+] hwma: 6.8465 ms (0.0068 s)
[+] ifisher: 0.9197 ms (0.0009 s)
[+] increasing: 0.3971 ms (0.0004 s)
[+] inertia: 4.6250 ms (0.0046 s)
[+] jma: 30.0011 ms (0.0300 s)
[+] kama: 16.3468 ms (0.0163 s)
[+] kc: 1.0322 ms (0.0010 s)
[+] kdj: 1.7615 ms (0.0018 s)
[+] kst: 1.7984 ms (0.0018 s)
[+] kurtosis: 0.4013 ms (0.0004 s)
[+] kvo: 3.6646 ms (0.0037 s)
[+] linreg: 0.2294 ms (0.0002 s)
[+] log_return: 0.2223 ms (0.0002 s)
[+] long_run: 0.0255 ms (0.0000 s)
[+] macd: 0.5045 ms (0.0005 s)
[+] mad: 15.2406 ms (0.0152 s)
[+] massi: 0.8263 ms (0.0008 s)
[+] mcgd: 2.4424 ms (0.0024 s)
[+] median: 0.8675 ms (0.0009 s)
[+] mfi: 0.5305 ms (0.0005 s)
[+] midpoint: 0.1971 ms (0.0002 s)
[+] midprice: 0.2916 ms (0.0003 s)
[+] mom: 0.1814 ms (0.0002 s)
[+] natr: 0.3781 ms (0.0004 s)
[+] nvi: 2.9630 ms (0.0030 s)
[+] obv: 0.3137 ms (0.0003 s)
[+] ohlc4: 0.4619 ms (0.0005 s)
[+] pdist: 1.2474 ms (0.0012 s)
[+] percent_return: 0.2060 ms (0.0002 s)
[+] pgo: 0.6143 ms (0.0006 s)
[+] ppo: 0.5673 ms (0.0006 s)
[+] psar: 110.0718 ms (0.1101 s)
[+] psl: 1.6052 ms (0.0016 s)
[+] pvi: 2.9368 ms (0.0029 s)
[+] pvo: 0.7872 ms (0.0008 s)
[+] pvol: 0.3260 ms (0.0003 s)
[+] pvr: 1.3928 ms (0.0014 s)
[+] pvt: 0.4209 ms (0.0004 s)
[+] pwma: 2.8796 ms (0.0029 s)
[+] qqe: 202.6627 ms (0.2027 s)
[+] qstick: 0.6878 ms (0.0007 s)
[+] quantile: 0.8532 ms (0.0009 s)
[+] reflex: 0.2722 ms (0.0003 s)
[+] remap: 0.2016 ms (0.0002 s)
[+] rma: 0.3881 ms (0.0004 s)
[+] roc: 0.2223 ms (0.0002 s)
[+] rsi: 0.2119 ms (0.0002 s)
[+] rsx: 10.3597 ms (0.0104 s)
[+] rvgi: 8.5408 ms (0.0085 s)
[+] rvi: 4.7764 ms (0.0048 s)
[+] short_run: 0.0288 ms (0.0000 s)
[+] sinwma: 11.0433 ms (0.0110 s)
[+] skew: 0.3478 ms (0.0003 s)
[+] slope: 0.2846 ms (0.0003 s)
[+] sma: 0.1960 ms (0.0002 s)
[+] smi: 1.1860 ms (0.0012 s)
[+] smma: 73.3924 ms (0.0734 s)
[+] squeeze: 3.2106 ms (0.0032 s)
[+] squeeze_pro: 5.7890 ms (0.0058 s)
[+] ssf: 0.2241 ms (0.0002 s)
[+] ssf3: 0.1953 ms (0.0002 s)
[+] stc: 25.6733 ms (0.0257 s)
[+] stdev: 0.2156 ms (0.0002 s)
[+] stoch: 0.6277 ms (0.0006 s)
[+] stochf: 0.6085 ms (0.0006 s)
[+] stochrsi: 1.4290 ms (0.0014 s)
[+] supertrend: 56.6423 ms (0.0566 s)
[+] swma: 2.4290 ms (0.0024 s)
[+] t3: 0.2316 ms (0.0002 s)
[+] td_seq: 943.5405 ms (0.9435 s)
[+] tema: 0.3132 ms (0.0003 s)
[+] thermo: 1.6780 ms (0.0017 s)
[+] tos_stdevall: 3.5226 ms (0.0035 s)
[+] trendflex: 0.2508 ms (0.0003 s)
[+] trima: 0.2124 ms (0.0002 s)
[+] trix: 0.9600 ms (0.0010 s)
[+] true_range: 0.4009 ms (0.0004 s)
[+] tsi: 0.8260 ms (0.0008 s)
[+] tsignals: 0.0260 ms (0.0000 s)
[+] ttm_trend: 2.2236 ms (0.0022 s)
[+] ui: 1.1523 ms (0.0012 s)
[+] uo: 0.4464 ms (0.0004 s)
[+] variance: 0.1921 ms (0.0002 s)
[+] vhf: 1.3115 ms (0.0013 s)
[+] vidya: 52.4157 ms (0.0524 s)
[+] vortex: 1.6645 ms (0.0017 s)
[+] vwap: 2.1985 ms (0.0022 s)
[+] vwma: 0.5217 ms (0.0005 s)
[+] wb_tsv: 4.3712 ms (0.0044 s)
[+] wcp: 0.4314 ms (0.0004 s)
[+] willr: 0.4010 ms (0.0004 s)
[+] wma: 0.1849 ms (0.0002 s)
[+] xsignals: 0.0256 ms (0.0000 s)
[+] zlma: 0.3768 ms (0.0004 s)
[+] zscore: 0.4050 ms (0.0004 s)

============================================================
  Slowest 10 Indicators [145]
  Observations[talib]: 1260
============================================================
               secs        ms
Indicator                    
td_seq      0.94354  943.5405
alligator   0.22590  225.9000
qqe         0.20266  202.6627
psar        0.11007  110.0718
hilo        0.08558   85.5753
ha          0.07629   76.2901
smma        0.07339   73.3924
supertrend  0.05664   56.6423
vidya       0.05242   52.4157
ebsw        0.04006   40.0562

============================================================
Time Stats:
           secs           ms
min    0.000030     0.025500
50%    0.000710     0.710900
mean   0.014868    14.867553
max    0.943540   943.540500
total  2.155790  2155.795200

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

In [9]:
tal_speedsdf
Out [9]:
  secs ms
Indicator    
td_seq 0.943540 943.540500
alligator 0.225900 225.900000
qqe 0.202660 202.662700
psar 0.110070 110.071800
hilo 0.085580 85.575300
ha 0.076290 76.290100
smma 0.073390 73.392400
supertrend 0.056640 56.642300
vidya 0.052420 52.415700
ebsw 0.040060 40.056200
In [10]:
tal_statsdf
Out [10]:
secs ms
min 0.000030 0.025500
50% 0.000710 0.710900
mean 0.014868 14.867553
max 0.943540 943.540500
total 2.155790 2155.795200

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.014868 0.94354 2.15579
ms 0.02550 0.71090 14.867553 943.54050 2155.79520
Pandas TA secs 0.00003 0.00147 0.015382 0.93716 2.23046
ms 0.02520 1.47220 15.382661 937.15830 2230.48580
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.00076 0.000515 0.00638 0.07467
ms 0.0003 0.76130 0.515108 6.38220 74.69060
In [ ]: