From b8f466c9f61a0f71b925ad6d92139439f3ec0deb Mon Sep 17 00:00:00 2001 From: Kevin Johnson Date: Sat, 23 Dec 2023 17:20:31 -0800 Subject: [PATCH] BUG #743 tmo BUG linreg div 0 DOC MAINT TST updates --- README.md | 8 +- examples/Speed_Test.ipynb | 2220 ++++++++++++++++++++++++++--------- pandas_ta/core.py | 7 +- pandas_ta/momentum/tmo.py | 68 +- pandas_ta/overlap/linreg.py | 7 +- pandas_ta/statistics/mad.py | 9 +- pandas_ta/trend/chop.py | 2 +- pandas_ta/utils/_core.py | 10 +- setup.py | 2 +- tests/test_studies.py | 16 +- 10 files changed, 1759 insertions(+), 590 deletions(-) diff --git a/README.md b/README.md index de48cb64..c2d30a7b 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,12 @@ We represent millions of investors who want to leverage state-of-the-art data sc
+[QUANTCONNECT](https://www.quantconnect.com/) +------------------- +> QUANTCONNECT powers your quantitative research with a cutting-edge, unified API for research, backtesting, and live trading on the world's leading algorithmic trading platform. + +
+ [Tune TA](https://github.com/jmrichardson/tuneta) ------------------- > TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return. Indicator parameter(s) are selected using clustering techniques to avoid "peak" or "lucky" values. The set of tuned indicators can be ... @@ -197,7 +203,7 @@ $ pip install pandas_ta[full] Development Version ------------------- -The _development_ version, _0.4.8b_, includes _numerous_ bug fixes, speed improvements and better documentation since release, _0.3.14b_. +The _development_ version, _0.4.9b_, includes _numerous_ bug fixes, speed improvements and better documentation since release, _0.3.14b_. ```sh $ pip install -U git+https://github.com/twopirllc/pandas-ta.git@development ``` diff --git a/examples/Speed_Test.ipynb b/examples/Speed_Test.ipynb index aa6aabb3..05b8770b 100644 --- a/examples/Speed_Test.ipynb +++ b/examples/Speed_Test.ipynb @@ -7,7 +7,7 @@ "source": [ "# Indicator Speed Test\n", "\n", - "This Notebook shows the **Indicator Speed** with and without TA Lib\n", + "This Notebook shows the speed of each indicator _with_ and _without_ TA Lib\n", "* Results may vary if ```vectorbt``` or ```numba``` is installed.\n", "* These values are based on a M1 Macbook with 16GB Memory." ] @@ -74,7 +74,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[+] yf | SPY(1257, 7): 6947.3967 ms (6.9474 s)\n" + "[+] yf | SPY(1259, 7): 6721.5163 ms (6.7215 s)\n" ] } ], @@ -92,7 +92,7 @@ { "data": { "text/plain": [ - "(1257, 7)" + "(1259, 7)" ] }, "execution_count": 3, @@ -119,49 +119,10 @@ "execution_count": 4, "id": "38176845-652e-43dc-b426-12eaa9952c5f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "============================================================\n", - " Slowest Indicators\n", - " Observations: 150\n", - "============================================================\n", - " ms secs\n", - "Indicator \n", - "alligator 3316.3739 3.31637\n", - "cdl_pattern 1659.4503 1.65945\n", - "pivots 752.4150 0.75241\n", - "mama 688.8270 0.68883\n", - "atrts 534.8506 0.53485\n", - "... ... ...\n", - "vhm 0.0995 0.00010\n", - "tsignals 0.0012 0.00000\n", - "long_run 0.0010 0.00000\n", - "xsignals 0.0018 0.00000\n", - "short_run 0.0015 0.00000\n", - "\n", - "[154 rows x 2 columns]\n", - "\n", - "============================================================\n", - "Time Stats:\n", - " ms secs\n", - "min 0.001000 0.000000\n", - "50% 1.118350 0.001120\n", - "mean 54.572834 0.054573\n", - "max 3316.373900 3.316370\n", - "total 8404.216500 8.404230\n", - "\n", - "============================================================\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "if has_numba:\n", - " ta.speed_test(df.iloc[-150:], talib=False)" + " ta.speed_test(df.iloc[-150:], talib=False, silent=True)" ] }, { @@ -183,186 +144,186 @@ "output_type": "stream", "text": [ "\n", - "[+] aberration: 1.2778 ms (0.0013 s)\n", - "[+] accbands: 1.4492 ms (0.0014 s)\n", - "[+] ad: 0.8934 ms (0.0009 s)\n", - "[+] adosc: 1.5647 ms (0.0016 s)\n", - "[+] adx: 3.0720 ms (0.0031 s)\n", - "[+] alligator: 58.5015 ms (0.0585 s)\n", - "[+] alma: 1.4974 ms (0.0015 s)\n", - "[+] alphatrend: 4.1675 ms (0.0042 s)\n", - "[+] amat: 2.4354 ms (0.0024 s)\n", - "[+] ao: 0.4658 ms (0.0005 s)\n", - "[+] aobv: 3.5552 ms (0.0036 s)\n", - "[+] apo: 0.9125 ms (0.0009 s)\n", - "[+] aroon: 7.4409 ms (0.0074 s)\n", - "[+] atr: 1.4192 ms (0.0014 s)\n", - "[+] atrts: 2.0108 ms (0.0020 s)\n", - "[+] bbands: 1.3580 ms (0.0014 s)\n", - "[+] bias: 0.6308 ms (0.0006 s)\n", - "[+] bop: 0.7615 ms (0.0008 s)\n", - "[+] brar: 2.3930 ms (0.0024 s)\n", - "[+] cci: 15.5640 ms (0.0156 s)\n", - "[+] cdl_pattern: 7.2095 ms (0.0072 s)\n", - "[+] cdl_z: 1.5340 ms (0.0015 s)\n", - "[+] cfo: 0.3285 ms (0.0003 s)\n", - "[+] cg: 6.2095 ms (0.0062 s)\n", - "[+] chandelier_exit: 2.7367 ms (0.0027 s)\n", - "[+] chop: 1.0838 ms (0.0011 s)\n", - "[+] cksp: 1.3098 ms (0.0013 s)\n", - "[+] cmf: 1.0076 ms (0.0010 s)\n", - "[+] cmo: 1.5951 ms (0.0016 s)\n", - "[+] coppock: 0.3079 ms (0.0003 s)\n", - "[+] crsi: 2.7429 ms (0.0027 s)\n", - "[+] cti: 15.2342 ms (0.0152 s)\n", - "[+] cube: 0.5799 ms (0.0006 s)\n", - "[+] decay: 0.1535 ms (0.0002 s)\n", - "[+] decreasing: 0.2817 ms (0.0003 s)\n", - "[+] dema: 0.7630 ms (0.0008 s)\n", - "[+] dm: 2.0085 ms (0.0020 s)\n", - "[+] donchian: 0.7645 ms (0.0008 s)\n", - "[+] dpo: 0.3117 ms (0.0003 s)\n", - "[+] ebsw: 34.4620 ms (0.0345 s)\n", - "[+] efi: 0.3709 ms (0.0004 s)\n", - "[+] ema: 0.3875 ms (0.0004 s)\n", - "[+] entropy: 0.5779 ms (0.0006 s)\n", - "[+] eom: 0.9133 ms (0.0009 s)\n", - "[+] er: 0.4318 ms (0.0004 s)\n", - "[+] eri: 0.6799 ms (0.0007 s)\n", - "[+] fisher: 6.3067 ms (0.0063 s)\n", - "[+] fwma: 3.3041 ms (0.0033 s)\n", - "[+] ha: 0.6929 ms (0.0007 s)\n", - "[+] hilo: 43.3909 ms (0.0434 s)\n", - "[+] hl2: 0.3547 ms (0.0004 s)\n", - "[+] hlc3: 0.3152 ms (0.0003 s)\n", - "[+] hma: 0.3883 ms (0.0004 s)\n", - "[+] hwc: 8.1393 ms (0.0081 s)\n", - "[+] hwma: 7.3752 ms (0.0074 s)\n", - "[+] ifisher: 0.5579 ms (0.0006 s)\n", - "[+] increasing: 0.3202 ms (0.0003 s)\n", - "[+] inertia: 2.0050 ms (0.0020 s)\n", - "[+] jma: 25.3266 ms (0.0253 s)\n", - "[+] kama: 7.4083 ms (0.0074 s)\n", - "[+] kc: 0.8870 ms (0.0009 s)\n", - "[+] kdj: 1.3318 ms (0.0013 s)\n", - "[+] kst: 1.3393 ms (0.0013 s)\n", - "[+] kurtosis: 0.2628 ms (0.0003 s)\n", - "[+] kvo: 2.2343 ms (0.0022 s)\n", - "[+] linreg: 11.4833 ms (0.0115 s)\n", - "[+] log_return: 0.1795 ms (0.0002 s)\n", - "[+] long_run: 0.0011 ms (0.0000 s)\n", - "[+] macd: 1.7831 ms (0.0018 s)\n", - "[+] mad: 14.5006 ms (0.0145 s)\n", - "[+] mama: 0.4691 ms (0.0005 s)\n", - "[+] massi: 1.2423 ms (0.0012 s)\n", - "[+] mcgd: 1.8795 ms (0.0019 s)\n", - "[+] median: 0.6855 ms (0.0007 s)\n", - "[+] mfi: 3.2603 ms (0.0033 s)\n", - "[+] midpoint: 0.5056 ms (0.0005 s)\n", - "[+] midprice: 0.5150 ms (0.0005 s)\n", - "[+] mom: 0.1635 ms (0.0002 s)\n", - "[+] natr: 1.6323 ms (0.0016 s)\n", - "[+] nvi: 1.3775 ms (0.0014 s)\n", - "[+] obv: 0.8711 ms (0.0009 s)\n", - "[+] ohlc4: 0.3715 ms (0.0004 s)\n", - "[+] pdist: 1.1083 ms (0.0011 s)\n", - "[+] percent_return: 0.1532 ms (0.0002 s)\n", - "[+] pgo: 0.5498 ms (0.0005 s)\n", - "[+] pivots: 5.7210 ms (0.0057 s)\n", - "[+] ppo: 1.5014 ms (0.0015 s)\n", - "[+] psar: 52.8610 ms (0.0529 s)\n", - "[+] psl: 0.9460 ms (0.0009 s)\n", - "[+] pvi: 1.5730 ms (0.0016 s)\n", - "[+] pvo: 0.6139 ms (0.0006 s)\n", - "[+] pvol: 0.2426 ms (0.0002 s)\n", - "[+] pvr: 1.1282 ms (0.0011 s)\n", - "[+] pvt: 0.3241 ms (0.0003 s)\n", - "[+] pwma: 1.8668 ms (0.0019 s)\n", - "[+] qqe: 98.1285 ms (0.0981 s)\n", - "[+] qstick: 0.8072 ms (0.0008 s)\n", - "[+] quantile: 0.7324 ms (0.0007 s)\n", - "[+] reflex: 0.1839 ms (0.0002 s)\n", - "[+] remap: 0.1418 ms (0.0001 s)\n", - "[+] rma: 0.1993 ms (0.0002 s)\n", - "[+] roc: 0.3497 ms (0.0003 s)\n", - "[+] rsi: 1.0836 ms (0.0011 s)\n", - "[+] rsx: 7.1523 ms (0.0072 s)\n", - "[+] rvgi: 6.2902 ms (0.0063 s)\n", - "[+] rvi: 1.7952 ms (0.0018 s)\n", - "[+] rwi: 1.9255 ms (0.0019 s)\n", - "[+] short_run: 0.0013 ms (0.0000 s)\n", - "[+] sinwma: 7.3411 ms (0.0073 s)\n", - "[+] skew: 0.3218 ms (0.0003 s)\n", - "[+] slope: 0.2352 ms (0.0002 s)\n", - "[+] sma: 0.3535 ms (0.0004 s)\n", - "[+] smi: 1.1718 ms (0.0012 s)\n", - "[+] smma: 19.3454 ms (0.0193 s)\n", - "[+] squeeze: 2.6601 ms (0.0027 s)\n", - "[+] squeeze_pro: 4.2988 ms (0.0043 s)\n", - "[+] ssf: 0.1618 ms (0.0002 s)\n", - "[+] ssf3: 0.1437 ms (0.0001 s)\n", - "[+] stc: 24.9052 ms (0.0249 s)\n", - "[+] stdev: 0.3407 ms (0.0003 s)\n", - "[+] stoch: 2.0885 ms (0.0021 s)\n", - "[+] stochf: 1.5050 ms (0.0015 s)\n", - "[+] stochrsi: 1.0823 ms (0.0011 s)\n", - "[+] supertrend: 25.4998 ms (0.0255 s)\n", - "[+] swma: 2.6912 ms (0.0027 s)\n", - "[+] t3: 1.9096 ms (0.0019 s)\n", - "[+] td_seq: 775.5132 ms (0.7755 s)\n", - "[+] tema: 1.3002 ms (0.0013 s)\n", - "[+] thermo: 1.3563 ms (0.0014 s)\n", - "[+] tmo: 1.4320 ms (0.0014 s)\n", - "[+] tos_stdevall: 2.5736 ms (0.0026 s)\n", - "[+] trendflex: 0.1938 ms (0.0002 s)\n", - "[+] trima: 0.5869 ms (0.0006 s)\n", - "[+] trix: 1.6134 ms (0.0016 s)\n", - "[+] true_range: 1.0704 ms (0.0011 s)\n", - "[+] tsi: 1.7305 ms (0.0017 s)\n", - "[+] tsignals: 0.0015 ms (0.0000 s)\n", - "[+] ttm_trend: 1.5180 ms (0.0015 s)\n", - "[+] ui: 0.6319 ms (0.0006 s)\n", - "[+] uo: 2.8293 ms (0.0028 s)\n", - "[+] variance: 0.2957 ms (0.0003 s)\n", - "[+] vhf: 0.9819 ms (0.0010 s)\n", - "[+] vhm: 1.3603 ms (0.0014 s)\n", - "[+] vidya: 24.5203 ms (0.0245 s)\n", - "[+] vortex: 1.3915 ms (0.0014 s)\n", - "[+] vwap: 1.7239 ms (0.0017 s)\n", - "[+] vwma: 0.3972 ms (0.0004 s)\n", - "[+] wb_tsv: 2.1012 ms (0.0021 s)\n", - "[+] wcp: 0.2983 ms (0.0003 s)\n", - "[+] willr: 0.7170 ms (0.0007 s)\n", - "[+] wma: 8.3035 ms (0.0083 s)\n", - "[+] xsignals: 0.0017 ms (0.0000 s)\n", - "[+] zlma: 0.5865 ms (0.0006 s)\n", - "[+] zscore: 0.8328 ms (0.0008 s)\n", + "[+] aberration: 1.2820 ms (0.0013 s)\n", + "[+] accbands: 1.2743 ms (0.0013 s)\n", + "[+] ad: 0.9867 ms (0.0010 s)\n", + "[+] adosc: 2.3943 ms (0.0024 s)\n", + "[+] adx: 3.7175 ms (0.0037 s)\n", + "[+] alligator: 58.4777 ms (0.0585 s)\n", + "[+] alma: 0.7621 ms (0.0008 s)\n", + "[+] alphatrend: 4.2357 ms (0.0042 s)\n", + "[+] amat: 2.4880 ms (0.0025 s)\n", + "[+] ao: 0.4695 ms (0.0005 s)\n", + "[+] aobv: 3.6386 ms (0.0036 s)\n", + "[+] apo: 0.8691 ms (0.0009 s)\n", + "[+] aroon: 7.3594 ms (0.0074 s)\n", + "[+] atr: 1.4435 ms (0.0014 s)\n", + "[+] atrts: 2.0349 ms (0.0020 s)\n", + "[+] bbands: 1.3813 ms (0.0014 s)\n", + "[+] bias: 0.6276 ms (0.0006 s)\n", + "[+] bop: 0.7755 ms (0.0008 s)\n", + "[+] brar: 2.6403 ms (0.0026 s)\n", + "[+] cci: 15.0808 ms (0.0151 s)\n", + "[+] cdl_pattern: 7.3896 ms (0.0074 s)\n", + "[+] cdl_z: 1.5592 ms (0.0016 s)\n", + "[+] cfo: 0.3318 ms (0.0003 s)\n", + "[+] cg: 6.2051 ms (0.0062 s)\n", + "[+] chandelier_exit: 2.9417 ms (0.0029 s)\n", + "[+] chop: 1.1763 ms (0.0012 s)\n", + "[+] cksp: 1.3561 ms (0.0014 s)\n", + "[+] cmf: 1.0372 ms (0.0010 s)\n", + "[+] cmo: 1.6456 ms (0.0016 s)\n", + "[+] coppock: 0.3190 ms (0.0003 s)\n", + "[+] crsi: 2.7863 ms (0.0028 s)\n", + "[+] cti: 15.0775 ms (0.0151 s)\n", + "[+] cube: 0.6004 ms (0.0006 s)\n", + "[+] decay: 0.1622 ms (0.0002 s)\n", + "[+] decreasing: 0.2864 ms (0.0003 s)\n", + "[+] dema: 0.7745 ms (0.0008 s)\n", + "[+] dm: 2.0499 ms (0.0020 s)\n", + "[+] donchian: 0.7691 ms (0.0008 s)\n", + "[+] dpo: 0.3183 ms (0.0003 s)\n", + "[+] ebsw: 34.2073 ms (0.0342 s)\n", + "[+] efi: 0.3756 ms (0.0004 s)\n", + "[+] ema: 0.3783 ms (0.0004 s)\n", + "[+] entropy: 0.5902 ms (0.0006 s)\n", + "[+] eom: 0.9238 ms (0.0009 s)\n", + "[+] er: 0.4375 ms (0.0004 s)\n", + "[+] eri: 0.6157 ms (0.0006 s)\n", + "[+] fisher: 5.6681 ms (0.0057 s)\n", + "[+] fwma: 1.9081 ms (0.0019 s)\n", + "[+] ha: 0.5776 ms (0.0006 s)\n", + "[+] hilo: 42.1915 ms (0.0422 s)\n", + "[+] hl2: 0.2803 ms (0.0003 s)\n", + "[+] hlc3: 0.4520 ms (0.0005 s)\n", + "[+] hma: 0.4261 ms (0.0004 s)\n", + "[+] hwc: 8.5062 ms (0.0085 s)\n", + "[+] hwma: 7.5285 ms (0.0075 s)\n", + "[+] ifisher: 0.6965 ms (0.0007 s)\n", + "[+] increasing: 0.3380 ms (0.0003 s)\n", + "[+] inertia: 2.0829 ms (0.0021 s)\n", + "[+] jma: 24.0994 ms (0.0241 s)\n", + "[+] kama: 7.3705 ms (0.0074 s)\n", + "[+] kc: 0.9083 ms (0.0009 s)\n", + "[+] kdj: 1.3450 ms (0.0013 s)\n", + "[+] kst: 1.3582 ms (0.0014 s)\n", + "[+] kurtosis: 0.2645 ms (0.0003 s)\n", + "[+] kvo: 2.2730 ms (0.0023 s)\n", + "[+] linreg: 11.0057 ms (0.0110 s)\n", + "[+] log_return: 0.1800 ms (0.0002 s)\n", + "[+] long_run: 0.0012 ms (0.0000 s)\n", + "[+] macd: 1.8014 ms (0.0018 s)\n", + "[+] mad: 14.1169 ms (0.0141 s)\n", + "[+] mama: 0.4182 ms (0.0004 s)\n", + "[+] massi: 1.2321 ms (0.0012 s)\n", + "[+] mcgd: 1.8766 ms (0.0019 s)\n", + "[+] median: 0.7056 ms (0.0007 s)\n", + "[+] mfi: 3.0112 ms (0.0030 s)\n", + "[+] midpoint: 0.4546 ms (0.0005 s)\n", + "[+] midprice: 0.5246 ms (0.0005 s)\n", + "[+] mom: 0.1675 ms (0.0002 s)\n", + "[+] natr: 1.6340 ms (0.0016 s)\n", + "[+] nvi: 1.3963 ms (0.0014 s)\n", + "[+] obv: 0.8954 ms (0.0009 s)\n", + "[+] ohlc4: 0.3790 ms (0.0004 s)\n", + "[+] pdist: 1.1023 ms (0.0011 s)\n", + "[+] percent_return: 0.1662 ms (0.0002 s)\n", + "[+] pgo: 0.5911 ms (0.0006 s)\n", + "[+] pivots: 6.0602 ms (0.0061 s)\n", + "[+] ppo: 1.5558 ms (0.0016 s)\n", + "[+] psar: 53.9431 ms (0.0539 s)\n", + "[+] psl: 0.9305 ms (0.0009 s)\n", + "[+] pvi: 1.5093 ms (0.0015 s)\n", + "[+] pvo: 0.6487 ms (0.0006 s)\n", + "[+] pvol: 0.2480 ms (0.0002 s)\n", + "[+] pvr: 1.1587 ms (0.0012 s)\n", + "[+] pvt: 0.3346 ms (0.0003 s)\n", + "[+] pwma: 1.8628 ms (0.0019 s)\n", + "[+] qqe: 99.8817 ms (0.0999 s)\n", + "[+] qstick: 0.8505 ms (0.0009 s)\n", + "[+] quantile: 0.7477 ms (0.0007 s)\n", + "[+] reflex: 0.1978 ms (0.0002 s)\n", + "[+] remap: 0.1480 ms (0.0001 s)\n", + "[+] rma: 0.2027 ms (0.0002 s)\n", + "[+] roc: 0.3554 ms (0.0004 s)\n", + "[+] rsi: 1.1115 ms (0.0011 s)\n", + "[+] rsx: 7.3133 ms (0.0073 s)\n", + "[+] rvgi: 6.0868 ms (0.0061 s)\n", + "[+] rvi: 1.8693 ms (0.0019 s)\n", + "[+] rwi: 2.0012 ms (0.0020 s)\n", + "[+] short_run: 0.0015 ms (0.0000 s)\n", + "[+] sinwma: 7.8431 ms (0.0078 s)\n", + "[+] skew: 0.4854 ms (0.0005 s)\n", + "[+] slope: 0.2809 ms (0.0003 s)\n", + "[+] sma: 0.4560 ms (0.0005 s)\n", + "[+] smi: 1.3863 ms (0.0014 s)\n", + "[+] smma: 19.1926 ms (0.0192 s)\n", + "[+] squeeze: 2.8214 ms (0.0028 s)\n", + "[+] squeeze_pro: 4.3238 ms (0.0043 s)\n", + "[+] ssf: 0.1888 ms (0.0002 s)\n", + "[+] ssf3: 0.1439 ms (0.0001 s)\n", + "[+] stc: 24.7624 ms (0.0248 s)\n", + "[+] stdev: 0.3305 ms (0.0003 s)\n", + "[+] stoch: 2.1044 ms (0.0021 s)\n", + "[+] stochf: 1.5150 ms (0.0015 s)\n", + "[+] stochrsi: 1.0752 ms (0.0011 s)\n", + "[+] supertrend: 24.3632 ms (0.0244 s)\n", + "[+] swma: 1.7897 ms (0.0018 s)\n", + "[+] t3: 1.9121 ms (0.0019 s)\n", + "[+] td_seq: 809.4583 ms (0.8095 s)\n", + "[+] tema: 1.3203 ms (0.0013 s)\n", + "[+] thermo: 1.3618 ms (0.0014 s)\n", + "[+] tmo: 1.3092 ms (0.0013 s)\n", + "[+] tos_stdevall: 2.3369 ms (0.0023 s)\n", + "[+] trendflex: 0.1884 ms (0.0002 s)\n", + "[+] trima: 0.6082 ms (0.0006 s)\n", + "[+] trix: 1.6441 ms (0.0016 s)\n", + "[+] true_range: 1.0535 ms (0.0011 s)\n", + "[+] tsi: 1.8968 ms (0.0019 s)\n", + "[+] tsignals: 0.0014 ms (0.0000 s)\n", + "[+] ttm_trend: 1.7645 ms (0.0018 s)\n", + "[+] ui: 0.6965 ms (0.0007 s)\n", + "[+] uo: 2.5292 ms (0.0025 s)\n", + "[+] variance: 0.2646 ms (0.0003 s)\n", + "[+] vhf: 0.9753 ms (0.0010 s)\n", + "[+] vhm: 1.3896 ms (0.0014 s)\n", + "[+] vidya: 24.4690 ms (0.0245 s)\n", + "[+] vortex: 1.5175 ms (0.0015 s)\n", + "[+] vwap: 2.2810 ms (0.0023 s)\n", + "[+] vwma: 0.5093 ms (0.0005 s)\n", + "[+] wb_tsv: 2.4745 ms (0.0025 s)\n", + "[+] wcp: 0.5129 ms (0.0005 s)\n", + "[+] willr: 0.8930 ms (0.0009 s)\n", + "[+] wma: 9.1959 ms (0.0092 s)\n", + "[+] xsignals: 0.0022 ms (0.0000 s)\n", + "[+] zlma: 0.9088 ms (0.0009 s)\n", + "[+] zscore: 0.9809 ms (0.0010 s)\n", "\n", "============================================================\n", " Slowest 10 Indicators [154]\n", - " Observations: 1257\n", + " Observations: 1259\n", "============================================================\n", " ms secs\n", "Indicator \n", - "td_seq 775.5132 0.77551\n", - "qqe 98.1285 0.09813\n", - "alligator 58.5015 0.05850\n", - "psar 52.8610 0.05286\n", - "hilo 43.3909 0.04339\n", - "ebsw 34.4620 0.03446\n", - "supertrend 25.4998 0.02550\n", - "jma 25.3266 0.02533\n", - "stc 24.9052 0.02491\n", - "vidya 24.5203 0.02452\n", + "td_seq 809.4583 0.80946\n", + "qqe 99.8817 0.09988\n", + "alligator 58.4777 0.05848\n", + "psar 53.9431 0.05394\n", + "hilo 42.1915 0.04219\n", + "ebsw 34.2073 0.03421\n", + "stc 24.7624 0.02476\n", + "vidya 24.4690 0.02447\n", + "supertrend 24.3632 0.02436\n", + "jma 24.0994 0.02410\n", "\n", "============================================================\n", "Time Stats:\n", " ms secs\n", - "min 0.001100 0.000000\n", - "50% 1.289000 0.001290\n", - "mean 9.529325 0.009529\n", - "max 775.513200 0.775510\n", - "total 1467.516000 1.467470\n", + "min 0.001200 0.000000\n", + "50% 1.278150 0.001275\n", + "mean 9.757957 0.009758\n", + "max 809.458300 0.809460\n", + "total 1502.725400 1.502770\n", "\n", "============================================================\n", "\n" @@ -383,41 +344,41 @@ "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -427,60 +388,60 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", "
 mssecsmssecs
Indicator
td_seq775.5132000.775510td_seq809.4583000.809460
qqe98.1285000.098130qqe99.8817000.099880
alligator58.5015000.058500alligator58.4777000.058480
psar52.8610000.052860psar53.9431000.053940
hilo43.3909000.043390hilo42.1915000.042190
ebsw34.4620000.034460ebsw34.2073000.034210
supertrend25.4998000.025500stc24.7624000.024760
jma25.3266000.025330vidya24.4690000.024470
stc24.9052000.024910supertrend24.3632000.024360
vidya24.5203000.024520jma24.0994000.024100
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 6, @@ -526,28 +487,28 @@ " \n", " \n", " min\n", - " 0.001100\n", + " 0.001200\n", " 0.000000\n", " \n", " \n", " 50%\n", - " 1.289000\n", - " 0.001290\n", + " 1.278150\n", + " 0.001275\n", " \n", " \n", " mean\n", - " 9.529325\n", - " 0.009529\n", + " 9.757957\n", + " 0.009758\n", " \n", " \n", " max\n", - " 775.513200\n", - " 0.775510\n", + " 809.458300\n", + " 0.809460\n", " \n", " \n", " total\n", - " 1467.516000\n", - " 1.467470\n", + " 1502.725400\n", + " 1.502770\n", " \n", " \n", "\n", @@ -555,11 +516,11 @@ ], "text/plain": [ " ms secs\n", - "min 0.001100 0.000000\n", - "50% 1.289000 0.001290\n", - "mean 9.529325 0.009529\n", - "max 775.513200 0.775510\n", - "total 1467.516000 1.467470" + "min 0.001200 0.000000\n", + "50% 1.278150 0.001275\n", + "mean 9.757957 0.009758\n", + "max 809.458300 0.809460\n", + "total 1502.725400 1.502770" ] }, "execution_count": 7, @@ -598,186 +559,186 @@ "output_type": "stream", "text": [ "\n", - "[+] aberration: 1.8360 ms (0.0018 s)\n", - "[+] accbands: 1.4584 ms (0.0015 s)\n", - "[+] ad: 0.7203 ms (0.0007 s)\n", - "[+] adosc: 0.4615 ms (0.0005 s)\n", - "[+] adx: 3.5402 ms (0.0035 s)\n", - "[+] alligator: 58.3756 ms (0.0584 s)\n", - "[+] alma: 0.7484 ms (0.0007 s)\n", - "[+] alphatrend: 1.3322 ms (0.0013 s)\n", - "[+] amat: 1.9752 ms (0.0020 s)\n", - "[+] ao: 0.4505 ms (0.0005 s)\n", - "[+] aobv: 2.7663 ms (0.0028 s)\n", - "[+] apo: 0.1982 ms (0.0002 s)\n", - "[+] aroon: 0.5680 ms (0.0006 s)\n", - "[+] atr: 0.4222 ms (0.0004 s)\n", - "[+] atrts: 0.5730 ms (0.0006 s)\n", - "[+] bbands: 0.8932 ms (0.0009 s)\n", - "[+] bias: 0.3204 ms (0.0003 s)\n", - "[+] bop: 0.4397 ms (0.0004 s)\n", - "[+] brar: 3.1286 ms (0.0031 s)\n", - "[+] cci: 0.3985 ms (0.0004 s)\n", - "[+] cdl_pattern: 7.3599 ms (0.0074 s)\n", - "[+] cdl_z: 1.6163 ms (0.0016 s)\n", - "[+] cfo: 0.5248 ms (0.0005 s)\n", - "[+] cg: 6.4300 ms (0.0064 s)\n", - "[+] chandelier_exit: 1.9151 ms (0.0019 s)\n", - "[+] chop: 1.0992 ms (0.0011 s)\n", - "[+] cksp: 1.3273 ms (0.0013 s)\n", - "[+] cmf: 1.0408 ms (0.0010 s)\n", - "[+] cmo: 0.1860 ms (0.0002 s)\n", - "[+] coppock: 0.2979 ms (0.0003 s)\n", - "[+] crsi: 0.9211 ms (0.0009 s)\n", - "[+] cti: 15.4120 ms (0.0154 s)\n", - "[+] cube: 0.5970 ms (0.0006 s)\n", - "[+] decay: 0.1582 ms (0.0002 s)\n", - "[+] decreasing: 0.2887 ms (0.0003 s)\n", - "[+] dema: 0.1683 ms (0.0002 s)\n", - "[+] dm: 0.4398 ms (0.0004 s)\n", - "[+] donchian: 0.7603 ms (0.0008 s)\n", - "[+] dpo: 0.3055 ms (0.0003 s)\n", - "[+] ebsw: 34.5248 ms (0.0345 s)\n", - "[+] efi: 0.3674 ms (0.0004 s)\n", - "[+] ema: 0.1455 ms (0.0001 s)\n", - "[+] entropy: 0.5773 ms (0.0006 s)\n", - "[+] eom: 0.9080 ms (0.0009 s)\n", - "[+] er: 0.4297 ms (0.0004 s)\n", - "[+] eri: 0.6014 ms (0.0006 s)\n", - "[+] fisher: 5.7969 ms (0.0058 s)\n", - "[+] fwma: 2.0095 ms (0.0020 s)\n", - "[+] ha: 0.5603 ms (0.0006 s)\n", - "[+] hilo: 41.2540 ms (0.0413 s)\n", - "[+] hl2: 0.2459 ms (0.0002 s)\n", - "[+] hlc3: 0.4617 ms (0.0005 s)\n", - "[+] hma: 0.4200 ms (0.0004 s)\n", - "[+] hwc: 8.2964 ms (0.0083 s)\n", - "[+] hwma: 7.2456 ms (0.0072 s)\n", - "[+] ifisher: 0.5586 ms (0.0006 s)\n", - "[+] increasing: 0.3144 ms (0.0003 s)\n", - "[+] inertia: 1.9570 ms (0.0020 s)\n", - "[+] jma: 24.9298 ms (0.0249 s)\n", - "[+] kama: 7.5203 ms (0.0075 s)\n", - "[+] kc: 0.9200 ms (0.0009 s)\n", - "[+] kdj: 1.3400 ms (0.0013 s)\n", - "[+] kst: 1.3352 ms (0.0013 s)\n", - "[+] kurtosis: 0.2626 ms (0.0003 s)\n", - "[+] kvo: 2.2288 ms (0.0022 s)\n", - "[+] linreg: 0.1739 ms (0.0002 s)\n", - "[+] log_return: 0.1713 ms (0.0002 s)\n", - "[+] long_run: 0.0013 ms (0.0000 s)\n", - "[+] macd: 1.2921 ms (0.0013 s)\n", - "[+] mad: 14.5802 ms (0.0146 s)\n", - "[+] mama: 0.7136 ms (0.0007 s)\n", - "[+] massi: 0.8916 ms (0.0009 s)\n", - "[+] mcgd: 2.1943 ms (0.0022 s)\n", - "[+] median: 0.7854 ms (0.0008 s)\n", - "[+] mfi: 0.5168 ms (0.0005 s)\n", - "[+] midpoint: 0.1915 ms (0.0002 s)\n", - "[+] midprice: 0.2493 ms (0.0002 s)\n", - "[+] mom: 0.1463 ms (0.0001 s)\n", - "[+] natr: 0.3239 ms (0.0003 s)\n", - "[+] nvi: 1.5527 ms (0.0016 s)\n", - "[+] obv: 0.2435 ms (0.0002 s)\n", - "[+] ohlc4: 0.3779 ms (0.0004 s)\n", - "[+] pdist: 1.1955 ms (0.0012 s)\n", - "[+] percent_return: 0.1652 ms (0.0002 s)\n", - "[+] pgo: 0.5775 ms (0.0006 s)\n", - "[+] pivots: 6.0667 ms (0.0061 s)\n", - "[+] ppo: 0.6287 ms (0.0006 s)\n", - "[+] psar: 54.8974 ms (0.0549 s)\n", - "[+] psl: 0.9486 ms (0.0009 s)\n", - "[+] pvi: 1.3990 ms (0.0014 s)\n", - "[+] pvo: 0.6132 ms (0.0006 s)\n", - "[+] pvol: 0.2384 ms (0.0002 s)\n", - "[+] pvr: 1.1209 ms (0.0011 s)\n", - "[+] pvt: 0.3263 ms (0.0003 s)\n", - "[+] pwma: 1.8940 ms (0.0019 s)\n", - "[+] qqe: 99.6320 ms (0.0996 s)\n", - "[+] qstick: 0.7507 ms (0.0008 s)\n", - "[+] quantile: 0.8410 ms (0.0008 s)\n", - "[+] reflex: 0.2475 ms (0.0002 s)\n", - "[+] remap: 0.1644 ms (0.0002 s)\n", - "[+] rma: 0.2316 ms (0.0002 s)\n", - "[+] roc: 0.1649 ms (0.0002 s)\n", - "[+] rsi: 0.1657 ms (0.0002 s)\n", - "[+] rsx: 8.6313 ms (0.0086 s)\n", - "[+] rvgi: 7.4696 ms (0.0075 s)\n", - "[+] rvi: 2.2207 ms (0.0022 s)\n", - "[+] rwi: 0.9882 ms (0.0010 s)\n", - "[+] short_run: 0.0031 ms (0.0000 s)\n", - "[+] sinwma: 7.7704 ms (0.0078 s)\n", - "[+] skew: 0.7325 ms (0.0007 s)\n", - "[+] slope: 0.2757 ms (0.0003 s)\n", - "[+] sma: 0.1551 ms (0.0002 s)\n", - "[+] smi: 1.3333 ms (0.0013 s)\n", - "[+] smma: 19.5759 ms (0.0196 s)\n", - "[+] squeeze: 3.1263 ms (0.0031 s)\n", - "[+] squeeze_pro: 4.3125 ms (0.0043 s)\n", - "[+] ssf: 0.2073 ms (0.0002 s)\n", - "[+] ssf3: 0.1604 ms (0.0002 s)\n", - "[+] stc: 25.9717 ms (0.0260 s)\n", - "[+] stdev: 0.2114 ms (0.0002 s)\n", - "[+] stoch: 0.6443 ms (0.0006 s)\n", - "[+] stochf: 0.9380 ms (0.0009 s)\n", - "[+] stochrsi: 1.0953 ms (0.0011 s)\n", - "[+] supertrend: 24.3121 ms (0.0243 s)\n", - "[+] swma: 1.8701 ms (0.0019 s)\n", - "[+] t3: 0.1542 ms (0.0002 s)\n", - "[+] td_seq: 771.1837 ms (0.7712 s)\n", - "[+] tema: 0.2545 ms (0.0003 s)\n", - "[+] thermo: 1.3305 ms (0.0013 s)\n", - "[+] tmo: 1.4747 ms (0.0015 s)\n", - "[+] tos_stdevall: 2.7400 ms (0.0027 s)\n", - "[+] trendflex: 0.2123 ms (0.0002 s)\n", - "[+] trima: 0.1590 ms (0.0002 s)\n", - "[+] trix: 1.0938 ms (0.0011 s)\n", - "[+] true_range: 0.4236 ms (0.0004 s)\n", - "[+] tsi: 0.8822 ms (0.0009 s)\n", - "[+] tsignals: 0.0015 ms (0.0000 s)\n", - "[+] ttm_trend: 1.5882 ms (0.0016 s)\n", - "[+] ui: 0.6381 ms (0.0006 s)\n", - "[+] uo: 0.3329 ms (0.0003 s)\n", - "[+] variance: 0.1389 ms (0.0001 s)\n", - "[+] vhf: 0.8986 ms (0.0009 s)\n", - "[+] vhm: 1.2778 ms (0.0013 s)\n", - "[+] vidya: 22.9886 ms (0.0230 s)\n", - "[+] vortex: 1.3916 ms (0.0014 s)\n", - "[+] vwap: 1.8682 ms (0.0019 s)\n", - "[+] vwma: 0.3758 ms (0.0004 s)\n", - "[+] wb_tsv: 2.0852 ms (0.0021 s)\n", - "[+] wcp: 1.3183 ms (0.0013 s)\n", - "[+] willr: 0.3033 ms (0.0003 s)\n", - "[+] wma: 0.1297 ms (0.0001 s)\n", - "[+] xsignals: 0.0029 ms (0.0000 s)\n", - "[+] zlma: 0.3431 ms (0.0003 s)\n", - "[+] zscore: 0.3232 ms (0.0003 s)\n", + "[+] aberration: 1.5806 ms (0.0016 s)\n", + "[+] accbands: 1.4873 ms (0.0015 s)\n", + "[+] ad: 0.5515 ms (0.0006 s)\n", + "[+] adosc: 0.4916 ms (0.0005 s)\n", + "[+] adx: 3.2889 ms (0.0033 s)\n", + "[+] alligator: 63.6065 ms (0.0636 s)\n", + "[+] alma: 0.5740 ms (0.0006 s)\n", + "[+] alphatrend: 1.6332 ms (0.0016 s)\n", + "[+] amat: 2.0833 ms (0.0021 s)\n", + "[+] ao: 0.4970 ms (0.0005 s)\n", + "[+] aobv: 2.4720 ms (0.0025 s)\n", + "[+] apo: 0.1935 ms (0.0002 s)\n", + "[+] aroon: 0.5432 ms (0.0005 s)\n", + "[+] atr: 0.4053 ms (0.0004 s)\n", + "[+] atrts: 0.5699 ms (0.0006 s)\n", + "[+] bbands: 0.8516 ms (0.0009 s)\n", + "[+] bias: 0.2836 ms (0.0003 s)\n", + "[+] bop: 0.4212 ms (0.0004 s)\n", + "[+] brar: 2.6350 ms (0.0026 s)\n", + "[+] cci: 0.3652 ms (0.0004 s)\n", + "[+] cdl_pattern: 7.3170 ms (0.0073 s)\n", + "[+] cdl_z: 1.6650 ms (0.0017 s)\n", + "[+] cfo: 0.3430 ms (0.0003 s)\n", + "[+] cg: 6.3938 ms (0.0064 s)\n", + "[+] chandelier_exit: 1.9723 ms (0.0020 s)\n", + "[+] chop: 1.1349 ms (0.0011 s)\n", + "[+] cksp: 1.3591 ms (0.0014 s)\n", + "[+] cmf: 1.0442 ms (0.0010 s)\n", + "[+] cmo: 0.1917 ms (0.0002 s)\n", + "[+] coppock: 0.3040 ms (0.0003 s)\n", + "[+] crsi: 0.9252 ms (0.0009 s)\n", + "[+] cti: 15.0930 ms (0.0151 s)\n", + "[+] cube: 0.7686 ms (0.0008 s)\n", + "[+] decay: 0.1639 ms (0.0002 s)\n", + "[+] decreasing: 0.3167 ms (0.0003 s)\n", + "[+] dema: 0.1870 ms (0.0002 s)\n", + "[+] dm: 0.4573 ms (0.0005 s)\n", + "[+] donchian: 0.8065 ms (0.0008 s)\n", + "[+] dpo: 0.3247 ms (0.0003 s)\n", + "[+] ebsw: 34.1789 ms (0.0342 s)\n", + "[+] efi: 0.5144 ms (0.0005 s)\n", + "[+] ema: 0.1521 ms (0.0002 s)\n", + "[+] entropy: 0.6452 ms (0.0006 s)\n", + "[+] eom: 0.9606 ms (0.0010 s)\n", + "[+] er: 0.4401 ms (0.0004 s)\n", + "[+] eri: 0.6672 ms (0.0007 s)\n", + "[+] fisher: 5.8747 ms (0.0059 s)\n", + "[+] fwma: 2.0135 ms (0.0020 s)\n", + "[+] ha: 0.6174 ms (0.0006 s)\n", + "[+] hilo: 42.5026 ms (0.0425 s)\n", + "[+] hl2: 0.4114 ms (0.0004 s)\n", + "[+] hlc3: 0.3812 ms (0.0004 s)\n", + "[+] hma: 0.4439 ms (0.0004 s)\n", + "[+] hwc: 8.3278 ms (0.0083 s)\n", + "[+] hwma: 7.4163 ms (0.0074 s)\n", + "[+] ifisher: 0.6913 ms (0.0007 s)\n", + "[+] increasing: 0.3617 ms (0.0004 s)\n", + "[+] inertia: 2.6664 ms (0.0027 s)\n", + "[+] jma: 24.4935 ms (0.0245 s)\n", + "[+] kama: 7.6691 ms (0.0077 s)\n", + "[+] kc: 0.9831 ms (0.0010 s)\n", + "[+] kdj: 1.3869 ms (0.0014 s)\n", + "[+] kst: 2.1433 ms (0.0021 s)\n", + "[+] kurtosis: 0.5025 ms (0.0005 s)\n", + "[+] kvo: 2.5644 ms (0.0026 s)\n", + "[+] linreg: 0.2143 ms (0.0002 s)\n", + "[+] log_return: 0.1922 ms (0.0002 s)\n", + "[+] long_run: 0.0016 ms (0.0000 s)\n", + "[+] macd: 0.4391 ms (0.0004 s)\n", + "[+] mad: 14.5326 ms (0.0145 s)\n", + "[+] mama: 0.6004 ms (0.0006 s)\n", + "[+] massi: 0.8779 ms (0.0009 s)\n", + "[+] mcgd: 2.0039 ms (0.0020 s)\n", + "[+] median: 0.7374 ms (0.0007 s)\n", + "[+] mfi: 0.4306 ms (0.0004 s)\n", + "[+] midpoint: 0.1615 ms (0.0002 s)\n", + "[+] midprice: 0.2310 ms (0.0002 s)\n", + "[+] mom: 0.1392 ms (0.0001 s)\n", + "[+] natr: 0.3186 ms (0.0003 s)\n", + "[+] nvi: 1.5691 ms (0.0016 s)\n", + "[+] obv: 0.2462 ms (0.0002 s)\n", + "[+] ohlc4: 0.3725 ms (0.0004 s)\n", + "[+] pdist: 1.1767 ms (0.0012 s)\n", + "[+] percent_return: 0.1712 ms (0.0002 s)\n", + "[+] pgo: 0.5866 ms (0.0006 s)\n", + "[+] pivots: 5.9886 ms (0.0060 s)\n", + "[+] ppo: 0.5523 ms (0.0006 s)\n", + "[+] psar: 55.9114 ms (0.0559 s)\n", + "[+] psl: 0.8440 ms (0.0008 s)\n", + "[+] pvi: 1.4066 ms (0.0014 s)\n", + "[+] pvo: 0.6285 ms (0.0006 s)\n", + "[+] pvol: 0.2493 ms (0.0002 s)\n", + "[+] pvr: 1.1745 ms (0.0012 s)\n", + "[+] pvt: 0.3394 ms (0.0003 s)\n", + "[+] pwma: 1.8115 ms (0.0018 s)\n", + "[+] qqe: 98.3270 ms (0.0983 s)\n", + "[+] qstick: 0.5156 ms (0.0005 s)\n", + "[+] quantile: 0.8809 ms (0.0009 s)\n", + "[+] reflex: 0.2061 ms (0.0002 s)\n", + "[+] remap: 0.1448 ms (0.0001 s)\n", + "[+] rma: 0.2006 ms (0.0002 s)\n", + "[+] roc: 0.1363 ms (0.0001 s)\n", + "[+] rsi: 0.1498 ms (0.0001 s)\n", + "[+] rsx: 7.7118 ms (0.0077 s)\n", + "[+] rvgi: 7.1158 ms (0.0071 s)\n", + "[+] rvi: 1.9210 ms (0.0019 s)\n", + "[+] rwi: 0.9288 ms (0.0009 s)\n", + "[+] short_run: 0.0013 ms (0.0000 s)\n", + "[+] sinwma: 7.4565 ms (0.0075 s)\n", + "[+] skew: 0.2469 ms (0.0002 s)\n", + "[+] slope: 0.2082 ms (0.0002 s)\n", + "[+] sma: 0.1408 ms (0.0001 s)\n", + "[+] smi: 1.1578 ms (0.0012 s)\n", + "[+] smma: 19.2323 ms (0.0192 s)\n", + "[+] squeeze: 2.8722 ms (0.0029 s)\n", + "[+] squeeze_pro: 4.2940 ms (0.0043 s)\n", + "[+] ssf: 0.1656 ms (0.0002 s)\n", + "[+] ssf3: 0.1457 ms (0.0001 s)\n", + "[+] stc: 25.1997 ms (0.0252 s)\n", + "[+] stdev: 0.1549 ms (0.0002 s)\n", + "[+] stoch: 0.5891 ms (0.0006 s)\n", + "[+] stochf: 0.5101 ms (0.0005 s)\n", + "[+] stochrsi: 1.0790 ms (0.0011 s)\n", + "[+] supertrend: 24.5619 ms (0.0246 s)\n", + "[+] swma: 1.7850 ms (0.0018 s)\n", + "[+] t3: 0.1574 ms (0.0002 s)\n", + "[+] td_seq: 809.2238 ms (0.8092 s)\n", + "[+] tema: 0.3596 ms (0.0004 s)\n", + "[+] thermo: 2.4621 ms (0.0025 s)\n", + "[+] tmo: 1.5925 ms (0.0016 s)\n", + "[+] tos_stdevall: 3.3580 ms (0.0034 s)\n", + "[+] trendflex: 0.2923 ms (0.0003 s)\n", + "[+] trima: 0.2047 ms (0.0002 s)\n", + "[+] trix: 1.3216 ms (0.0013 s)\n", + "[+] true_range: 0.4141 ms (0.0004 s)\n", + "[+] tsi: 0.9098 ms (0.0009 s)\n", + "[+] tsignals: 0.0017 ms (0.0000 s)\n", + "[+] ttm_trend: 1.5815 ms (0.0016 s)\n", + "[+] ui: 0.6897 ms (0.0007 s)\n", + "[+] uo: 0.3624 ms (0.0004 s)\n", + "[+] variance: 0.1521 ms (0.0002 s)\n", + "[+] vhf: 0.9536 ms (0.0010 s)\n", + "[+] vhm: 1.3467 ms (0.0013 s)\n", + "[+] vidya: 23.9921 ms (0.0240 s)\n", + "[+] vortex: 1.5467 ms (0.0015 s)\n", + "[+] vwap: 1.8215 ms (0.0018 s)\n", + "[+] vwma: 0.4105 ms (0.0004 s)\n", + "[+] wb_tsv: 2.2791 ms (0.0023 s)\n", + "[+] wcp: 0.3457 ms (0.0003 s)\n", + "[+] willr: 0.3106 ms (0.0003 s)\n", + "[+] wma: 0.1408 ms (0.0001 s)\n", + "[+] xsignals: 0.0015 ms (0.0000 s)\n", + "[+] zlma: 0.3836 ms (0.0004 s)\n", + "[+] zscore: 0.3463 ms (0.0003 s)\n", "\n", "============================================================\n", " Slowest 10 Indicators [154]\n", - " Observations[talib]: 1257\n", + " Observations[talib]: 1259\n", "============================================================\n", " ms secs\n", "Indicator \n", - "td_seq 771.1837 0.77118\n", - "qqe 99.6320 0.09963\n", - "alligator 58.3756 0.05838\n", - "psar 54.8974 0.05490\n", - "hilo 41.2540 0.04125\n", - "ebsw 34.5248 0.03452\n", - "stc 25.9717 0.02597\n", - "jma 24.9298 0.02493\n", - "supertrend 24.3121 0.02431\n", - "vidya 22.9886 0.02299\n", + "td_seq 809.2238 0.80922\n", + "qqe 98.3270 0.09833\n", + "alligator 63.6065 0.06361\n", + "psar 55.9114 0.05591\n", + "hilo 42.5026 0.04250\n", + "ebsw 34.1789 0.03418\n", + "stc 25.1997 0.02520\n", + "supertrend 24.5619 0.02456\n", + "jma 24.4935 0.02449\n", + "vidya 23.9921 0.02399\n", "\n", "============================================================\n", "Time Stats:\n", " ms secs\n", "min 0.001300 0.000000\n", - "50% 0.749550 0.000750\n", - "mean 9.034156 0.009034\n", - "max 771.183700 0.771180\n", - "total 1391.260100 1.391290\n", + "50% 0.656200 0.000660\n", + "mean 9.306636 0.009306\n", + "max 809.223800 0.809220\n", + "total 1433.222000 1.433160\n", "\n", "============================================================\n", "\n" @@ -798,45 +759,41 @@ "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -846,60 +803,60 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", "
 mssecsmssecs
Indicator
td_seq771.1837000.771180td_seq809.2238000.809220
qqe99.6320000.099630qqe98.3270000.098330
alligator58.3756000.058380alligator63.6065000.063610
psar54.8974000.054900psar55.9114000.055910
hilo41.2540000.041250hilo42.5026000.042500
ebsw34.5248000.034520ebsw34.1789000.034180
stc25.9717000.025970stc25.1997000.025200
jma24.9298000.024930supertrend24.5619000.024560
supertrend24.3121000.024310jma24.4935000.024490
vidya22.9886000.022990vidya23.9921000.023990
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -950,23 +907,23 @@ " \n", " \n", " 50%\n", - " 0.749550\n", - " 0.000750\n", + " 0.656200\n", + " 0.000660\n", " \n", " \n", " mean\n", - " 9.034156\n", - " 0.009034\n", + " 9.306636\n", + " 0.009306\n", " \n", " \n", " max\n", - " 771.183700\n", - " 0.771180\n", + " 809.223800\n", + " 0.809220\n", " \n", " \n", " total\n", - " 1391.260100\n", - " 1.391290\n", + " 1433.222000\n", + " 1.433160\n", " \n", " \n", "\n", @@ -975,10 +932,10 @@ "text/plain": [ " ms secs\n", "min 0.001300 0.000000\n", - "50% 0.749550 0.000750\n", - "mean 9.034156 0.009034\n", - "max 771.183700 0.771180\n", - "total 1391.260100 1.391290" + "50% 0.656200 0.000660\n", + "mean 9.306636 0.009306\n", + "max 809.223800 0.809220\n", + "total 1433.222000 1.433160" ] }, "execution_count": 10, @@ -1008,7 +965,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "(1257, 7)\n" + "(1259, 7)\n" ] }, { @@ -1045,46 +1002,46 @@ " TA Lib\n", " ms\n", " 0.0013\n", - " 0.74955\n", - " 9.034156\n", - " 771.18370\n", - " 1391.26010\n", + " 0.656200\n", + " 9.306636\n", + " 809.22380\n", + " 1433.22200\n", " \n", " \n", " secs\n", " 0.0000\n", - " 0.00075\n", - " 0.009034\n", - " 0.77118\n", - " 1.39129\n", + " 0.000660\n", + " 0.009306\n", + " 0.80922\n", + " 1.43316\n", " \n", " \n", " Pandas TA\n", " ms\n", - " 0.0011\n", - " 1.28900\n", - " 9.529325\n", - " 775.51320\n", - " 1467.51600\n", + " 0.0012\n", + " 1.278150\n", + " 9.757957\n", + " 809.45830\n", + " 1502.72540\n", " \n", " \n", " secs\n", " 0.0000\n", - " 0.00129\n", - " 0.009529\n", - " 0.77551\n", - " 1.46747\n", + " 0.001275\n", + " 0.009758\n", + " 0.80946\n", + " 1.50277\n", " \n", " \n", "\n", "" ], "text/plain": [ - " min 50% mean max total\n", - "TA Lib ms 0.0013 0.74955 9.034156 771.18370 1391.26010\n", - " secs 0.0000 0.00075 0.009034 0.77118 1.39129\n", - "Pandas TA ms 0.0011 1.28900 9.529325 775.51320 1467.51600\n", - " secs 0.0000 0.00129 0.009529 0.77551 1.46747" + " min 50% mean max total\n", + "TA Lib ms 0.0013 0.656200 9.306636 809.22380 1433.22200\n", + " secs 0.0000 0.000660 0.009306 0.80922 1.43316\n", + "Pandas TA ms 0.0012 1.278150 9.757957 809.45830 1502.72540\n", + " secs 0.0000 0.001275 0.009758 0.80946 1.50277" ] }, "execution_count": 11, @@ -1135,28 +1092,28 @@ " \n", " \n", " ms\n", - " 0.0002\n", - " 0.53945\n", - " 0.495168\n", - " 4.32950\n", - " 76.25590\n", + " 0.0001\n", + " 0.621950\n", + " 0.451321\n", + " 0.23450\n", + " 69.50340\n", " \n", " \n", " secs\n", " 0.0000\n", - " 0.00054\n", - " 0.000495\n", - " 0.00433\n", - " 0.07618\n", + " 0.000615\n", + " 0.000452\n", + " 0.00024\n", + " 0.06961\n", " \n", " \n", "\n", "" ], "text/plain": [ - "Differences min 50% mean max total\n", - "ms 0.0002 0.53945 0.495168 4.32950 76.25590\n", - "secs 0.0000 0.00054 0.000495 0.00433 0.07618" + "Differences min 50% mean max total\n", + "ms 0.0001 0.621950 0.451321 0.23450 69.50340\n", + "secs 0.0000 0.000615 0.000452 0.00024 0.06961" ] }, "execution_count": 12, @@ -1177,6 +1134,1203 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea82127e-1969-4215-bfab-6c83209675a6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "13b2b1a0-260d-4466-bc19-98f952ebbec1", + "metadata": {}, + "source": [ + "## Speed Comparison (ms)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f0d25118-0e8e-454f-a6c3-ec5aacda0db9", + "metadata": {}, + "outputs": [], + "source": [ + "taldf = ta.speed_test(df, places=10, talib=True, silent=True)[\"ms\"]\n", + "ptadf = ta.speed_test(df, places=10, talib=False, silent=True)[\"ms\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "90a20a7b-8ce4-4084-87d5-abe6afee8cc6", + "metadata": {}, + "outputs": [], + "source": [ + "scdf = DataFrame({\"TAL\": taldf, \"PTA\": ptadf, \"diff\": taldf - ptadf})\n", + "scdf.round(decimals=3)\n", + "scdf.index.name = \"Indicator (ms)\"" + ] + }, + { + "cell_type": "markdown", + "id": "aa154cc6-005d-4b93-8349-c331eca5abbc", + "metadata": {}, + "source": [ + "#### Pandas TA is quicker than TA Lib when the dfference is positive" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "047e30f9-bbc7-45d7-b2f1-8305ddce0586", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 TALPTAdiff
Indicator (ms)   
td_seq822.621300769.86520052.756100
stc28.13650025.4936002.642900
alligator62.54330060.7219001.821400
supertrend26.65730025.1139001.543400
qqe100.86000099.3591001.500900
smma20.56390019.1257001.438200
vidya25.45210024.2242001.227900
squeeze_pro5.2094004.2356000.973800
rvgi7.1345006.2267000.907800
wb_tsv2.6755002.0303000.645200
cdl_pattern8.3836007.7947000.588900
vortex1.7289001.1700000.558900
tos_stdevall2.8238002.2864000.537400
vwap2.0594001.6091000.450300
stochrsi1.4875001.1128000.374700
squeeze3.3986003.0328000.365800
rsx7.8669007.5031000.363800
sinwma8.1089007.7480000.360900
ebsw34.83410034.5076000.326500
aberration1.4032001.1110000.292200
ttm_trend1.7328001.4606000.272200
vwma0.6303000.3759000.254400
thermo1.4540001.2362000.217800
tmo1.2399001.0227000.217200
swma2.1040001.9146000.189400
rvi2.2014002.0323000.169100
ui0.7874000.6193000.168100
vhf1.0215000.8873000.134200
wcp0.4211000.2965000.124600
smi1.2977001.1780000.119700
skew0.4265000.3299000.096600
ssf0.2646000.1730000.091600
mcgd1.9701001.8824000.087700
trendflex0.2735000.2018000.071700
pdist1.1588001.1049000.053900
quantile0.7775000.7414000.036100
median0.7295000.6969000.032600
pwma1.8320001.8010000.031000
accbands1.2167001.1861000.030600
slope0.2656000.2372000.028400
vhm1.3715001.3431000.028400
nvi1.4621001.4382000.023900
entropy0.6636000.6404000.023200
reflex0.2086000.1875000.021100
rma0.2246000.2068000.017800
ssf30.1593000.1430000.016300
adx3.8850003.8693000.015700
remap0.1530000.1423000.010700
hlc30.3204000.3104000.010000
eom0.9814000.9738000.007600
pvt0.3365000.3298000.006700
pvol0.2483000.2474000.000900
xsignals0.0019000.0013000.000600
tsignals0.0015000.0013000.000200
short_run0.0015000.0014000.000100
ohlc40.3733000.373900-0.000600
long_run0.0012000.002000-0.000800
percent_return0.1615000.170800-0.009300
efi0.5540000.566000-0.012000
pvr1.1726001.185300-0.012700
pvo0.6345000.647300-0.012800
eri0.6664000.680400-0.014000
cfo0.3361000.353500-0.017400
dpo0.3237000.342800-0.019100
pgo0.5737000.593000-0.019300
alma0.5837000.604000-0.020300
donchian0.8057000.827600-0.021900
decreasing0.3246000.349500-0.024900
er0.4368000.461800-0.025000
decay0.1652000.197200-0.032000
mom0.1394000.178200-0.038800
pvi1.4675001.506900-0.039400
cmf1.0346001.074500-0.039900
kurtosis0.2612000.302900-0.041700
cdl_z1.6629001.709100-0.046200
ha0.5803000.628800-0.048500
increasing0.3045000.356700-0.052200
ao0.5004000.554900-0.054500
coppock0.2963000.353200-0.056900
cksp1.3389001.398400-0.059500
brar2.6318002.693400-0.061600
hma0.3680000.431300-0.063300
hl20.2725000.351500-0.079000
variance0.1512000.230800-0.079600
cg6.5069006.595800-0.088900
inertia1.9871002.076200-0.089100
stdev0.3307000.422800-0.092100
cube0.8152000.909200-0.094000
zlma0.4499000.562700-0.112800
psl0.9994001.113900-0.114500
chop1.0981001.219500-0.121400
fwma1.9277002.085000-0.157300
kvo2.2558002.435900-0.180100
kc0.9550001.147600-0.192600
mama0.4304000.623300-0.192900
qstick0.6190000.820300-0.201300
sma0.1626000.371300-0.208700
kama7.5569007.772800-0.215900
ifisher0.5333000.751100-0.217800
roc0.1537000.380700-0.227000
hwc8.2330008.481500-0.248500
hwma7.3478007.624500-0.276700
midprice0.2252000.537700-0.312500
ema0.1605000.478200-0.317700
hilo41.22340041.556900-0.333500
midpoint0.1460000.482200-0.336200
mad14.09800014.451400-0.353400
willr0.3346000.705200-0.370600
jma24.09140024.480200-0.388800
kdj1.3451001.754100-0.409000
cti15.12200015.533300-0.411300
ad0.4299000.852000-0.422100
trix1.1716001.606200-0.434600
trima0.1677000.610900-0.443200
zscore0.3884000.834100-0.445700
kst1.3481001.824800-0.476700
bop0.3969000.877100-0.480200
fisher5.7476006.228300-0.480700
amat2.1829002.669800-0.486900
log_return0.1780000.679300-0.501300
pivots5.8912006.421200-0.530000
bias0.2792000.832700-0.553500
true_range0.3997000.984200-0.584500
massi0.7650001.350000-0.585000
bbands0.8547001.502600-0.647900
obv0.2424000.900300-0.657900
apo0.2154000.903500-0.688100
dema0.1710000.868800-0.697800
tsi0.9012001.662000-0.760800
rwi1.2410002.074100-0.833100
tema0.2603001.112200-0.851900
stochf0.6911001.568500-0.877400
adosc1.0555001.991900-0.936400
rsi0.1571001.106000-0.948900
atr0.4092001.545100-1.135900
aobv2.7723003.992500-1.220200
ppo0.5424001.763100-1.220700
chandelier_exit1.9430003.246500-1.303500
psar56.37810057.757100-1.379000
natr0.3075001.752300-1.444800
atrts0.5791002.030600-1.451500
stoch0.8432002.346100-1.502900
cmo0.1736001.769400-1.595800
dm0.4548002.130500-1.675700
t30.2725002.042300-1.769800
macd0.3904002.209000-1.818600
uo0.3688002.320500-1.951700
crsi0.9298002.921400-1.991600
mfi0.4206003.160700-2.740100
alphatrend1.4419004.320900-2.879000
aroon0.5442007.331100-6.786900
wma0.1533008.255600-8.102300
linreg0.17580011.353300-11.177500
cci0.37860015.398900-15.020300
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scdf.sort_values(by=\"diff\", ascending=False, na_position=\"first\", inplace=True)\n", + "scdf.style.background_gradient(\"autumn_r\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "180605d4-7c8c-4974-ae09-25b740503c6c", + "metadata": {}, + "outputs": [], + "source": [ + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "419dd000-35f0-41bb-b944-dca77df3f1cb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4b1e8f4d-6189-4085-be71-85c09692475a", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/pandas_ta/core.py b/pandas_ta/core.py index f9fea2b6..f78d974f 100644 --- a/pandas_ta/core.py +++ b/pandas_ta/core.py @@ -692,15 +692,16 @@ def study(self, *args: Args, **kwargs: DictLike) -> dataclass: results = pool.map(self._mp_worker, custom_ta, _chunksize) else: default_ta = [(ind, tuple(), kwargs) for ind in ta] + tqdm_total = len(default_ta) // _chunksize # All and Categorical multiprocessing pool. if all_ordered: if Imports["tqdm"] and verbose: - results = tqdm(pool.imap(self._mp_worker, default_ta, _chunksize, total=len(default_ta) // _chunksize)) # Order over Speed + results = tqdm(pool.imap(self._mp_worker, default_ta, _chunksize), total=tqdm_total) # Order over Speed else: results = pool.imap(self._mp_worker, default_ta, _chunksize) # Order over Speed else: if Imports["tqdm"] and verbose: - results = tqdm(pool.imap_unordered(self._mp_worker, default_ta, _chunksize, total=len(default_ta) // _chunksize)) # Speed over Order + results = tqdm(pool.imap_unordered(self._mp_worker, default_ta, _chunksize), total=tqdm_total) # Speed over Order else: results = pool.imap_unordered(self._mp_worker, default_ta, _chunksize) # Speed over Order if results is None: @@ -1130,7 +1131,7 @@ def tmo(self, tmo_length=None, calc_length=None, smooth_length=None, mamode=None close = self._get_column(kwargs.pop("close", "close")) result = tmo(open_=open_, close=close, tmo_length=tmo_length, calc_length=calc_length, smooth_length=smooth_length, mamode=mamode, compute_momentum=compute_momentum, normalize_signal=normalize_signal, offset=offset, **kwargs) return self._post_process(result, **kwargs) - + def trix(self, length=None, signal=None, scalar=None, drift=None, offset=None, **kwargs: DictLike): close = self._get_column(kwargs.pop("close", "close")) result = trix(close=close, length=length, signal=signal, scalar=scalar, drift=drift, offset=offset, **kwargs) diff --git a/pandas_ta/momentum/tmo.py b/pandas_ta/momentum/tmo.py index cd76e859..7cee70dd 100644 --- a/pandas_ta/momentum/tmo.py +++ b/pandas_ta/momentum/tmo.py @@ -1,15 +1,21 @@ # -*- coding: utf-8 -*- - -import numpy as np +from numpy import broadcast_to, isnan, nan, nansum, newaxis, pad, sign, zeros +from numpy.lib.stride_tricks import sliding_window_view from pandas import DataFrame, Series from pandas_ta._typing import DictLike, Int from pandas_ta.ma import ma -from pandas_ta.utils import v_bool, v_mamode, v_offset, v_pos_default, v_series +from pandas_ta.utils import ( + v_bool, + v_mamode, + v_offset, + v_pos_default, + v_series +) def sum_signed_rolling_deltas( - close: Series, open_: Series, length: Int, exclusive: bool = True + open_: Series, close: Series, length: Int, exclusive: bool = True ) -> Series: """Sum of signed rolling price deltas @@ -46,39 +52,29 @@ def sum_signed_rolling_deltas( >>> np.allclose(result, expected_result, rtol=1e-6, equal_nan=True) True """ - if not exclusive: length -= 1 - rolling_open = np.lib.stride_tricks.sliding_window_view( - open_, window_shape=length)[:-1] + rolling_open = sliding_window_view(open_, window_shape=length)[:-1] - close_broadcasted = np.broadcast_to( - close[length:].to_numpy()[:, np.newaxis], rolling_open.shape + close_broadcasted = broadcast_to( + close[length:].to_numpy()[:, newaxis], rolling_open.shape ) - signed_deltas = np.sign(close_broadcasted - rolling_open) - sum_signed_deltas = np.nansum(signed_deltas, axis=1).astype(float) + signed_deltas = sign(close_broadcasted - rolling_open) + sum_signed_deltas = nansum(signed_deltas, axis=1).astype(float) return Series( - np.pad(sum_signed_deltas, (length, 0), - mode="constant", constant_values=np.nan), + pad(sum_signed_deltas, (length, 0), mode="constant", constant_values=nan), index=close.index, ) def tmo( - open_: Series, - close: Series, - tmo_length: Int = None, - calc_length: Int = None, - smooth_length: Int = None, - mamode: str = None, - compute_momentum: bool = False, - normalize_signal: bool = False, - exclusive_window: bool = True, - offset: Int = None, - **kwargs: DictLike, + open_: Series, close: Series, + tmo_length: Int = None, calc_length: Int = None, smooth_length: Int = None, + momentum: bool = False, normalize: bool = False, exclusive: bool = True, + mamode: str = None, offset: Int = None, **kwargs: DictLike, ) -> DataFrame: """True Momentum Oscillator (TMO) @@ -108,11 +104,11 @@ def tmo( calc_length (Int): Initial moving average window. Default: 5 smooth_length (Int): Main and smooth signal MA window. Default: 3 mamode (str): See ``help(ta.ma)``. Default: 'ema' - compute_momentum (bool): Compute main and smooth momentum. + momentum (bool): Compute main and smooth momentum. Default: False - normalize_signal (bool): Normalize TMO values to [-100,100]. + normalize (bool): Normalize TMO values to [-100,100]. Default: False - exclusive_window (bool): Exclusive or inclusive rolling window, where + exclusive (bool): Exclusive or inclusive rolling window, where the lookback is made over n days, or n-1, if we consider the rolling window period should include the current date. offset (Int): How many periods to offset the result. Default: 0 @@ -125,14 +121,13 @@ def tmo( DataFrame: main, smooth, main momentum, smooth momentum """ - # Validate tmo_length = v_pos_default(tmo_length, 14) calc_length = v_pos_default(calc_length, 5) smooth_length = v_pos_default(smooth_length, 3) mamode = v_mamode(mamode, "ema") - compute_momentum = v_bool(compute_momentum, False) - normalize_signal = v_bool(normalize_signal, False) + compute_momentum = v_bool(momentum, False) + normalize_signal = v_bool(normalize, False) _length = max(tmo_length, calc_length, smooth_length) open_ = v_series(open_, _length) @@ -146,26 +141,28 @@ def tmo( return None signed_diff_sum = sum_signed_rolling_deltas( - close, open_, tmo_length, exclusive=exclusive_window + open_, close, tmo_length, exclusive=exclusive ) + if all(isnan(signed_diff_sum)): + return None # Emergency Break initial_ma = ma(mamode, signed_diff_sum, length=calc_length) - if all(np.isnan(initial_ma)): + if all(isnan(initial_ma)): return None # Emergency Break main = ma(mamode, initial_ma, length=smooth_length) - if all(np.isnan(main)): + if all(isnan(main)): return None # Emergency Break smooth = ma(mamode, main, length=smooth_length) - if all(np.isnan(smooth)): + if all(isnan(smooth)): return None # Emergency Break if compute_momentum: mom_main = main - main.shift(tmo_length) mom_smooth = smooth - smooth.shift(tmo_length) else: - zero_array = np.zeros(main.size) + zero_array = zeros(main.size) mom_main = Series(zero_array, index=main.index) mom_smooth = Series(zero_array, index=smooth.index) @@ -191,7 +188,6 @@ def tmo( # Name and Category _props = f"_{tmo_length}_{calc_length}_{smooth_length}" - main.name = f"TMO{_props}" smooth.name = f"TMOs{_props}" mom_main.name = f"TMOM{_props}" diff --git a/pandas_ta/overlap/linreg.py b/pandas_ta/overlap/linreg.py index 8e4b4128..bb5db7e7 100644 --- a/pandas_ta/overlap/linreg.py +++ b/pandas_ta/overlap/linreg.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from sys import float_info as sflt from numpy import arctan, nan, pi, zeros_like from numpy.version import version as np_version from pandas import Series @@ -9,9 +10,11 @@ v_offset, v_pos_default, v_series, - v_talib + v_talib, + zero ) + def linreg( close: Series, length: Int = None, talib: bool = None, offset: Int = None, **kwargs: DictLike @@ -111,6 +114,8 @@ def linear_regression(series): y2_sum = (series * series).sum() rn = length * xy_sum - x_sum * y_sum rd = (divisor * (length * y2_sum - y_sum * y_sum)) ** 0.5 + if zero(rd) == 0: + rd = sflt.epsilon return rn / rd return m * length + b if not tsf else m * (length - 1) + b diff --git a/pandas_ta/statistics/mad.py b/pandas_ta/statistics/mad.py index 44ada825..49f27fb5 100644 --- a/pandas_ta/statistics/mad.py +++ b/pandas_ta/statistics/mad.py @@ -5,6 +5,11 @@ from pandas_ta.utils import v_offset, v_pos_default, v_series +def mad_(series: Series): + """Mean Absolute Deviation""" + return fabs(series - series.mean()).mean() + + def mad( close: Series, length: Int = None, offset: Int = None, **kwargs: DictLike @@ -39,10 +44,6 @@ def mad( offset = v_offset(offset) # Calculate - def mad_(series): - """Mean Absolute Deviation""" - return fabs(series - series.mean()).mean() - mad = close.rolling(length, min_periods=min_periods).apply(mad_, raw=True) # Offset diff --git a/pandas_ta/trend/chop.py b/pandas_ta/trend/chop.py index d7e17f66..a8b12cab 100644 --- a/pandas_ta/trend/chop.py +++ b/pandas_ta/trend/chop.py @@ -8,7 +8,7 @@ v_offset, v_pos_default, v_scalar, - v_series, + v_series ) from pandas_ta.volatility import atr diff --git a/pandas_ta/utils/_core.py b/pandas_ta/utils/_core.py index b24fd251..c4436677 100644 --- a/pandas_ta/utils/_core.py +++ b/pandas_ta/utils/_core.py @@ -192,7 +192,7 @@ def speed_test(df: DataFrame, top: Int = None, talib: bool = False, ascending: bool = False, sortby: str = "secs", gradient: bool = False, places: Int = 5, stats: bool = False, - verbose: bool = False + verbose: bool = False, silent: bool = False ) -> DataFrame: """Speed Test @@ -212,7 +212,8 @@ def speed_test(df: DataFrame, places (Int): Decimal places. Default: 5 stats (bool): Returns a Tuple of two DataFrames. The second tuple contains Stats on the performance time. Default: False - verbose (bool): Default: False + verbose (bool): Display more info. Default: False + silent (bool): Display nothing. Default: False Returns: pd.DataFrame: if stats is False @@ -226,6 +227,7 @@ def speed_test(df: DataFrame, top = int(top) if isinstance(top, int) and top > 0 else None stats = v_bool(stats, False) verbose = v_bool(verbose, False) + silent = v_bool(silent, False) _ichimoku = ["ichimoku"] if excluded is None and isinstance(only, list) and len(only) > 0: @@ -264,7 +266,9 @@ def speed_test(df: DataFrame, if top: _title = f" {_quick_slow} {top} Indicators [{tdf.shape[0]}]" tdf = tdf.head(top) - print(f"\n{_div}\n{_title}\n{_observations}\n{_div}\n{tdf}\n\n{_div}\n{_perfstats}\n\n{_div}\n") + + if not silent: + print(f"\n{_div}\n{_title}\n{_observations}\n{_div}\n{tdf}\n\n{_div}\n{_perfstats}\n\n{_div}\n") if isinstance(gradient, bool) and gradient: return tdf.style.background_gradient("autumn_r"), total_timedf diff --git a/setup.py b/setup.py index 822d31c5..99abeadf 100644 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ "pandas_ta.volatility", "pandas_ta.volume" ], - version=".".join(("0", "4", "8b")), + version=".".join(("0", "4", "9b")), description=long_description, long_description=long_description, author="Kevin Johnson", diff --git a/tests/test_studies.py b/tests/test_studies.py index d7149b1a..20a060f9 100644 --- a/tests/test_studies.py +++ b/tests/test_studies.py @@ -52,35 +52,35 @@ def test_study_category_talib(df, category, talib): @pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_a(df, custom_study_a, talib): +def test_study_custom_a_talib(df, custom_study_a, talib): initial_columns = df.shape[1] df.ta.study(custom_study_a, cores=0, talib=talib) assert df.shape[1] > initial_columns @pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_b(df, custom_study_b, talib): +def test_study_custom_b_talib(df, custom_study_b, talib): initial_columns = df.shape[1] df.ta.study(custom_study_b, cores=0, talib=talib) assert df.shape[1] - initial_columns == 3 @pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_c(df, custom_study_c, talib): +def test_study_custom_c_talib(df, custom_study_c, talib): initial_columns = df.shape[1] df.ta.study(custom_study_c, cores=0, talib=talib) assert df.shape[1] - initial_columns == 5 @pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_d(df, custom_study_d, talib): +def test_study_custom_d_talib(df, custom_study_d, talib): initial_columns = df.shape[1] df.ta.study(custom_study_d, cores=0, talib=talib) assert df.shape[1] - initial_columns == 3 @pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_e(df, custom_study_e, talib): +def test_study_custom_e_talib(df, custom_study_e, talib): initial_columns = df.shape[1] df.ta.study(custom_study_e, cores=0, talib=talib) df.ta.tsignals(trend=df["AMATe_LR_20_50_2"], append=True) @@ -88,7 +88,7 @@ def test_study_custom_e(df, custom_study_e, talib): @pytest.mark.parametrize("talib", [False, True]) -def test_study_all_multirun(df, all_study, talib): +def test_study_all_multirun_talib(df, all_study, talib): new_columns = 612 # +/- when adding/removing indicators initial_columns = df.shape[1] df.ta.study(all_study, length=10, cores=0, talib=talib) @@ -98,8 +98,10 @@ def test_study_all_multirun(df, all_study, talib): assert df.shape[1] == new_columns + initial_columns +# Note: As expected, it will print a VWAP datetime ordered index warning +# when less than 2 rows @pytest.mark.parametrize("talib", [False, True]) -def test_study_all_incremental_rows(df, all_study, talib): +def test_study_all_incremental_rows_talib(df, all_study, talib): MAX_ROWS = 90 df = df.iloc[:MAX_ROWS] # Trim for this test