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",
- " secs | \n",
- " ms | \n",
+ " ms | \n",
+ " secs | \n",
"
\n",
" \n",
" | Indicator | \n",
@@ -423,60 +423,60 @@
"
\n",
" \n",
" \n",
- " | td_seq | \n",
- " 0.914200 | \n",
- " 914.200400 | \n",
+ " td_seq | \n",
+ " 939.374900 | \n",
+ " 0.939370 | \n",
"
\n",
" \n",
- " | alligator | \n",
- " 0.212560 | \n",
- " 212.560800 | \n",
+ " alligator | \n",
+ " 219.413200 | \n",
+ " 0.219410 | \n",
"
\n",
" \n",
- " | qqe | \n",
- " 0.196960 | \n",
- " 196.960900 | \n",
+ " qqe | \n",
+ " 199.691600 | \n",
+ " 0.199690 | \n",
"
\n",
" \n",
- " | psar | \n",
- " 0.109000 | \n",
- " 108.998200 | \n",
+ " psar | \n",
+ " 108.858200 | \n",
+ " 0.108860 | \n",
"
\n",
" \n",
- " | hilo | \n",
- " 0.088160 | \n",
- " 88.158200 | \n",
+ " hilo | \n",
+ " 84.299000 | \n",
+ " 0.084300 | \n",
"
\n",
" \n",
- " | ha | \n",
- " 0.078340 | \n",
- " 78.337000 | \n",
+ " ha | \n",
+ " 77.657500 | \n",
+ " 0.077660 | \n",
"
\n",
" \n",
- " | smma | \n",
- " 0.071870 | \n",
- " 71.865400 | \n",
+ " smma | \n",
+ " 72.762000 | \n",
+ " 0.072760 | \n",
"
\n",
" \n",
- " | supertrend | \n",
- " 0.053350 | \n",
- " 53.354200 | \n",
+ " vidya | \n",
+ " 55.658100 | \n",
+ " 0.055660 | \n",
"
\n",
" \n",
- " | vidya | \n",
- " 0.049630 | \n",
- " 49.628400 | \n",
+ " supertrend | \n",
+ " 54.373100 | \n",
+ " 0.054370 | \n",
"
\n",
" \n",
- " | ebsw | \n",
- " 0.040380 | \n",
- " 40.375000 | \n",
+ " ebsw | \n",
+ " 40.193200 | \n",
+ " 0.040190 | \n",
"
\n",
" \n",
"
\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",
- " secs | \n",
- " ms | \n",
+ " ms | \n",
+ " secs | \n",
"
\n",
" \n",
" | Indicator | \n",
@@ -833,60 +842,60 @@
"
\n",
" \n",
" \n",
- " | td_seq | \n",
- " 0.919090 | \n",
- " 919.088600 | \n",
+ " td_seq | \n",
+ " 920.231700 | \n",
+ " 0.920230 | \n",
"
\n",
" \n",
- " | alligator | \n",
- " 0.213240 | \n",
- " 213.235200 | \n",
+ " alligator | \n",
+ " 234.212300 | \n",
+ " 0.234210 | \n",
"
\n",
" \n",
- " | qqe | \n",
- " 0.197440 | \n",
- " 197.443300 | \n",
+ " qqe | \n",
+ " 197.150500 | \n",
+ " 0.197150 | \n",
"
\n",
" \n",
- " | psar | \n",
- " 0.107380 | \n",
- " 107.377200 | \n",
+ " psar | \n",
+ " 112.681400 | \n",
+ " 0.112680 | \n",
"
\n",
" \n",
- " | hilo | \n",
- " 0.082590 | \n",
- " 82.588500 | \n",
+ " ha | \n",
+ " 91.849200 | \n",
+ " 0.091850 | \n",
"
\n",
" \n",
- " | ha | \n",
- " 0.077000 | \n",
- " 77.000000 | \n",
+ " hilo | \n",
+ " 89.079800 | \n",
+ " 0.089080 | \n",
"
\n",
" \n",
- " | smma | \n",
- " 0.071340 | \n",
- " 71.338000 | \n",
+ " smma | \n",
+ " 72.356700 | \n",
+ " 0.072360 | \n",
"
\n",
" \n",
- " | supertrend | \n",
- " 0.053970 | \n",
- " 53.969500 | \n",
+ " supertrend | \n",
+ " 54.894500 | \n",
+ " 0.054890 | \n",
"
\n",
" \n",
- " | vidya | \n",
- " 0.050640 | \n",
- " 50.635700 | \n",
+ " vidya | \n",
+ " 50.921300 | \n",
+ " 0.050920 | \n",
"
\n",
" \n",
- " | ebsw | \n",
- " 0.040200 | \n",
- " 40.197000 | \n",
+ " ebsw | \n",
+ " 42.120000 | \n",
+ " 0.042120 | \n",
"
\n",
" \n",
"
\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)