From 01e8a3547cd8f03500ff6499349a4fae4382e965 Mon Sep 17 00:00:00 2001 From: Kevin Johnson Date: Sun, 20 Mar 2022 08:23:00 -0700 Subject: [PATCH] ENH #499 numpy improv ENH #501 smooth_k MAINT sma, supertrend, true_range, atr --- README.md | 9 +- examples/Speed_Test.ipynb | 1065 ++++++++++++------------ pandas_ta/core.py | 4 +- pandas_ta/momentum/stoch.py | 2 +- pandas_ta/overlap/sma.py | 2 +- pandas_ta/overlap/supertrend.py | 7 +- pandas_ta/statistics/tos_stdevall.py | 14 +- pandas_ta/utils/_core.py | 2 +- pandas_ta/volatility/__init__.py | 2 +- pandas_ta/volatility/atr.py | 6 +- pandas_ta/volatility/atrts.py | 200 +++-- pandas_ta/volatility/true_range.py | 6 +- setup.py | 2 +- tests/test_ext_indicator_volatility.py | 5 + tests/test_indicator_volatility.py | 6 + 15 files changed, 676 insertions(+), 656 deletions(-) diff --git a/README.md b/README.md index 445c36b..d533da6 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ _Pandas Technical Analysis_ (**Pandas TA**) is a free, Open Source, and easy to * [Transform](#transform-3) * [Trend](#trend-19) * [Utility](#utility-5) - * [Volatility](#volatility-14) + * [Volatility](#volatility-15) * [Volume](#volume-16) * [Backtesting](#backtesting) * [Vector BT](#vector-bt) @@ -198,7 +198,7 @@ $ pip install pandas_ta[full] Latest Version -------------- -Best choice! Version: *0.3.55b* +Best choice! Version: *0.3.56b* * Includes all fixes and updates between **pypi** and what is covered in this README. ```sh $ pip install -U git+https://github.com/twopirllc/pandas-ta @@ -303,7 +303,7 @@ Contributions, feedback, and bug squashing are integral to the success of this l _Thank you for your contributions!_ - +
@@ -1058,11 +1058,12 @@ Back to [Contents](#contents)
-### **Volatility** (14) +### **Volatility** (15) * _Aberration_: **aberration** * _Acceleration Bands_: **accbands** * _Average True Range_: **atr** +* _Average True Range Trailing Stop_: **atrts** * _Bollinger Bands_: **bbands** * _Donchian Channel_: **donchian** * _Holt-Winter Channel_: **hwc** diff --git a/examples/Speed_Test.ipynb b/examples/Speed_Test.ipynb index 614ee1b..7dd8e5b 100644 --- a/examples/Speed_Test.ipynb +++ b/examples/Speed_Test.ipynb @@ -72,7 +72,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[+] yf | SPY(1260, 7): 3355.3888 ms (3.3554 s)\n" + "[+] yf | SPY(1260, 7): 3134.9958 ms (3.1350 s)\n" ] } ], @@ -107,7 +107,7 @@ "id": "ea75457d-9b95-41ae-9205-23b822c3a3d8", "metadata": {}, "source": [ - "### If ```numba``` installed, prep @njit" + "### If ```numba``` installed, prep @njit functions" ] }, { @@ -122,30 +122,33 @@ "text": [ "\n", "============================================================\n", - " Slowest 10 Indicators [145]\n", + " Slowest Indicators\n", " Observations: 150\n", "============================================================\n", - " secs ms\n", - "Indicator \n", - "alligator 1.39078 1390.7823\n", - "reflex 0.23892 238.9168\n", - "trendflex 0.15877 158.7684\n", - "td_seq 0.11098 110.9794\n", - "ssf 0.10814 108.1379\n", - "ssf3 0.09241 92.4070\n", - "qqe 0.02413 24.1271\n", - "psar 0.01360 13.5950\n", - "cdl_pattern 0.01313 13.1322\n", - "hilo 0.01056 10.5648\n", + " ms secs\n", + "Indicator \n", + "alligator 1496.8930 1.49689\n", + "atrts 415.8880 0.41589\n", + "reflex 192.3144 0.19231\n", + "trendflex 159.5207 0.15952\n", + "td_seq 109.6769 0.10968\n", + "... ... ...\n", + "cti 0.1705 0.00017\n", + "tsignals 0.0013 0.00000\n", + "short_run 0.0014 0.00000\n", + "long_run 0.0012 0.00000\n", + "xsignals 0.0016 0.00000\n", + "\n", + "[146 rows x 2 columns]\n", "\n", "============================================================\n", "Time Stats:\n", - " secs ms\n", - "min 0.000000 0.001100\n", - "50% 0.001140 1.137000\n", - "mean 0.016311 16.311186\n", - "max 1.390780 1390.782300\n", - "total 2.365160 2365.122000\n", + " ms secs\n", + "min 0.001200 0.000000\n", + "50% 1.119900 0.001120\n", + "mean 19.449172 0.019449\n", + "max 1496.893000 1.496890\n", + "total 2839.579100 2.839580\n", "\n", "============================================================\n", "\n" @@ -154,7 +157,7 @@ ], "source": [ "if has_numba:\n", - " ta.speed_test(df.iloc[-150:], top=10, talib=False)" + " ta.speed_test(df.iloc[-150:], talib=False)" ] }, { @@ -176,177 +179,178 @@ "output_type": "stream", "text": [ "\n", - "[+] aberration: 1.1456 ms (0.0011 s)\n", - "[+] accbands: 1.2985 ms (0.0013 s)\n", - "[+] ad: 1.0111 ms (0.0010 s)\n", - "[+] adosc: 2.3665 ms (0.0024 s)\n", - "[+] adx: 3.6593 ms (0.0037 s)\n", - "[+] alligator: 212.5608 ms (0.2126 s)\n", - "[+] alma: 0.6202 ms (0.0006 s)\n", - "[+] amat: 3.0693 ms (0.0031 s)\n", - "[+] ao: 0.5373 ms (0.0005 s)\n", - "[+] aobv: 5.7827 ms (0.0058 s)\n", - "[+] apo: 0.9649 ms (0.0010 s)\n", - "[+] aroon: 8.4203 ms (0.0084 s)\n", - "[+] atr: 1.6937 ms (0.0017 s)\n", - "[+] bbands: 1.6370 ms (0.0016 s)\n", - "[+] bias: 0.7042 ms (0.0007 s)\n", - "[+] bop: 0.8832 ms (0.0009 s)\n", - "[+] brar: 4.5992 ms (0.0046 s)\n", - "[+] cci: 16.4651 ms (0.0165 s)\n", - "[+] cdl_pattern: 11.0512 ms (0.0111 s)\n", - "[+] cdl_z: 1.7945 ms (0.0018 s)\n", - "[+] cfo: 0.3885 ms (0.0004 s)\n", - "[+] cg: 5.5234 ms (0.0055 s)\n", - "[+] chop: 1.3423 ms (0.0013 s)\n", - "[+] cksp: 1.7096 ms (0.0017 s)\n", - "[+] cmf: 1.2463 ms (0.0012 s)\n", - "[+] cmo: 2.1820 ms (0.0022 s)\n", - "[+] coppock: 0.3601 ms (0.0004 s)\n", - "[+] cti: 0.1902 ms (0.0002 s)\n", - "[+] cube: 0.5717 ms (0.0006 s)\n", - "[+] decay: 0.6384 ms (0.0006 s)\n", - "[+] decreasing: 0.3125 ms (0.0003 s)\n", - "[+] dema: 1.0388 ms (0.0010 s)\n", - "[+] dm: 2.3403 ms (0.0023 s)\n", - "[+] donchian: 1.0336 ms (0.0010 s)\n", - "[+] dpo: 0.4773 ms (0.0005 s)\n", - "[+] ebsw: 40.3750 ms (0.0404 s)\n", - "[+] efi: 0.4263 ms (0.0004 s)\n", - "[+] ema: 0.4665 ms (0.0005 s)\n", - "[+] entropy: 0.8704 ms (0.0009 s)\n", - "[+] eom: 1.0508 ms (0.0011 s)\n", - "[+] er: 0.5745 ms (0.0006 s)\n", - "[+] eri: 0.6998 ms (0.0007 s)\n", - "[+] fisher: 9.9191 ms (0.0099 s)\n", - "[+] fwma: 2.6361 ms (0.0026 s)\n", - "[+] ha: 78.3370 ms (0.0783 s)\n", - "[+] hilo: 88.1582 ms (0.0882 s)\n", - "[+] hl2: 0.3772 ms (0.0004 s)\n", - "[+] hlc3: 0.3641 ms (0.0004 s)\n", - "[+] hma: 0.4196 ms (0.0004 s)\n", - "[+] hwc: 8.9592 ms (0.0090 s)\n", - "[+] hwma: 6.5110 ms (0.0065 s)\n", - "[+] ifisher: 0.6865 ms (0.0007 s)\n", - "[+] increasing: 0.3654 ms (0.0004 s)\n", - "[+] inertia: 4.6722 ms (0.0047 s)\n", - "[+] jma: 28.5862 ms (0.0286 s)\n", - "[+] kama: 15.8190 ms (0.0158 s)\n", - "[+] kc: 0.9789 ms (0.0010 s)\n", - "[+] kdj: 1.9249 ms (0.0019 s)\n", - "[+] kst: 1.7457 ms (0.0017 s)\n", - "[+] kurtosis: 0.3827 ms (0.0004 s)\n", - "[+] kvo: 3.7043 ms (0.0037 s)\n", - "[+] linreg: 12.6359 ms (0.0126 s)\n", - "[+] log_return: 0.2109 ms (0.0002 s)\n", - "[+] long_run: 0.0013 ms (0.0000 s)\n", - "[+] macd: 2.8276 ms (0.0028 s)\n", - "[+] mad: 15.0358 ms (0.0150 s)\n", - "[+] massi: 1.3350 ms (0.0013 s)\n", - "[+] mcgd: 2.2671 ms (0.0023 s)\n", - "[+] median: 0.7818 ms (0.0008 s)\n", - "[+] mfi: 4.2815 ms (0.0043 s)\n", - "[+] midpoint: 0.6688 ms (0.0007 s)\n", - "[+] midprice: 0.6778 ms (0.0007 s)\n", - "[+] mom: 0.1995 ms (0.0002 s)\n", - "[+] natr: 1.8785 ms (0.0019 s)\n", - "[+] nvi: 2.7662 ms (0.0028 s)\n", - "[+] obv: 2.1081 ms (0.0021 s)\n", - "[+] ohlc4: 0.4587 ms (0.0005 s)\n", - "[+] pdist: 1.3172 ms (0.0013 s)\n", - "[+] percent_return: 0.1963 ms (0.0002 s)\n", - "[+] pgo: 0.6337 ms (0.0006 s)\n", - "[+] ppo: 1.7161 ms (0.0017 s)\n", - "[+] psar: 108.9982 ms (0.1090 s)\n", - "[+] psl: 1.7282 ms (0.0017 s)\n", - "[+] pvi: 2.7499 ms (0.0027 s)\n", - "[+] pvo: 0.7652 ms (0.0008 s)\n", + "[+] aberration: 1.0925 ms (0.0011 s)\n", + "[+] accbands: 1.2377 ms (0.0012 s)\n", + "[+] ad: 1.1768 ms (0.0012 s)\n", + "[+] adosc: 2.3483 ms (0.0023 s)\n", + "[+] adx: 3.3845 ms (0.0034 s)\n", + "[+] alligator: 219.4132 ms (0.2194 s)\n", + "[+] alma: 0.5391 ms (0.0005 s)\n", + "[+] amat: 3.1778 ms (0.0032 s)\n", + "[+] ao: 0.5460 ms (0.0005 s)\n", + "[+] aobv: 5.7913 ms (0.0058 s)\n", + "[+] apo: 1.0890 ms (0.0011 s)\n", + "[+] aroon: 8.9856 ms (0.0090 s)\n", + "[+] atr: 1.8194 ms (0.0018 s)\n", + "[+] atrts: 2.3529 ms (0.0024 s)\n", + "[+] bbands: 1.5946 ms (0.0016 s)\n", + "[+] bias: 0.6733 ms (0.0007 s)\n", + "[+] bop: 0.8715 ms (0.0009 s)\n", + "[+] brar: 4.6938 ms (0.0047 s)\n", + "[+] cci: 15.6281 ms (0.0156 s)\n", + "[+] cdl_pattern: 10.3017 ms (0.0103 s)\n", + "[+] cdl_z: 1.7850 ms (0.0018 s)\n", + "[+] cfo: 0.3909 ms (0.0004 s)\n", + "[+] cg: 5.2792 ms (0.0053 s)\n", + "[+] chop: 1.5169 ms (0.0015 s)\n", + "[+] cksp: 1.8153 ms (0.0018 s)\n", + "[+] cmf: 1.2263 ms (0.0012 s)\n", + "[+] cmo: 2.2767 ms (0.0023 s)\n", + "[+] coppock: 0.3589 ms (0.0004 s)\n", + "[+] cti: 0.1935 ms (0.0002 s)\n", + "[+] cube: 0.5720 ms (0.0006 s)\n", + "[+] decay: 0.8061 ms (0.0008 s)\n", + "[+] decreasing: 0.3315 ms (0.0003 s)\n", + "[+] dema: 1.1394 ms (0.0011 s)\n", + "[+] dm: 2.2477 ms (0.0022 s)\n", + "[+] donchian: 1.0922 ms (0.0011 s)\n", + "[+] dpo: 0.4757 ms (0.0005 s)\n", + "[+] ebsw: 40.1932 ms (0.0402 s)\n", + "[+] efi: 0.4309 ms (0.0004 s)\n", + "[+] ema: 0.4663 ms (0.0005 s)\n", + "[+] entropy: 0.8890 ms (0.0009 s)\n", + "[+] eom: 1.0685 ms (0.0011 s)\n", + "[+] er: 0.7039 ms (0.0007 s)\n", + "[+] eri: 0.7141 ms (0.0007 s)\n", + "[+] fisher: 9.9928 ms (0.0100 s)\n", + "[+] fwma: 2.5179 ms (0.0025 s)\n", + "[+] ha: 77.6575 ms (0.0777 s)\n", + "[+] hilo: 84.2990 ms (0.0843 s)\n", + "[+] hl2: 0.3635 ms (0.0004 s)\n", + "[+] hlc3: 0.3576 ms (0.0004 s)\n", + "[+] hma: 0.4158 ms (0.0004 s)\n", + "[+] hwc: 8.5273 ms (0.0085 s)\n", + "[+] hwma: 6.4855 ms (0.0065 s)\n", + "[+] ifisher: 0.6070 ms (0.0006 s)\n", + "[+] increasing: 0.3525 ms (0.0004 s)\n", + "[+] inertia: 4.2218 ms (0.0042 s)\n", + "[+] jma: 28.2376 ms (0.0282 s)\n", + "[+] kama: 15.8834 ms (0.0159 s)\n", + "[+] kc: 0.9397 ms (0.0009 s)\n", + "[+] kdj: 1.7454 ms (0.0017 s)\n", + "[+] kst: 1.4877 ms (0.0015 s)\n", + "[+] kurtosis: 0.4252 ms (0.0004 s)\n", + "[+] kvo: 3.5205 ms (0.0035 s)\n", + "[+] linreg: 13.0294 ms (0.0130 s)\n", + "[+] log_return: 0.2041 ms (0.0002 s)\n", + "[+] long_run: 0.0011 ms (0.0000 s)\n", + "[+] macd: 2.7193 ms (0.0027 s)\n", + "[+] mad: 14.5471 ms (0.0145 s)\n", + "[+] massi: 1.3195 ms (0.0013 s)\n", + "[+] mcgd: 2.3247 ms (0.0023 s)\n", + "[+] median: 0.7084 ms (0.0007 s)\n", + "[+] mfi: 4.1935 ms (0.0042 s)\n", + "[+] midpoint: 0.6485 ms (0.0006 s)\n", + "[+] midprice: 0.6756 ms (0.0007 s)\n", + "[+] mom: 0.2173 ms (0.0002 s)\n", + "[+] natr: 1.8147 ms (0.0018 s)\n", + "[+] nvi: 2.7327 ms (0.0027 s)\n", + "[+] obv: 2.1172 ms (0.0021 s)\n", + "[+] ohlc4: 0.4611 ms (0.0005 s)\n", + "[+] pdist: 1.2092 ms (0.0012 s)\n", + "[+] percent_return: 0.1870 ms (0.0002 s)\n", + "[+] pgo: 0.6019 ms (0.0006 s)\n", + "[+] ppo: 1.6355 ms (0.0016 s)\n", + "[+] psar: 108.8582 ms (0.1089 s)\n", + "[+] psl: 1.7168 ms (0.0017 s)\n", + "[+] pvi: 2.7434 ms (0.0027 s)\n", + "[+] pvo: 0.8043 ms (0.0008 s)\n", "[+] pvol: 0.2969 ms (0.0003 s)\n", - "[+] pvr: 1.3529 ms (0.0014 s)\n", - "[+] pvt: 0.3959 ms (0.0004 s)\n", - "[+] pwma: 2.3196 ms (0.0023 s)\n", - "[+] qqe: 196.9609 ms (0.1970 s)\n", - "[+] qstick: 0.8610 ms (0.0009 s)\n", - "[+] quantile: 0.7692 ms (0.0008 s)\n", - "[+] reflex: 0.2250 ms (0.0002 s)\n", - "[+] remap: 0.1758 ms (0.0002 s)\n", - "[+] rma: 0.3221 ms (0.0003 s)\n", - "[+] roc: 0.4424 ms (0.0004 s)\n", - "[+] rsi: 2.5839 ms (0.0026 s)\n", - "[+] rsx: 10.0975 ms (0.0101 s)\n", - "[+] rvgi: 7.5413 ms (0.0075 s)\n", - "[+] rvi: 4.2737 ms (0.0043 s)\n", - "[+] short_run: 0.0015 ms (0.0000 s)\n", - "[+] sinwma: 11.4942 ms (0.0115 s)\n", - "[+] skew: 0.5697 ms (0.0006 s)\n", - "[+] slope: 0.3690 ms (0.0004 s)\n", - "[+] sma: 0.5113 ms (0.0005 s)\n", - "[+] smi: 1.3082 ms (0.0013 s)\n", - "[+] smma: 71.8654 ms (0.0719 s)\n", - "[+] squeeze: 3.3569 ms (0.0034 s)\n", - "[+] squeeze_pro: 5.0170 ms (0.0050 s)\n", - "[+] ssf: 0.1861 ms (0.0002 s)\n", - "[+] ssf3: 0.1665 ms (0.0002 s)\n", - "[+] stc: 24.6567 ms (0.0247 s)\n", - "[+] stdev: 0.4545 ms (0.0005 s)\n", - "[+] stoch: 2.0917 ms (0.0021 s)\n", - "[+] stochf: 1.8937 ms (0.0019 s)\n", - "[+] stochrsi: 1.3749 ms (0.0014 s)\n", - "[+] supertrend: 53.3542 ms (0.0534 s)\n", - "[+] swma: 2.4871 ms (0.0025 s)\n", - "[+] t3: 2.4323 ms (0.0024 s)\n", - "[+] td_seq: 914.2004 ms (0.9142 s)\n", - "[+] tema: 1.5158 ms (0.0015 s)\n", - "[+] thermo: 1.5802 ms (0.0016 s)\n", - "[+] tos_stdevall: 3.0723 ms (0.0031 s)\n", - "[+] trendflex: 0.2148 ms (0.0002 s)\n", - "[+] trima: 0.6923 ms (0.0007 s)\n", - "[+] trix: 1.8449 ms (0.0018 s)\n", - "[+] true_range: 1.3857 ms (0.0014 s)\n", - "[+] tsi: 1.9481 ms (0.0019 s)\n", - "[+] tsignals: 0.0015 ms (0.0000 s)\n", - "[+] ttm_trend: 1.8538 ms (0.0019 s)\n", - "[+] ui: 0.9041 ms (0.0009 s)\n", - "[+] uo: 2.9892 ms (0.0030 s)\n", - "[+] variance: 0.3331 ms (0.0003 s)\n", - "[+] vhf: 1.0348 ms (0.0010 s)\n", - "[+] vidya: 49.6284 ms (0.0496 s)\n", - "[+] vortex: 1.6013 ms (0.0016 s)\n", - "[+] vwap: 1.9849 ms (0.0020 s)\n", - "[+] vwma: 0.4579 ms (0.0005 s)\n", - "[+] wb_tsv: 4.0840 ms (0.0041 s)\n", - "[+] wcp: 0.3736 ms (0.0004 s)\n", - "[+] willr: 0.9798 ms (0.0010 s)\n", - "[+] wma: 11.3445 ms (0.0113 s)\n", - "[+] xsignals: 0.0014 ms (0.0000 s)\n", - "[+] zlma: 0.6628 ms (0.0007 s)\n", - "[+] zscore: 1.0129 ms (0.0010 s)\n", + "[+] pvr: 1.3597 ms (0.0014 s)\n", + "[+] pvt: 0.3973 ms (0.0004 s)\n", + "[+] pwma: 2.2865 ms (0.0023 s)\n", + "[+] qqe: 199.6916 ms (0.1997 s)\n", + "[+] qstick: 0.7852 ms (0.0008 s)\n", + "[+] quantile: 0.7704 ms (0.0008 s)\n", + "[+] reflex: 0.2441 ms (0.0002 s)\n", + "[+] remap: 0.1834 ms (0.0002 s)\n", + "[+] rma: 0.3475 ms (0.0003 s)\n", + "[+] roc: 0.4204 ms (0.0004 s)\n", + "[+] rsi: 2.6160 ms (0.0026 s)\n", + "[+] rsx: 10.6464 ms (0.0106 s)\n", + "[+] rvgi: 8.3236 ms (0.0083 s)\n", + "[+] rvi: 4.9372 ms (0.0049 s)\n", + "[+] short_run: 0.0012 ms (0.0000 s)\n", + "[+] sinwma: 11.2597 ms (0.0113 s)\n", + "[+] skew: 0.6183 ms (0.0006 s)\n", + "[+] slope: 0.2954 ms (0.0003 s)\n", + "[+] sma: 0.4162 ms (0.0004 s)\n", + "[+] smi: 1.2353 ms (0.0012 s)\n", + "[+] smma: 72.7620 ms (0.0728 s)\n", + "[+] squeeze: 3.2674 ms (0.0033 s)\n", + "[+] squeeze_pro: 5.1635 ms (0.0052 s)\n", + "[+] ssf: 0.1887 ms (0.0002 s)\n", + "[+] ssf3: 0.1724 ms (0.0002 s)\n", + "[+] stc: 24.5385 ms (0.0245 s)\n", + "[+] stdev: 0.4670 ms (0.0005 s)\n", + "[+] stoch: 2.1049 ms (0.0021 s)\n", + "[+] stochf: 1.8578 ms (0.0019 s)\n", + "[+] stochrsi: 1.3623 ms (0.0014 s)\n", + "[+] supertrend: 54.3731 ms (0.0544 s)\n", + "[+] swma: 2.3784 ms (0.0024 s)\n", + "[+] t3: 2.4433 ms (0.0024 s)\n", + "[+] td_seq: 939.3749 ms (0.9394 s)\n", + "[+] tema: 2.3474 ms (0.0023 s)\n", + "[+] thermo: 1.8748 ms (0.0019 s)\n", + "[+] tos_stdevall: 3.7445 ms (0.0037 s)\n", + "[+] trendflex: 0.2807 ms (0.0003 s)\n", + "[+] trima: 0.7627 ms (0.0008 s)\n", + "[+] trix: 2.5868 ms (0.0026 s)\n", + "[+] true_range: 2.2454 ms (0.0022 s)\n", + "[+] tsi: 3.7692 ms (0.0038 s)\n", + "[+] tsignals: 0.0018 ms (0.0000 s)\n", + "[+] ttm_trend: 2.1323 ms (0.0021 s)\n", + "[+] ui: 1.0357 ms (0.0010 s)\n", + "[+] uo: 3.8208 ms (0.0038 s)\n", + "[+] variance: 0.4530 ms (0.0005 s)\n", + "[+] vhf: 1.3929 ms (0.0014 s)\n", + "[+] vidya: 55.6581 ms (0.0557 s)\n", + "[+] vortex: 2.2883 ms (0.0023 s)\n", + "[+] vwap: 2.8340 ms (0.0028 s)\n", + "[+] vwma: 0.6360 ms (0.0006 s)\n", + "[+] wb_tsv: 5.5872 ms (0.0056 s)\n", + "[+] wcp: 0.5243 ms (0.0005 s)\n", + "[+] willr: 1.2556 ms (0.0013 s)\n", + "[+] wma: 12.9237 ms (0.0129 s)\n", + "[+] xsignals: 0.0019 ms (0.0000 s)\n", + "[+] zlma: 1.0086 ms (0.0010 s)\n", + "[+] zscore: 1.2827 ms (0.0013 s)\n", "\n", "============================================================\n", - " Slowest 10 Indicators [145]\n", + " Slowest 10 Indicators [146]\n", " Observations: 1260\n", "============================================================\n", - " secs ms\n", + " ms secs\n", "Indicator \n", - "td_seq 0.91420 914.2004\n", - "alligator 0.21256 212.5608\n", - "qqe 0.19696 196.9609\n", - "psar 0.10900 108.9982\n", - "hilo 0.08816 88.1582\n", - "ha 0.07834 78.3370\n", - "smma 0.07187 71.8654\n", - "supertrend 0.05335 53.3542\n", - "vidya 0.04963 49.6284\n", - "ebsw 0.04038 40.3750\n", + "td_seq 939.3749 0.93937\n", + "alligator 219.4132 0.21941\n", + "qqe 199.6916 0.19969\n", + "psar 108.8582 0.10886\n", + "hilo 84.2990 0.08430\n", + "ha 77.6575 0.07766\n", + "smma 72.7620 0.07276\n", + "vidya 55.6581 0.05566\n", + "supertrend 54.3731 0.05437\n", + "ebsw 40.1932 0.04019\n", "\n", "============================================================\n", "Time Stats:\n", - " secs ms\n", - "min 0.000000 0.001300\n", - "50% 0.001350 1.352900\n", - "mean 0.015054 15.053662\n", - "max 0.914200 914.200400\n", - "total 2.182790 2182.781000\n", + " ms secs\n", + "min 0.001100 0.000000\n", + "50% 1.440300 0.001440\n", + "mean 15.302968 0.015303\n", + "max 939.374900 0.939370\n", + "total 2234.233400 2.234260\n", "\n", "============================================================\n", "\n" @@ -367,53 +371,49 @@ "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -423,60 +423,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", "
 secsmsmssecs
Indicator
td_seq0.914200914.200400td_seq939.3749000.939370
alligator0.212560212.560800alligator219.4132000.219410
qqe0.196960196.960900qqe199.6916000.199690
psar0.109000108.998200psar108.8582000.108860
hilo0.08816088.158200hilo84.2990000.084300
ha0.07834078.337000ha77.6575000.077660
smma0.07187071.865400smma72.7620000.072760
supertrend0.05335053.354200vidya55.6581000.055660
vidya0.04963049.628400supertrend54.3731000.054370
ebsw0.04038040.375000ebsw40.1932000.040190
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 6, @@ -515,47 +515,47 @@ " \n", " \n", " \n", - " secs\n", " ms\n", + " secs\n", " \n", " \n", " \n", " \n", " min\n", + " 0.001100\n", " 0.000000\n", - " 0.001300\n", " \n", " \n", " 50%\n", - " 0.001350\n", - " 1.352900\n", + " 1.440300\n", + " 0.001440\n", " \n", " \n", " mean\n", - " 0.015054\n", - " 15.053662\n", + " 15.302968\n", + " 0.015303\n", " \n", " \n", " max\n", - " 0.914200\n", - " 914.200400\n", + " 939.374900\n", + " 0.939370\n", " \n", " \n", " total\n", - " 2.182790\n", - " 2182.781000\n", + " 2234.233400\n", + " 2.234260\n", " \n", " \n", "\n", "" ], "text/plain": [ - " secs ms\n", - "min 0.000000 0.001300\n", - "50% 0.001350 1.352900\n", - "mean 0.015054 15.053662\n", - "max 0.914200 914.200400\n", - "total 2.182790 2182.781000" + " ms secs\n", + "min 0.001100 0.000000\n", + "50% 1.440300 0.001440\n", + "mean 15.302968 0.015303\n", + "max 939.374900 0.939370\n", + "total 2234.233400 2.234260" ] }, "execution_count": 7, @@ -567,6 +567,14 @@ "pta_statsdf" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "c7445703-cfe7-4b66-9d74-0712191080cb", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "942e3b8a-e3d9-480f-82b4-75d311b54cfa", @@ -586,177 +594,178 @@ "output_type": "stream", "text": [ "\n", - "[+] aberration: 1.6712 ms (0.0017 s)\n", - "[+] accbands: 1.6530 ms (0.0017 s)\n", - "[+] ad: 0.6278 ms (0.0006 s)\n", - "[+] adosc: 0.6367 ms (0.0006 s)\n", - "[+] adx: 3.9251 ms (0.0039 s)\n", - "[+] alligator: 213.2352 ms (0.2132 s)\n", - "[+] alma: 0.5386 ms (0.0005 s)\n", - "[+] amat: 2.2675 ms (0.0023 s)\n", - "[+] ao: 0.5618 ms (0.0006 s)\n", - "[+] aobv: 2.9535 ms (0.0030 s)\n", - "[+] apo: 0.2270 ms (0.0002 s)\n", - "[+] aroon: 0.6380 ms (0.0006 s)\n", - "[+] atr: 0.3922 ms (0.0004 s)\n", - "[+] bbands: 0.9583 ms (0.0010 s)\n", - "[+] bias: 0.3105 ms (0.0003 s)\n", - "[+] bop: 0.4727 ms (0.0005 s)\n", - "[+] brar: 4.3192 ms (0.0043 s)\n", - "[+] cci: 0.4120 ms (0.0004 s)\n", - "[+] cdl_pattern: 11.4396 ms (0.0114 s)\n", - "[+] cdl_z: 1.7711 ms (0.0018 s)\n", - "[+] cfo: 0.3807 ms (0.0004 s)\n", - "[+] cg: 5.4135 ms (0.0054 s)\n", - "[+] chop: 1.4270 ms (0.0014 s)\n", - "[+] cksp: 1.7219 ms (0.0017 s)\n", - "[+] cmf: 1.3268 ms (0.0013 s)\n", - "[+] cmo: 0.2003 ms (0.0002 s)\n", - "[+] coppock: 0.3301 ms (0.0003 s)\n", - "[+] cti: 0.1857 ms (0.0002 s)\n", - "[+] cube: 0.5715 ms (0.0006 s)\n", - "[+] decay: 0.8335 ms (0.0008 s)\n", - "[+] decreasing: 0.3362 ms (0.0003 s)\n", - "[+] dema: 0.1886 ms (0.0002 s)\n", - "[+] dm: 0.5403 ms (0.0005 s)\n", - "[+] donchian: 1.0650 ms (0.0011 s)\n", - "[+] dpo: 0.4687 ms (0.0005 s)\n", - "[+] ebsw: 40.1970 ms (0.0402 s)\n", - "[+] efi: 0.4208 ms (0.0004 s)\n", - "[+] ema: 0.1655 ms (0.0002 s)\n", - "[+] entropy: 0.6737 ms (0.0007 s)\n", - "[+] eom: 1.0302 ms (0.0010 s)\n", - "[+] er: 0.5670 ms (0.0006 s)\n", - "[+] eri: 0.6949 ms (0.0007 s)\n", - "[+] fisher: 10.0484 ms (0.0100 s)\n", - "[+] fwma: 2.5911 ms (0.0026 s)\n", - "[+] ha: 77.0000 ms (0.0770 s)\n", - "[+] hilo: 82.5885 ms (0.0826 s)\n", - "[+] hl2: 0.3007 ms (0.0003 s)\n", - "[+] hlc3: 0.3609 ms (0.0004 s)\n", - "[+] hma: 0.3957 ms (0.0004 s)\n", - "[+] hwc: 8.8935 ms (0.0089 s)\n", - "[+] hwma: 6.2470 ms (0.0062 s)\n", - "[+] ifisher: 0.6125 ms (0.0006 s)\n", - "[+] increasing: 0.3415 ms (0.0003 s)\n", - "[+] inertia: 4.2041 ms (0.0042 s)\n", - "[+] jma: 28.0654 ms (0.0281 s)\n", - "[+] kama: 15.5335 ms (0.0155 s)\n", - "[+] kc: 0.9612 ms (0.0010 s)\n", - "[+] kdj: 1.7077 ms (0.0017 s)\n", - "[+] kst: 1.9600 ms (0.0020 s)\n", - "[+] kurtosis: 0.4316 ms (0.0004 s)\n", - "[+] kvo: 3.4707 ms (0.0035 s)\n", - "[+] linreg: 0.1940 ms (0.0002 s)\n", - "[+] log_return: 0.1908 ms (0.0002 s)\n", - "[+] long_run: 0.0012 ms (0.0000 s)\n", - "[+] macd: 0.4594 ms (0.0005 s)\n", - "[+] mad: 14.9323 ms (0.0149 s)\n", - "[+] massi: 0.8308 ms (0.0008 s)\n", - "[+] mcgd: 2.3739 ms (0.0024 s)\n", - "[+] median: 0.8246 ms (0.0008 s)\n", - "[+] mfi: 0.4850 ms (0.0005 s)\n", - "[+] midpoint: 0.1723 ms (0.0002 s)\n", - "[+] midprice: 0.2578 ms (0.0003 s)\n", - "[+] mom: 0.1613 ms (0.0002 s)\n", - "[+] natr: 0.3584 ms (0.0004 s)\n", - "[+] nvi: 2.8606 ms (0.0029 s)\n", - "[+] obv: 0.2942 ms (0.0003 s)\n", - "[+] ohlc4: 0.4482 ms (0.0004 s)\n", - "[+] pdist: 1.3666 ms (0.0014 s)\n", - "[+] percent_return: 0.1928 ms (0.0002 s)\n", - "[+] pgo: 0.5993 ms (0.0006 s)\n", - "[+] ppo: 0.5450 ms (0.0005 s)\n", - "[+] psar: 107.3772 ms (0.1074 s)\n", - "[+] psl: 1.7135 ms (0.0017 s)\n", - "[+] pvi: 2.7448 ms (0.0027 s)\n", - "[+] pvo: 0.7494 ms (0.0007 s)\n", - "[+] pvol: 0.2937 ms (0.0003 s)\n", - "[+] pvr: 1.3526 ms (0.0014 s)\n", - "[+] pvt: 0.3934 ms (0.0004 s)\n", - "[+] pwma: 2.5975 ms (0.0026 s)\n", - "[+] qqe: 197.4433 ms (0.1974 s)\n", - "[+] qstick: 0.6420 ms (0.0006 s)\n", - "[+] quantile: 0.7476 ms (0.0007 s)\n", + "[+] aberration: 1.4574 ms (0.0015 s)\n", + "[+] accbands: 1.5594 ms (0.0016 s)\n", + "[+] ad: 0.6050 ms (0.0006 s)\n", + "[+] adosc: 0.5090 ms (0.0005 s)\n", + "[+] adx: 6.9582 ms (0.0070 s)\n", + "[+] alligator: 234.2123 ms (0.2342 s)\n", + "[+] alma: 0.5487 ms (0.0005 s)\n", + "[+] amat: 2.3552 ms (0.0024 s)\n", + "[+] ao: 0.5406 ms (0.0005 s)\n", + "[+] aobv: 3.0123 ms (0.0030 s)\n", + "[+] apo: 0.2258 ms (0.0002 s)\n", + "[+] aroon: 0.6451 ms (0.0006 s)\n", + "[+] atr: 0.3848 ms (0.0004 s)\n", + "[+] atrts: 0.5595 ms (0.0006 s)\n", + "[+] bbands: 0.9761 ms (0.0010 s)\n", + "[+] bias: 0.3614 ms (0.0004 s)\n", + "[+] bop: 0.5203 ms (0.0005 s)\n", + "[+] brar: 5.0789 ms (0.0051 s)\n", + "[+] cci: 0.4582 ms (0.0005 s)\n", + "[+] cdl_pattern: 12.4430 ms (0.0124 s)\n", + "[+] cdl_z: 2.2153 ms (0.0022 s)\n", + "[+] cfo: 0.4864 ms (0.0005 s)\n", + "[+] cg: 7.3939 ms (0.0074 s)\n", + "[+] chop: 1.7344 ms (0.0017 s)\n", + "[+] cksp: 1.7417 ms (0.0017 s)\n", + "[+] cmf: 1.5916 ms (0.0016 s)\n", + "[+] cmo: 0.2477 ms (0.0002 s)\n", + "[+] coppock: 0.3745 ms (0.0004 s)\n", + "[+] cti: 0.2111 ms (0.0002 s)\n", + "[+] cube: 0.8503 ms (0.0009 s)\n", + "[+] decay: 0.8619 ms (0.0009 s)\n", + "[+] decreasing: 0.3596 ms (0.0004 s)\n", + "[+] dema: 0.2110 ms (0.0002 s)\n", + "[+] dm: 0.5595 ms (0.0006 s)\n", + "[+] donchian: 1.0422 ms (0.0010 s)\n", + "[+] dpo: 0.5036 ms (0.0005 s)\n", + "[+] ebsw: 42.1200 ms (0.0421 s)\n", + "[+] efi: 0.5090 ms (0.0005 s)\n", + "[+] ema: 0.1804 ms (0.0002 s)\n", + "[+] entropy: 0.8325 ms (0.0008 s)\n", + "[+] eom: 1.1210 ms (0.0011 s)\n", + "[+] er: 0.6062 ms (0.0006 s)\n", + "[+] eri: 0.7919 ms (0.0008 s)\n", + "[+] fisher: 10.7730 ms (0.0108 s)\n", + "[+] fwma: 4.7763 ms (0.0048 s)\n", + "[+] ha: 91.8492 ms (0.0918 s)\n", + "[+] hilo: 89.0798 ms (0.0891 s)\n", + "[+] hl2: 0.5440 ms (0.0005 s)\n", + "[+] hlc3: 0.4229 ms (0.0004 s)\n", + "[+] hma: 0.4605 ms (0.0005 s)\n", + "[+] hwc: 9.0071 ms (0.0090 s)\n", + "[+] hwma: 7.2081 ms (0.0072 s)\n", + "[+] ifisher: 0.7474 ms (0.0007 s)\n", + "[+] increasing: 0.4005 ms (0.0004 s)\n", + "[+] inertia: 5.0944 ms (0.0051 s)\n", + "[+] jma: 30.4198 ms (0.0304 s)\n", + "[+] kama: 16.8293 ms (0.0168 s)\n", + "[+] kc: 1.0569 ms (0.0011 s)\n", + "[+] kdj: 1.7952 ms (0.0018 s)\n", + "[+] kst: 1.8727 ms (0.0019 s)\n", + "[+] kurtosis: 0.3943 ms (0.0004 s)\n", + "[+] kvo: 3.8675 ms (0.0039 s)\n", + "[+] linreg: 0.2095 ms (0.0002 s)\n", + "[+] log_return: 0.3195 ms (0.0003 s)\n", + "[+] long_run: 0.0013 ms (0.0000 s)\n", + "[+] macd: 0.5531 ms (0.0006 s)\n", + "[+] mad: 15.0788 ms (0.0151 s)\n", + "[+] massi: 0.7279 ms (0.0007 s)\n", + "[+] mcgd: 2.4638 ms (0.0025 s)\n", + "[+] median: 0.8215 ms (0.0008 s)\n", + "[+] mfi: 0.5097 ms (0.0005 s)\n", + "[+] midpoint: 0.1810 ms (0.0002 s)\n", + "[+] midprice: 0.2682 ms (0.0003 s)\n", + "[+] mom: 0.1870 ms (0.0002 s)\n", + "[+] natr: 0.4198 ms (0.0004 s)\n", + "[+] nvi: 3.2221 ms (0.0032 s)\n", + "[+] obv: 0.3030 ms (0.0003 s)\n", + "[+] ohlc4: 0.4550 ms (0.0005 s)\n", + "[+] pdist: 1.2511 ms (0.0013 s)\n", + "[+] percent_return: 0.1915 ms (0.0002 s)\n", + "[+] pgo: 0.6167 ms (0.0006 s)\n", + "[+] ppo: 0.5543 ms (0.0006 s)\n", + "[+] psar: 112.6814 ms (0.1127 s)\n", + "[+] psl: 1.7091 ms (0.0017 s)\n", + "[+] pvi: 2.9347 ms (0.0029 s)\n", + "[+] pvo: 0.7635 ms (0.0008 s)\n", + "[+] pvol: 0.3239 ms (0.0003 s)\n", + "[+] pvr: 1.3519 ms (0.0014 s)\n", + "[+] pvt: 0.3971 ms (0.0004 s)\n", + "[+] pwma: 2.3767 ms (0.0024 s)\n", + "[+] qqe: 197.1505 ms (0.1972 s)\n", + "[+] qstick: 0.5424 ms (0.0005 s)\n", + "[+] quantile: 0.7355 ms (0.0007 s)\n", "[+] reflex: 0.2276 ms (0.0002 s)\n", - "[+] remap: 0.1762 ms (0.0002 s)\n", - "[+] rma: 0.3756 ms (0.0004 s)\n", - "[+] roc: 0.1708 ms (0.0002 s)\n", - "[+] rsi: 0.1703 ms (0.0002 s)\n", - "[+] rsx: 10.0999 ms (0.0101 s)\n", - "[+] rvgi: 8.2282 ms (0.0082 s)\n", - "[+] rvi: 4.5243 ms (0.0045 s)\n", + "[+] remap: 0.1761 ms (0.0002 s)\n", + "[+] rma: 0.3241 ms (0.0003 s)\n", + "[+] roc: 0.1672 ms (0.0002 s)\n", + "[+] rsi: 0.1781 ms (0.0002 s)\n", + "[+] rsx: 10.2953 ms (0.0103 s)\n", + "[+] rvgi: 8.2884 ms (0.0083 s)\n", + "[+] rvi: 4.5673 ms (0.0046 s)\n", "[+] short_run: 0.0015 ms (0.0000 s)\n", - "[+] sinwma: 10.7480 ms (0.0107 s)\n", - "[+] skew: 0.3062 ms (0.0003 s)\n", - "[+] slope: 0.2510 ms (0.0003 s)\n", - "[+] sma: 0.1660 ms (0.0002 s)\n", - "[+] smi: 1.1754 ms (0.0012 s)\n", - "[+] smma: 71.3380 ms (0.0713 s)\n", - "[+] squeeze: 3.1300 ms (0.0031 s)\n", - "[+] squeeze_pro: 5.5751 ms (0.0056 s)\n", - "[+] ssf: 0.1944 ms (0.0002 s)\n", - "[+] ssf3: 0.1687 ms (0.0002 s)\n", - "[+] stc: 24.6713 ms (0.0247 s)\n", - "[+] stdev: 0.1866 ms (0.0002 s)\n", - "[+] stoch: 0.5962 ms (0.0006 s)\n", - "[+] stochf: 0.5749 ms (0.0006 s)\n", - "[+] stochrsi: 1.3901 ms (0.0014 s)\n", - "[+] supertrend: 53.9695 ms (0.0540 s)\n", - "[+] swma: 2.1357 ms (0.0021 s)\n", - "[+] t3: 0.1875 ms (0.0002 s)\n", - "[+] td_seq: 919.0886 ms (0.9191 s)\n", - "[+] tema: 0.2817 ms (0.0003 s)\n", - "[+] thermo: 1.8349 ms (0.0018 s)\n", - "[+] tos_stdevall: 3.2026 ms (0.0032 s)\n", - "[+] trendflex: 0.2153 ms (0.0002 s)\n", - "[+] trima: 0.1792 ms (0.0002 s)\n", - "[+] trix: 0.9219 ms (0.0009 s)\n", - "[+] true_range: 0.3660 ms (0.0004 s)\n", - "[+] tsi: 0.8074 ms (0.0008 s)\n", - "[+] tsignals: 0.0016 ms (0.0000 s)\n", - "[+] ttm_trend: 2.0149 ms (0.0020 s)\n", - "[+] ui: 1.0273 ms (0.0010 s)\n", - "[+] uo: 0.4113 ms (0.0004 s)\n", - "[+] variance: 0.1669 ms (0.0002 s)\n", - "[+] vhf: 1.2475 ms (0.0012 s)\n", - "[+] vidya: 50.6357 ms (0.0506 s)\n", - "[+] vortex: 1.7260 ms (0.0017 s)\n", - "[+] vwap: 2.1095 ms (0.0021 s)\n", - "[+] vwma: 0.4720 ms (0.0005 s)\n", - "[+] wb_tsv: 4.1343 ms (0.0041 s)\n", - "[+] wcp: 0.3865 ms (0.0004 s)\n", - "[+] willr: 0.3631 ms (0.0004 s)\n", - "[+] wma: 0.1553 ms (0.0002 s)\n", - "[+] xsignals: 0.0016 ms (0.0000 s)\n", - "[+] zlma: 0.3429 ms (0.0003 s)\n", - "[+] zscore: 0.3980 ms (0.0004 s)\n", + "[+] sinwma: 10.9650 ms (0.0110 s)\n", + "[+] skew: 0.4569 ms (0.0005 s)\n", + "[+] slope: 0.2607 ms (0.0003 s)\n", + "[+] sma: 0.1720 ms (0.0002 s)\n", + "[+] smi: 1.1787 ms (0.0012 s)\n", + "[+] smma: 72.3567 ms (0.0724 s)\n", + "[+] squeeze: 3.1259 ms (0.0031 s)\n", + "[+] squeeze_pro: 4.9297 ms (0.0049 s)\n", + "[+] ssf: 0.1875 ms (0.0002 s)\n", + "[+] ssf3: 0.1669 ms (0.0002 s)\n", + "[+] stc: 25.7928 ms (0.0258 s)\n", + "[+] stdev: 0.2406 ms (0.0002 s)\n", + "[+] stoch: 0.6115 ms (0.0006 s)\n", + "[+] stochf: 0.5768 ms (0.0006 s)\n", + "[+] stochrsi: 1.3957 ms (0.0014 s)\n", + "[+] supertrend: 54.8945 ms (0.0549 s)\n", + "[+] swma: 2.5675 ms (0.0026 s)\n", + "[+] t3: 0.2058 ms (0.0002 s)\n", + "[+] td_seq: 920.2317 ms (0.9202 s)\n", + "[+] tema: 0.2495 ms (0.0002 s)\n", + "[+] thermo: 1.5787 ms (0.0016 s)\n", + "[+] tos_stdevall: 3.7933 ms (0.0038 s)\n", + "[+] trendflex: 0.2212 ms (0.0002 s)\n", + "[+] trima: 0.1798 ms (0.0002 s)\n", + "[+] trix: 1.0912 ms (0.0011 s)\n", + "[+] true_range: 0.3817 ms (0.0004 s)\n", + "[+] tsi: 0.8223 ms (0.0008 s)\n", + "[+] tsignals: 0.0015 ms (0.0000 s)\n", + "[+] ttm_trend: 1.8579 ms (0.0019 s)\n", + "[+] ui: 1.0563 ms (0.0011 s)\n", + "[+] uo: 0.4031 ms (0.0004 s)\n", + "[+] variance: 0.1758 ms (0.0002 s)\n", + "[+] vhf: 1.2903 ms (0.0013 s)\n", + "[+] vidya: 50.9213 ms (0.0509 s)\n", + "[+] vortex: 1.8401 ms (0.0018 s)\n", + "[+] vwap: 2.1093 ms (0.0021 s)\n", + "[+] vwma: 0.4780 ms (0.0005 s)\n", + "[+] wb_tsv: 4.1540 ms (0.0042 s)\n", + "[+] wcp: 0.3857 ms (0.0004 s)\n", + "[+] willr: 0.3641 ms (0.0004 s)\n", + "[+] wma: 0.1608 ms (0.0002 s)\n", + "[+] xsignals: 0.0017 ms (0.0000 s)\n", + "[+] zlma: 0.3506 ms (0.0004 s)\n", + "[+] zscore: 0.3875 ms (0.0004 s)\n", "\n", "============================================================\n", - " Slowest 10 Indicators [145]\n", + " Slowest 10 Indicators [146]\n", " Observations[talib]: 1260\n", "============================================================\n", - " secs ms\n", + " ms secs\n", "Indicator \n", - "td_seq 0.91909 919.0886\n", - "alligator 0.21324 213.2352\n", - "qqe 0.19744 197.4433\n", - "psar 0.10738 107.3772\n", - "hilo 0.08259 82.5885\n", - "ha 0.07700 77.0000\n", - "smma 0.07134 71.3380\n", - "supertrend 0.05397 53.9695\n", - "vidya 0.05064 50.6357\n", - "ebsw 0.04020 40.1970\n", + "td_seq 920.2317 0.92023\n", + "alligator 234.2123 0.23421\n", + "qqe 197.1505 0.19715\n", + "psar 112.6814 0.11268\n", + "ha 91.8492 0.09185\n", + "hilo 89.0798 0.08908\n", + "smma 72.3567 0.07236\n", + "supertrend 54.8945 0.05489\n", + "vidya 50.9213 0.05092\n", + "ebsw 42.1200 0.04212\n", "\n", "============================================================\n", "Time Stats:\n", - " secs ms\n", - "min 0.000000 0.001200\n", - "50% 0.000640 0.638000\n", - "mean 0.014416 14.415851\n", - "max 0.919090 919.088600\n", - "total 2.090310 2090.298400\n", + " ms secs\n", + "min 0.001300 0.000000\n", + "50% 0.686500 0.000690\n", + "mean 14.826408 0.014827\n", + "max 920.231700 0.920230\n", + "total 2164.655500 2.164670\n", "\n", "============================================================\n", "\n" @@ -777,53 +786,53 @@ "data": { "text/html": [ "\n", - "\n", + "
\n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -833,60 +842,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", "
 secsmsmssecs
Indicator
td_seq0.919090919.088600td_seq920.2317000.920230
alligator0.213240213.235200alligator234.2123000.234210
qqe0.197440197.443300qqe197.1505000.197150
psar0.107380107.377200psar112.6814000.112680
hilo0.08259082.588500ha91.8492000.091850
ha0.07700077.000000hilo89.0798000.089080
smma0.07134071.338000smma72.3567000.072360
supertrend0.05397053.969500supertrend54.8945000.054890
vidya0.05064050.635700vidya50.9213000.050920
ebsw0.04020040.197000ebsw42.1200000.042120
\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -925,47 +934,47 @@ " \n", " \n", " \n", - " secs\n", " ms\n", + " secs\n", " \n", " \n", " \n", " \n", " min\n", + " 0.001300\n", " 0.000000\n", - " 0.001200\n", " \n", " \n", " 50%\n", - " 0.000640\n", - " 0.638000\n", + " 0.686500\n", + " 0.000690\n", " \n", " \n", " mean\n", - " 0.014416\n", - " 14.415851\n", + " 14.826408\n", + " 0.014827\n", " \n", " \n", " max\n", - " 0.919090\n", - " 919.088600\n", + " 920.231700\n", + " 0.920230\n", " \n", " \n", " total\n", - " 2.090310\n", - " 2090.298400\n", + " 2164.655500\n", + " 2.164670\n", " \n", " \n", "\n", "" ], "text/plain": [ - " secs ms\n", - "min 0.000000 0.001200\n", - "50% 0.000640 0.638000\n", - "mean 0.014416 14.415851\n", - "max 0.919090 919.088600\n", - "total 2.090310 2090.298400" + " ms secs\n", + "min 0.001300 0.000000\n", + "50% 0.686500 0.000690\n", + "mean 14.826408 0.014827\n", + "max 920.231700 0.920230\n", + "total 2164.655500 2.164670" ] }, "execution_count": 10, @@ -1030,37 +1039,37 @@ " \n", " \n", " TA Lib\n", - " secs\n", - " 0.0000\n", - " 0.00064\n", - " 0.014416\n", - " 0.91909\n", - " 2.09031\n", + " ms\n", + " 0.0013\n", + " 0.68650\n", + " 14.826408\n", + " 920.23170\n", + " 2164.65550\n", " \n", " \n", - " ms\n", - " 0.0012\n", - " 0.63800\n", - " 14.415851\n", - " 919.08860\n", - " 2090.29840\n", + " secs\n", + " 0.0000\n", + " 0.00069\n", + " 0.014827\n", + " 0.92023\n", + " 2.16467\n", " \n", " \n", " Pandas TA\n", - " secs\n", - " 0.0000\n", - " 0.00135\n", - " 0.015054\n", - " 0.91420\n", - " 2.18279\n", + " ms\n", + " 0.0011\n", + " 1.44030\n", + " 15.302968\n", + " 939.37490\n", + " 2234.23340\n", " \n", " \n", - " ms\n", - " 0.0013\n", - " 1.35290\n", - " 15.053662\n", - " 914.20040\n", - " 2182.78100\n", + " secs\n", + " 0.0000\n", + " 0.00144\n", + " 0.015303\n", + " 0.93937\n", + " 2.23426\n", " \n", " \n", "\n", @@ -1068,10 +1077,10 @@ ], "text/plain": [ " min 50% mean max total\n", - "TA Lib secs 0.0000 0.00064 0.014416 0.91909 2.09031\n", - " ms 0.0012 0.63800 14.415851 919.08860 2090.29840\n", - "Pandas TA secs 0.0000 0.00135 0.015054 0.91420 2.18279\n", - " ms 0.0013 1.35290 15.053662 914.20040 2182.78100" + "TA Lib ms 0.0013 0.68650 14.826408 920.23170 2164.65550\n", + " secs 0.0000 0.00069 0.014827 0.92023 2.16467\n", + "Pandas TA ms 0.0011 1.44030 15.302968 939.37490 2234.23340\n", + " secs 0.0000 0.00144 0.015303 0.93937 2.23426" ] }, "execution_count": 11, @@ -1121,29 +1130,29 @@ " \n", " \n", " \n", - " secs\n", - " 0.0000\n", - " 0.00071\n", - " 0.000638\n", - " 0.00489\n", - " 0.09248\n", + " ms\n", + " 0.0002\n", + " 0.75380\n", + " 0.476561\n", + " 19.14320\n", + " 69.57790\n", " \n", " \n", - " ms\n", - " 0.0001\n", - " 0.71490\n", - " 0.637811\n", - " 4.88820\n", - " 92.48260\n", + " secs\n", + " 0.0000\n", + " 0.00075\n", + " 0.000477\n", + " 0.01914\n", + " 0.06959\n", " \n", " \n", "\n", "" ], "text/plain": [ - "Differences min 50% mean max total\n", - "secs 0.0000 0.00071 0.000638 0.00489 0.09248\n", - "ms 0.0001 0.71490 0.637811 4.88820 92.48260" + "Differences min 50% mean max total\n", + "ms 0.0002 0.75380 0.476561 19.14320 69.57790\n", + "secs 0.0000 0.00075 0.000477 0.01914 0.06959" ] }, "execution_count": 12, @@ -1156,6 +1165,14 @@ "diffdf.columns.name = \"Differences\"\n", "diffdf" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27fbdb58-a425-402c-a6ca-37c71c717fc0", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/pandas_ta/core.py b/pandas_ta/core.py index bfcff3e..21e5619 100644 --- a/pandas_ta/core.py +++ b/pandas_ta/core.py @@ -1583,11 +1583,11 @@ class AnalysisIndicators(object): result = atr(high=high, low=low, close=close, length=length, mamode=mamode, offset=offset, **kwargs) return self._post_process(result, **kwargs) - def atrts(self, length=None, factor=None, mamode=None, offset: Int = None, **kwargs: DictLike): + def atrts(self, length=None, ma_length=None, multiplier=None, mamode=None, talib=None, drift=None, offset: Int = None, **kwargs: DictLike): high = self._get_column(kwargs.pop("high", "high")) low = self._get_column(kwargs.pop("low", "low")) close = self._get_column(kwargs.pop("close", "close")) - result = atrts(high=high, low=low, close=close, length=length, factor=factor, mamode=mamode, offset=offset, **kwargs) + result = atrts(high=high, low=low, close=close, length=length, ma_length=ma_length, multiplier=multiplier, mamode=mamode, talib=talib, drift=drift, offset=offset, **kwargs) return self._post_process(result, **kwargs) def bbands(self, length=None, std=None, mamode=None, offset: Int = None, **kwargs: DictLike): diff --git a/pandas_ta/momentum/stoch.py b/pandas_ta/momentum/stoch.py index e996a00..135e471 100644 --- a/pandas_ta/momentum/stoch.py +++ b/pandas_ta/momentum/stoch.py @@ -65,7 +65,7 @@ def stoch( offset = v_offset(offset) # Calculate - if Imports["talib"] and mode_tal: + if Imports["talib"] and mode_tal and smooth_k > 2: from talib import STOCH stoch_ = STOCH( high, low, close, k, d, tal_ma(mamode), d, tal_ma(mamode) diff --git a/pandas_ta/overlap/sma.py b/pandas_ta/overlap/sma.py index 96eed3d..bcd129f 100644 --- a/pandas_ta/overlap/sma.py +++ b/pandas_ta/overlap/sma.py @@ -76,7 +76,7 @@ def sma( offset = v_offset(offset) # Calculate - if Imports["talib"] and mode_tal: + if Imports["talib"] and mode_tal and length > 1: from talib import SMA sma = SMA(close, length) else: diff --git a/pandas_ta/overlap/supertrend.py b/pandas_ta/overlap/supertrend.py index a5f2350..d7703a1 100644 --- a/pandas_ta/overlap/supertrend.py +++ b/pandas_ta/overlap/supertrend.py @@ -44,7 +44,6 @@ def supertrend( low = v_series(low, length) close = v_series(close, length) - if high is None or low is None or close is None: return @@ -58,9 +57,8 @@ def supertrend( hl2_ = hl2(high, low) matr = multiplier * atr(high, low, close, length) - ub = hl2_ + matr # Upperband lb = hl2_ - matr # Lowerband - + ub = hl2_ + matr # Upperband for i in range(1, m): if close.iloc[i] > ub.iloc[i - 1]: dir_[i] = 1 @@ -78,6 +76,9 @@ def supertrend( else: trend[i] = short[i] = ub.iloc[i] + trend[0] = nan + dir_[:length] = [nan] * length + _props = f"_{length}_{multiplier}" df = DataFrame({ f"SUPERT{_props}": trend, diff --git a/pandas_ta/statistics/tos_stdevall.py b/pandas_ta/statistics/tos_stdevall.py index dd37474..c043243 100644 --- a/pandas_ta/statistics/tos_stdevall.py +++ b/pandas_ta/statistics/tos_stdevall.py @@ -38,13 +38,6 @@ def tos_stdevall( mulitples of the standard deviation. Default: returns 7 columns. """ # Validate - stds = v_list(stds, [1, 2, 3]) - if min(stds) <= 0: - return - - if not all(i < j for i, j in zip(stds, stds[1:])): - stds = stds[::-1] - _props = f"TOS_STDEVALL" if length is None: length = close.size @@ -58,6 +51,13 @@ def tos_stdevall( if close is None: return + stds = v_list(stds, [1, 2, 3]) + if min(stds) <= 0: + return + + if not all(i < j for i, j in zip(stds, stds[1:])): + stds = stds[::-1] + ddof = int(ddof) if isinstance(ddof, int) and 0 <= ddof < length else 1 offset = v_offset(offset) diff --git a/pandas_ta/utils/_core.py b/pandas_ta/utils/_core.py index e386fc3..5fe2582 100644 --- a/pandas_ta/utils/_core.py +++ b/pandas_ta/utils/_core.py @@ -144,7 +144,7 @@ def _speed_group( for i in group: r = df.ta(i, talib=talib, timed=True) ms = float(r.timed.split(" ")[0].split(" ")[0]) - times.append({index_name: i, "secs": ms2secs(ms, p), "ms": ms}) + times.append({index_name: i, "ms": ms, "secs": ms2secs(ms, p)}) return times diff --git a/pandas_ta/volatility/__init__.py b/pandas_ta/volatility/__init__.py index 1617352..407f4d6 100644 --- a/pandas_ta/volatility/__init__.py +++ b/pandas_ta/volatility/__init__.py @@ -2,6 +2,7 @@ from .aberration import aberration from .accbands import accbands from .atr import atr +from .atrts import atrts from .bbands import bbands from .donchian import donchian from .hwc import hwc @@ -13,4 +14,3 @@ from .rvi import rvi from .thermo import thermo from .true_range import true_range from .ui import ui -from .atrts import atrts diff --git a/pandas_ta/volatility/atr.py b/pandas_ta/volatility/atr.py index dd392ce..ca7e7a2 100644 --- a/pandas_ta/volatility/atr.py +++ b/pandas_ta/volatility/atr.py @@ -64,8 +64,8 @@ def atr( ) atr = ma(mamode, tr, length=length, talib=mode_tal) - percentage = kwargs.pop("percent", False) - if percentage: + percent = kwargs.pop("percent", False) + if percent: atr *= 100 / close # Offset @@ -79,7 +79,7 @@ def atr( atr.fillna(method=kwargs["fill_method"], inplace=True) # Name and Category - atr.name = f"ATR{mamode[0]}_{length}{'p' if percentage else ''}" + atr.name = f"ATR{mamode[0]}{'p' if percent else ''}_{length}" atr.category = "volatility" return atr diff --git a/pandas_ta/volatility/atrts.py b/pandas_ta/volatility/atrts.py index e21f6a5..0e67cc0 100644 --- a/pandas_ta/volatility/atrts.py +++ b/pandas_ta/volatility/atrts.py @@ -1,101 +1,85 @@ # -*- coding: utf-8 -*- -from .true_range import true_range -from pandas_ta import Imports -from pandas_ta.overlap import ma +from numpy import nan, uintc, zeros_like +from pandas import Series +from pandas_ta._typing import Array, DictLike, Int, IntFloat +from pandas_ta.ma import ma +from pandas_ta.maps import Imports +from pandas_ta.utils import v_drift, v_mamode, v_offset +from pandas_ta.utils import v_pos_default, v_series, v_talib from pandas_ta.volatility import atr -from pandas_ta.utils import get_drift, get_offset, verify_series -from pandas import DataFrame, Series -from functools import partial + try: from numba import njit except ImportError: def njit(_): return _ -@njit -def calculateFunc(upTrend, dnTrend, prevP, atr, factor): - if upTrend: - return prevP - atr * factor - elif dnTrend: - return prevP + atr * factor @njit -def tailingStopFunc(upTrend, dnTrend, prevA, atrts): - if upTrend: - if atrts < prevA: return prevA - elif dnTrend: - if atrts > prevA: return prevA +def np_atrts(x: Array, ma_: Array, atr_: Array, length: Int, ma_length: Int): + m = x.size + k = max(length, ma_length) -def atrts(high, low, close, length=None, factor=None, mamode=None, talib=None, drift=None, offset=None, **kwargs): - """ATR Trailing Stops (ATRTS) - identifies exit points for long and short positions. - First, an exponential moving average (EMA) of the input is taken to determine the current trend. - Then, the Average True Range (ATR) is calculated and multiplied by a user defined factor. - If the EMA is increasing (uptrend), the ATR product is subtracted from the price or, - if the EMA is decreasing (down trend), it is added to the price, and along with a few details the ATRTS is formed. - The user may change the position (long), input (close), method (EMA), period lengths, - percent factor and show entry option(see trading signals below). - This indicator’s definition is further expressed in the condensed code given in the calculation below. + result = x.copy() + up = zeros_like(x, dtype=uintc) + dn = zeros_like(x, dtype=uintc) + + expn = x > ma_ + up[expn], dn[~expn] = 1, 1 + up[:k], dn[:k] = 0, 0 + result[:k] = nan + + for i in range(k, m): + pr = result[i - 1] + if up[i]: + result[i] = x[i] - atr_[i] + if result[i] < pr: + result[i] = pr + if dn[i]: + result[i] = x[i] + atr_[i] + if result[i] > pr: + result[i] = pr + + long, short = result * up, result * dn + long[long == 0], short[short == 0] = nan, nan + + return result, long, short + + +def atrts( + high: Series, low: Series, close: Series, length: Int = None, + ma_length: Int = None, multiplier: IntFloat = None, + mamode: str = None, talib: bool = None, drift: Int = None, + offset: Int = None, **kwargs: DictLike +) -> Series: + """ATR Trailing Stop (ATRTS) + + Attempts to identify exits for long and short positions using both ATR + and a moving average (MA) to determine the trend. + The Average True Range (ATR) is multiplied by a user defined factor. + If the MA is increasing (uptrend), the ATR product is subtracted from + the price or, if the MA is decreasing (down trend), it is added to the + price, and along with a few details the ATRTS is formed. The user may + change the position (long), input (close), method (EMA), period lengths, + percent factor and show entry option(see trading signals below). Sources: https://www.motivewave.com/studies/atr_trailing_stops.htm - Calculation: - //position = pos, user defined, default is long - //input = price, user defined, default is close - //method = moving average (ma), user defined, default is EMA - //period1 = maP, user defined, default is 63 - //period2 = artP, user defined, default is 21 - //factor = fac, user defined, default is 3 - //show entrys = showE, user defined, default is false - //index = current bar number, prev = previous - //LOE = less or equal, MOE = more or equal - //shortP = short position, longP = long position - //index = current bar number - - longP = pos == "Long"; - shortP = pos == "Short"; - atrts = 0, atr = 0; - ma = ma(method, maP, input); - prevP = price[index-1]; - prevA = ifNull(price, atrts[index]); //current atrts is plotted at index+1 - upTrend = price moreThan ma; - dnTrend = price LOE ma; - atr = atr(index, atrP); - if (upTrend) - atrts = price - fac * atr; - if (atrts lessThan prevA) atrts = prevA; - endIf - if (dnTrend) - atrts = price + fac * atr; - if (atrts moreThan prevA) atrts = prevA; - endIf - Plot: atrts[index+1]; - //Signals - sell = false, buy = false; - if (atrts != 0) - if (longP AND upTrend) - sell = price lessThan atrts; //sell to exit - buy = prevP lessThan atrts AND price moreThan atrts AND showE; //buy (enter) - endIf - if (shortP AND dnTrend) - sell = prevP moreThan atrts AND price lessThan atrts AND showE; //sell short (enter) - buy = price moreThan atrts; //buy to cover - endIf - endIf - - Args: + Args: high (pd.Series): Series of 'high's low (pd.Series): Series of 'low's close (pd.Series): Series of 'close's - length (int): It's period. Default: 14 - factor (int): the multiplyer. Default: 3 - mamode (str): See ```help(ta.ma)```. Default: 'rma' - talib (bool): If TA Lib is installed and talib is True, Returns the TA Lib + length (int): ATR length. Default: 14 + ma_length (int): MA Length. Default: 20 + multiplier (int): ATR multiplier. Default: 3 + mamode (str): See ``help(ta.ma)``. Default: 'ema' + talib (bool): If TA Lib is installed and talib is True, Returns the + TA Lib version. Default: True drift (int): The difference period. Default: 1 offset (int): How many periods to offset the result. Default: 0 - Kwargs: + Kwargs: percent (bool, optional): Return as percentage. Default: False fillna (value, optional): pd.DataFrame.fillna(value) fill_method (value, optional): Type of fill method @@ -104,39 +88,44 @@ def atrts(high, low, close, length=None, factor=None, mamode=None, talib=None, d pd.Series: New feature generated. """ # Validate - length = int(length) if length and length > 0 else 21 - factor = int(factor) if factor and factor > 0 else 3 - mamode = mamode.lower() if mamode and isinstance(mamode, str) else "rma" - high = verify_series(high, length) - low = verify_series(low, length) - close = verify_series(close, length) - drift = get_drift(drift) - offset = get_offset(offset) - mode_tal = bool(talib) if isinstance(talib, bool) else True + length = v_pos_default(length, 14) + ma_length = v_pos_default(ma_length, 20) + _length = max(length, ma_length) + high = v_series(high, _length) + low = v_series(low, _length) + close = v_series(close, _length) - if high is None or low is None or close is None: return + if high is None or low is None or close is None: + return - # Calculate - start - atr_ = atr(high=high, low=low, close=close, length=length) - ma_ = ma(mamode, close, length=length*3) - upTrend = close > ma_ - dnTrend = close <= ma_ - prevP = close.shift(1) + multiplier = v_pos_default(multiplier, 3.0) + mamode = v_mamode(mamode, "ema") + mode_tal = v_talib(talib) + drift = v_drift(drift) + offset = v_offset(offset) - func_p = partial(calculateFunc, factor=factor) - atrts_ = [func_p(a,b,c,d) for a,b,c,d in zip(upTrend, dnTrend, prevP, atr_)] - atrts_ = Series(atrts_, index=close.index) + # Calculate + if Imports["talib"] and mode_tal: + from talib import ATR + atr_ = ATR(high, low, close, length) + else: + atr_ = atr( + high=high, low=low, close=close, length=length, + mamode=mamode, drift=drift, talib=mode_tal, + offset=offset, **kwargs + ) - #prevA = atrts_.shift(1) - #atrts = [tailingStopFunc(a,b,c,d) for a,b,c,d in zip(upTrend, dnTrend, prevA, atrts_)] + atr_ *= multiplier + ma_ = ma(mamode, close, length=ma_length, talib=mode_tal) - #atrts = Series(atrts, index=close.index) - atrts = atrts_.shift(-1) - # Calculate - end + np_close, np_ma, np_atr = close.values, ma_.values, atr_.values + np_atrts_, _, _ = np_atrts(np_close, np_ma, np_atr, length, ma_length) - percentage = kwargs.pop("percent", False) - if percentage: - atrts *= 100 / close + percent = kwargs.pop("percent", False) + if percent: + np_atrts_ *= 100 / np_close + + atrts = Series(np_atrts_, index=close.index) # Offset if offset != 0: @@ -149,7 +138,8 @@ def atrts(high, low, close, length=None, factor=None, mamode=None, talib=None, d atrts.fillna(method=kwargs["fill_method"], inplace=True) # Name and Categorize it - atrts.name = f"ATRTS{mamode[0]}_{length}{'p' if percentage else ''}" + _props = f"ATRTS{mamode[0]}{'p' if percent else ''}" + atrts.name = f"{_props}_{length}_{ma_length}_{multiplier}" atrts.category = "volatility" return atrts \ No newline at end of file diff --git a/pandas_ta/volatility/true_range.py b/pandas_ta/volatility/true_range.py index 08939c9..372662c 100644 --- a/pandas_ta/volatility/true_range.py +++ b/pandas_ta/volatility/true_range.py @@ -49,9 +49,9 @@ def true_range( from talib import TRANGE true_range = TRANGE(high, low, close) else: - high_low_range = non_zero_range(high, low) - prev_close = close.shift(drift) - ranges = [high_low_range, high - prev_close, prev_close - low] + hl_range = non_zero_range(high, low) + pc = close.shift(drift) + ranges = [hl_range, high - pc, pc - low] true_range = concat(ranges, axis=1) true_range = true_range.abs().max(axis=1) true_range.iloc[:drift] = nan diff --git a/setup.py b/setup.py index 472494f..c18342d 100644 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ setup( "pandas_ta.volatility", "pandas_ta.volume" ], - version=".".join(("0", "3", "55b")), + version=".".join(("0", "3", "56b")), description=long_description, long_description=long_description, author="Kevin Johnson", diff --git a/tests/test_ext_indicator_volatility.py b/tests/test_ext_indicator_volatility.py index 066c2a7..e891b0d 100644 --- a/tests/test_ext_indicator_volatility.py +++ b/tests/test_ext_indicator_volatility.py @@ -33,6 +33,11 @@ class TestVolatilityExtension(TestCase): self.assertIsInstance(self.data, DataFrame) self.assertEqual(self.data.columns[-1], "ATRr_14") + def test_atrts_ext(self): + self.data.ta.atrts(append=True) + self.assertIsInstance(self.data, DataFrame) + self.assertEqual(self.data.columns[-1], "ATRTSe_14_20_3.0") + def test_bbands_ext(self): self.data.ta.bbands(append=True) self.assertIsInstance(self.data, DataFrame) diff --git a/tests/test_indicator_volatility.py b/tests/test_indicator_volatility.py index 6be2197..bce84a7 100644 --- a/tests/test_indicator_volatility.py +++ b/tests/test_indicator_volatility.py @@ -67,6 +67,12 @@ class TestVolatility(TestCase): self.assertIsInstance(result, Series) self.assertEqual(result.name, "ATRr_14") + def test_atrts(self): + """Volatility: ATRTS""" + result = pandas_ta.atrts(self.high, self.low, self.close, talib=False) + self.assertIsInstance(result, Series) + self.assertEqual(result.name, "ATRTSe_14_20_3.0") + def test_bbands(self): """Volatility: BBANDS""" result = pandas_ta.bbands(self.close, talib=False)