ENH Gann HiLo Activator added MAINT refactoring

This commit is contained in:
Kevin Johnson committed 2020-09-05 10:39:47 -07:00
1 parent a1df65746c
commit cd22bc5707
20 files changed
+817 -657

No files matched your search

+7 -2
View File
@@ -59,11 +59,15 @@ and _Weighted Moving Average_.
* _Squeeze_ (**squeeze**). A Momentum indicator. Both John Carter's TTM **and** Lazybear's TradingView versions are implemented. The default is John Carter's, or ```lazybear=False```. Set ```lazybear=True``` to enable Lazybear's.
* _TTM Trend_ (**ttm_trend**). A trend indicator inspired from John Carter's book "Mastering the Trade".
* _SMI Ergodic_ (**smi**) Developed by William Blau, the SMI Ergodic Indicator is the same as the True Strength Index (TSI) except the SMI includes a signal line and oscillator.
* _Gann High-Low Activator_ (**hilo**) The Gann High Low Activator Indicator was created by Robert Krausz in a 1998
issue of Stocks & Commodities Magazine. It is a moving average based trend
indicator consisting of two different simple moving averages.
## __Updated Indicators__
* _Fisher Transform_ (**fisher**): Added Fisher's default **ema** signal line. To change the length of the signal line, use the argument: ```signal=5```. Default: 5
* _Fisher Transform_ (**fisher**) and _Kaufman's Adaptive Moving Average_ (**kama**): Fixed a bug where their columns were not added to final DataFrame when using the _strategy_ method.
* _Trend Return_ (**trend_return**): Returns a DataFrame now instead of Series.
* _Trend Return_ (**trend_return**): Returns a DataFrame now instead of Series.
* _Average True Range_ (**atr**): Added option to return **atr** as a percentage. See: ```help(ta.atr)```
## What is a Pandas DataFrame Extension?
@@ -358,11 +362,12 @@ print(bothhl2.name) # "pre_HL2_post"
|:--------:|
| ![Example MACD](/images/SPY_MACD.png) |
## _Overlap_ (26)
## _Overlap_ (27)
* _Double Exponential Moving Average_: **dema**
* _Exponential Moving Average_: **ema**
* _Fibonacci's Weighted Moving Average_: **fwma**
* _Gann High-Low Activator_: **hilo**
* _High-Low Average_: **hl2**
* _High-Low-Close Average_: **hlc3**
* Commonly known as 'Typical Price' in Technical Analysis literature
+24 -24
View File
@@ -45,7 +45,7 @@
"Numpy v1.18.3\n",
"Pandas v1.1.0\n",
"mplfinance v0.12.6a3\n",
"Pandas TA v0.1.95b\n"
"Pandas TA v0.1.99b\n"
]
}
],
@@ -111,14 +111,14 @@
"output_type": "stream",
"text": [
"[!] Loading All: SPY, QQQ, AAPL, TSLA\n",
"[+] Downloading['D']: SPY\n",
"[i] Runtime: 26.5277 ms (0.0265 s)\n",
"[+] Downloading['D']: QQQ\n",
"[i] Runtime: 15.1635 ms (0.0152 s)\n",
"[+] Downloading['D']: AAPL\n",
"[i] Runtime: 15.9123 ms (0.0159 s)\n",
"[+] Downloading['D']: TSLA\n",
"[i] Runtime: 13.5791 ms (0.0136 s)\n"
"[i] Loaded['D']: SPY_D.csv\n",
"[i] Runtime: 13.2056 ms (0.0132 s)\n",
"[i] Loaded['D']: QQQ_D.csv\n",
"[i] Runtime: 29.3252 ms (0.0293 s)\n",
"[i] Loaded['D']: AAPL_D.csv\n",
"[i] Runtime: 53.6132 ms (0.0536 s)\n",
"[i] Loaded['D']: TSLA_D.csv\n",
"[i] Runtime: 17.6341 ms (0.0176 s)\n"
]
}
],
@@ -173,7 +173,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"AAPL (251, 10)\n",
"AAPL (252, 10)\n",
"Columns: open, high, low, close, volume, SMA_10, SMA_20, SMA_50, SMA_200, VOL_SMA_20\n"
]
}
@@ -201,18 +201,18 @@
"data": {
"text/plain": [
"date\n",
"2019-08-30 NaN\n",
"2019-09-03 NaN\n",
"2019-09-04 NaN\n",
"2019-09-05 NaN\n",
"2019-09-06 NaN\n",
"2019-09-09 NaN\n",
" ... \n",
"2020-08-24 407.982853\n",
"2020-08-25 411.563918\n",
"2020-08-26 415.270823\n",
"2020-08-27 418.595104\n",
"2020-08-28 421.757257\n",
"Name: EMA_50, Length: 251, dtype: float64"
"2020-08-24 407.982918\n",
"2020-08-25 411.563980\n",
"2020-08-26 415.270883\n",
"2020-08-27 418.595162\n",
"2020-08-28 421.757313\n",
"Name: EMA_50, Length: 252, dtype: float64"
]
},
"execution_count": 7,
@@ -353,7 +353,7 @@
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x118f30730>"
"<matplotlib.axes._subplots.AxesSubplot at 0x1111cb940>"
]
},
"execution_count": 9,
@@ -362,7 +362,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x216 with 1 Axes>"
]
@@ -396,7 +396,7 @@
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x118e34a00>"
"<matplotlib.axes._subplots.AxesSubplot at 0x10529e100>"
]
},
"execution_count": 10,
@@ -405,7 +405,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7cAAAE1CAYAAAA8gxf5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzda5Bc533f+e8z091zB2YwAIa4iQAlUtYlCRWzRG1pX8B2JNHW7lLZchw5VRHtqMykJFU5u9kt06lUybGsFF2VxBXHlrzMiispFYVWOXGJ5ZJWy9iapFwxSVEiRRK8AAMMgLlirt3TPX3vfvbFHEBDajAYAIPpuXw/rK7pfs5zzvk3+BSAH55znhNijEiSJEmStJO1tboASZIkSZJul+FWkiRJkrTjGW4lSZIkSTue4VaSJEmStOMZbiVJkiRJO16q1QVstoMHD8aTJ0+2uoybsry8TE9PT6vL0Dbl+NB6HB9ai+NC63F8aD2OD21Eq8fJD37wg7kY46G3t++6cHvy5EleeOGFVpdxU4aHhzl9+nSry9A25fjQehwfWovjQutxfGg9jg9tRKvHSQjh0lrtXpYsSZIkSdrxDLeSJEmSpB3PcCtJkiRJ2vF23T23a6nVaoyPj1Mul1tdypr279/P66+/vqG+nZ2dHD9+nHQ6fYerkiRJkqSdY0+E2/Hxcfr6+jh58iQhhFaX8xPy+Tx9fX037BdjZH5+nvHxcU6dOrUFlUmSJEnSzrAnLksul8sMDg5uy2B7M0IIDA4ObtsZaEmSJElqlT0RboEdH2yv2i3fQ5IkSZI2054Jt5IkSZKk3WtP3HP7ds+cf4b50vymHW+wa5CPvPMj192ezWb5xje+wWc+85lNO6ckSZIk6cf2ZLidL81zV+9dm3a86cL0utuz2Sxf+tKXfiLc1ut1Uqkf/y8YHh7mq1/9Kl/96lc3rTZJkiRJ2oiZ5RmWKkvcM3APbWHnXeS7J8PtVnvsscc4f/48999/P+l0ms7OTgYGBnjjjTc4e/Zsq8uTJEmStMc1Y5PzC+e5sHiBE/tO0JHqaHVJN81wuwUef/xxXn31VV566SWGh4f5+Mc/zquvvurjfCRJkiRtCxNLE4wvjVOql6g363RguNUGfPCDH3xLsP2Zn/kZ6vU6hUKBhYUF7r//fgB+93d/l4997GOtKlOSJEnSHlBr1LiweIHpwjT7O/a3upxbZrhtgZ6enrd8/t73vkdfX5/33EqSJEnacpdylxhfGqc300smlWl1ObfshncJhxA6QwjPhxB+FEI4E0L450n7V0MIoyGEl5LX/Ul7CCH8fghhJITwcgjhb6461iMhhHPJ65FV7T8dQngl2ef3Q/Iw1xDCgRDCM0n/Z0IIA5v/S3Dn9fX1kc/nW12GJEmSJL1FqVZidHGU+dI8x/Yda3U5t2UjM7cV4GdjjIUQQhr4yxDCd5Jt/2eM8U/e1v/ngXuT14PAl4EHQwgHgM8DDwAR+EEI4ekY42LS59eA54BvAw8B3wEeA/48xvh4COGx5PNv3PrXXTHYNXjDFY5v9njrbh8c5MMf/jDvf//76erqYmhoaNPOLUmSJEm36sLiBSbyEwx2DZJp37mztrCBcBtjjEAh+ZhOXnGdXR4Gvp7s92wIoT+EcAQ4DTwTY1wACCE8AzwUQhgG9sUYn03avw58gpVw+3CyH8DXgGE2Idyu90zaO+Ub3/jGDfucPn2a06dP3/liJEmSJO15uXKOy7nLLFWWeN+h97W6nNu2oYcXhRDaQwgvATOsBNTnkk1fTC49/r0QwtXltI4BY6t2H0/a1msfX6MdYCjGOJW8nwac8pQkSZKkTXB+8TxjuTHu6r2L9rb2Vpdz2za0oFSMsQHcH0LoB/40hPB+4DdZCZwZ4AlWZlR/+04VGmOMIYQ1Z4xDCI8CjwIMDQ0xPDz8lu379+/f1ve8NhqNm6qvXC7/xHfU7lUoFPz/retyfGgtjgutx/Gh9Tg+9o5sNcv5wnn62/vp6uqikFys29Hs4LnZ52gL158H3a7j5KZWS44xZkMI3wMeijH+y6S5EkL4f4D/I/k8AZxYtdvxpG2CH19ifLV9OGk/vkZ/gCshhCMxxqnk0uaZ69T1BCsBmwceeCC+/dLe119/nb6+vo1/0S2Wz+dvqr7Ozk4+8IEP3MGKtJ0MDw97ubquy/GhtTgutB7Hh9bj+NgbmrHJ8+PPMzE1wWDfIH1dP84i04VpHrzvQXoyPdfdf7uOk42slnwombElhNAFfAR4IwmbJCsbfwJ4NdnlaeBTyarJHwJyyaXF3wU+GkIYSFY9/ijw3WTbUgjhQ8mxPgV8a9Wxrq6q/MiqdkmSJEnSLZjMTzKRnyDVlqK/q7/V5WyajczcHgG+FkJoZyUMfzPG+GchhL8IIRwCAvAS8I+S/t8GfgEYAYrArwLEGBdCCF8Avp/0++2ri0sBnwG+CnSxspDU1dWYHwe+GUL4NHAJ+KVb/aKSJEmStNfVGjXOL5xnKj/FqYFTrS5nU21kteSXgZ+4BjbG+LPX6R+Bz15n25PAk2u0vwC8f432eeDnblSjJEmSJOnGLucuM1WYojvTve6lxzvRTd1zu2s88wzMz2/e8QYH4SPXf7xQNpvlG9/4Bp/5zGc275ySJEmSdBNKtRIXsxeZXZ7lvsH7Wl3Optub4XZ+Hu66a/OONz297uZsNsuXvvSlnwi39XqdVGpv/i+QJEmStLVGs6NMLE3Q39lPR6rjxjvsMCarLfDYY49x/vx57r//ftLpNJ2dnQwMDPDGG29w9uzZVpcnSZIkaZdbKC1wKXuJXCXHew69p9Xl3BGG2y3w+OOP8+qrr/LSSy8xPDzMxz/+cV599VVOndpdN3BLkiRJ2l5qjRoXFi9wMXuRy7nLHO45TKptd8bA3fmttrkPfvCDBltJkiRJd0yMkenCNCMLI1zOXWa+NM9Q7xCHuw+3urQ75obPudXm6+lZWZVsbGyM+++/nw9/+MP80R/9UYurkiRJkrQbFKoFXpx+kecnnudHV35EtVHlpw7+FEM9Q4QQWl3eHePM7Rbo6+sjn8//RPuJEyd46aWXyOfz9PX1taAySZIkSbtFjJHzi+cZXRzlcu4ylXqFu/ffTV/H3sgaezPcDg7ecIXjmz7eupsH+fCHP8z73/9+urq6GBoa2rxzS5IkSRIwkZ/gzMwZLuUucaj7EKcGTtEW9s7Funsz3K7zTNo75Rvf+MaWn1OSJEnS3lBr1Di/cJ7LucvcM3APvZneVpe05fZOjJckSZKkXepS7hKT+Ul6M717MtiC4VaSJEmSdrRSrcTF7EVmi7Mc23es1eW0zJ4JtzHGVpewKXbL95AkSZK0Oc4tnGN8aZwDnQfItGdaXU7L7Ilw29nZyfz8/I4PhjFG5ufn6ezsbHUpkiRJkraBmeUZLucuU6gUONJ3pNXltNSeWFDq+PHjjI+PMzs72+pS1lQulzccWDs7Ozl+/PgdrkiSJEnSdldv1jk3f46JpQmO9h2lva291SW11J4It+l0mlOnTrW6jOsaHh7mAx/4QKvLkCRJkrSDXFi8wGR+klRbigPdB1pdTsvticuSJUmSJGk3yZVzXMxeZKY4s6cXkVrNcCtJkiRJO0gzNjk7f/baIlKdKdfkAcOtJEmSJO0oY7kxJpYmqNQrDPUOtbqcbcNwK0mSJEk7RKlW4sLiBSYKE5zYf4K2YKS7yl8JSZIkSdohrl6O3JfuozfT2+pythXDrSRJkiTtAFcKVxhbGmOpsuQiUmvYE48CkiRJkqSdKsbIbHGWs/NnuZy7zLG+Y3v+mbZrMdxKkiRJ0jY1V5xjdHGUyfwkk/lJulPd9Hf1t7qsbclwK0mSJEnbzEJpgdHFUSbyE0wuTdKkydHeowbbddzwntsQQmcI4fkQwo9CCGdCCP88aT8VQnguhDASQvjjEEImae9IPo8k20+uOtZvJu1vhhA+tqr9oaRtJITw2Kr2Nc8hSZIkSbtRvpLnxakX+e9j/50XJl5gLDfG4Z7DvOfgewy2N7CRBaUqwM/GGP8GcD/wUAjhQ8DvAr8XY3wXsAh8Oun/aWAxaf+9pB8hhPcCnwTeBzwEfCmE0B5CaAf+EPh54L3ALyd9WecckiRJkrSrVBtVfjj1Q34w9QMuLl5ksGeQ9x56Lwe6DxBCaHV5294Nw21cUUg+ppNXBH4W+JOk/WvAJ5L3DyefSbb/XFj5P/Ew8FSMsRJjHAVGgA8mr5EY44UYYxV4Cng42ed655AkSZKkXeXc/DkuL10mFVK87/D7ONh90FB7EzZ0z20yu/oD4F2szLKeB7IxxnrSZRy4uhb1MWAMIMZYDyHkgMGk/dlVh129z9jb2h9M9rneOd5e36PAowBDQ0MMDw9v5GttG4VCYcfVrK3j+NB6HB9ai+NC63F8aD2Oj9bJ1XKcL5ynJ/RwtPsoy7PLLamjo9nBc7PP0RauPw+6XcfJhsJtjLEB3B9C6Af+FPipO1rVTYoxPgE8AfDAAw/E06dPt7agmzQ8PMxOq1lbx/Gh9Tg+tBbHhdbj+NB6HB+tUW/WeXb8WSavTHKo5xB93X0tq2W6MM2D9z1IT6bnun226zjZyD2318QYs8D3gP8B6A8hXA3Hx4GJ5P0EcAIg2b4fmF/d/rZ9rtc+v845JEmSJGlXOL9wnvHcOOm2NAe6D7S6nB1rI6slH0pmbAkhdAEfAV5nJeT+YtLtEeBbyfunk88k2/8ixhiT9k8mqymfAu4Fnge+D9ybrIycYWXRqaeTfa53DkmSJEna8RZLi4xmR5ktzvKO/ne0upwdbSOXJR8Bvpbcd9sGfDPG+GchhNeAp0IIvwO8CHwl6f8V4N+HEEaABVbCKjHGMyGEbwKvAXXgs8nlzoQQPgd8F2gHnowxnkmO9RvXOYckSZIk7WiNZoM35t5gLDfGUM8QmXaffHo7bhhuY4wvAx9Yo/0CKysdv72Line truncated
"text/plain": [
"<Figure size 1152x360 with 1 Axes>"
]
@@ -441,7 +441,7 @@
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x11911a370>"
"<matplotlib.axes._subplots.AxesSubplot at 0x1112a2070>"
]
},
"execution_count": 11,
@@ -450,7 +450,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1152x61.2 with 1 Axes>"
]
@@ -490,7 +490,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6UAAAJYCAYAAACaWkA1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeXhU1f3H8feXsATZNyn7jgoCQXEHQQVxqRWEKlYFtWppS9VaFK0bWqloW35UKcVdKUosFVxQFCwiiAuKUBAREAwaCItAQsJucn5/nJs4GSaTyUImCZ/X89yHzD33nHvuvWeG+c4591xzziEiIiIiIiISD1XiXQERERERERE5eikoFRERERERkbhRUCoiIiIiIiJxo6BURERERERE4kZBqYiIiIiIiMSNglIRERERERGJGwWlIiIiIiIiEjcKSkVERERERCRuFJSKiIiIiIhI3CgoFRERERERkbhRUCoiIiIiIiJxo6BURERERERE4kZBqYiIiIiIiMSNglIRERERERGJGwWlIiIiIiIiEjcKSkVERERERCRuFJSKiIiIiIhI3CgoFRERERERkbhRUCoiIiIiIiJxo6BURERERERE4kZBqYiIiIiIiMSNglIRqZTMrImZfWVmNUtQRj8zW1CK1cott0ZQtyZRtjEze87MdpnZktKuQ2kyszlmNqKAtLZm5sysalnXS0qXmU0xs3ujpDsz61iWdTqaBZ8jX5pZszjsu0yutZn9zsweOdL7EZH4U1AqIqXOzBYEwVSNAtLbmVmOmf0zQpozsz1mlmVmm8xsgpklBGkpZtY/xmrcCTzvnNsXUqf9ZpZpZrvNbKmZ3VlQHWM8zsvN7EMz21uU4NU5dwB4NqhjQXoDA4CWzrlTi1vH4jKz583sYHAdcpcrIm3rnLvQOfdCHOp4uZmtDq7pl2Y2KMq2jc1ssZntMLN0M/vIzM4K2+b3ZrYlaB/PRmsbZna7mX0R7PsbM7s9LL2tmb0XtI2vQtutmZ1oZu+Y2fdm5iKUfYKZzTezDDP72swGR6nHtWb2QUHphTGzsWZ2KOw63xFpW+fcSOfcn4q7rxLU8Vwz+zy4LhvM7KYo2x5rZtPNbHNw/hab2Wlh2/wuuGa7zewzM+sdpbzTzWyeme00s+1mNiM0CAx+PHokaFc7gr8tSOtsZq8F+XYG1/y4sPJjbnMR3AQsdM6lBWUV1iZTzGxfyHWeG5I2IvhM3G1mqWb2qJWPH5KeAq4ys2PjXRERObIUlIpIqTKztkAfwAE/K2Cz4cAu4IoCvoT1cM7VBs4DfgHcWMQ61ABGANPCkkY55+oAzYA/AMOAt3K/RBbDTmAiML4YeV8CRkT5EtoGSHHO7YmUWEZfGB91ztUOWV4Oq4OZWVz+HzGzFvjrextQF7gdeCnKl9cs4HqgCdAAeAR4I/c8mtlA/I8E5+HPfXvggWhVwLfjBsAFwCgzGxaSPh1YBjQC7gb+Yz/2jB8C/g38MsJxVQVeA2YDDfGBxzQz6xylLiX1cth1fjRCvRKO4P4LZGbVgFnAE0A94Apggpn1KCBLbeBT4GT8+XsBeNPMagflnYZ/vw4NynsGmBXl+BoATwJt8e0iE3guJP0mYBDQA+gOXAL8KkirD7wOHAc0BZbgr23usRW1zYUbCfwr5HVhbRLgkpDrfH7I+mOAW4HGwGlBnUYXoS7FUtjnmHNuPzAHf1wiUpk557Ro0aKl1BbgPmAxMAGYHSHdgPXAr4GtwNCwdAd0DHk9A5gU/J0C9I+hDmcDX4etWwDcELauNbAX+GkB5fQDFsSwvxvCtwPeBH4Xtm4FMDjk9Tqgb4TyfgnsB7LxwdQDQV1SgTHAFvyX0Rr4oHhzsEwEaoTUPRW4A9gGpOG/PF8ErMUH1H+MckzPAw9FWL8AGBdc431Ax9BzCyQAfwW+BzYAvw2uadUg/TpgNf7L/QbgVyFlf4H/0pz7ulpQTs8I9TgN2Ba2bjtwRgzXqwo+eHDAscG6l4A/h2xzHrClCO3+MeDx4O/OwAGgTkj6ImBkWJ6OgAtbd2JwzS1k3VzgTxH2eUJYO0kP1tcDpgbnYyNwD1ClgHqPBaYVcP3/CbwF7AH6h7cJ/A8BaUHbu56Q9y5wMT4o3w18B4wtynsjZH3ToNxjQtZ9ClxZhGuzGzg5+PsKYElIWq2g/GYxlnUSkBny+kPgprD37scF5G0Y7KtRSdsc/rNrH8H7qrA2GbxOIYbPz2Db24A3oqQ74Gb8e/h74C+5bQzoAMwHdgRpLwL1w+oxJrjmB4CqwetN+M+FNcB5IdtfBbwX6/XWokVLxVzUUyoipW04/kvIi8BAM2salt4baAkk43uLIt6LCGBmXfC9rsuKWIdu+C82UTnnvgU+C/ZR2l4Ars59EfTstMB/Ic+1Gt/DEl6vZ/C9IB8536Nxf5D0E/wX2zb4Hpq7gdOBpKCcU/EBCCHbJwb7vQ8/FO5qfC9SH+BeM2tXjGO7Jth/HXzQE+pG4KdAT6AXvkcq1LYgvS4+QP0/MzspSJtKyDnDB9BpzrlI1/8zYLWZ/czMEswP3T2A/6JbIDNbgQ/kXgeeds5tC5K6Av8L2fR/QFMzaxStvKBMw5/PVSFlbXDOZYaV17WwsgraBT5Yzcc5t5r87aR+kPQ4PjBtD/TFvyevK8Z+f4H/AaIOkG+IsJldgO9JGwB0wgetofYE+62PD1B/bT8Or47lvZF7jFvxvc7XBdf5DHz7j2nIspklAdWBr4NVc4AEMzst6B29HliO/6EnFmfz43WGyO2moOt8Nj7o3BElb0xtDv8Zt8E590OkxAhtMteLwXDiuVF6m3PrGp433GD8e/wk4FL8uQTfXh8GmuN/OGmF//Ej1JX4dlEfH8SOAk5xfiTLQHzgmivi56SIVC4KSkWk1AT3ZrUB/u2cW4rvEf1F2GYjgDnOuV34noILIgy5/NzMdgFvAE+Tf7hcLOrjf3GPxWZ8oFfaXgc6m1mn4PU1+GGSB0O2ycTXNVY5wP3OuQPO3yt7FfCgc26bc247vkf1mpDtDwHjnHOH8D8CNAb+7pzLdM6tAr4k+pe90ebvv0w3s+9D1j/vnFvlnPshKDvU5cBE59x3zrmd+C+neZxzbzrn1jvvfXwvYO6PAtOAi8ysbvD6GvIPTwwtJxsfxL6ED0Zfwve6RhzuHJKvOz4g/gX5A5vaQEbI69y/60QrLzAW//9pbjsNLyu3vFjKWoMP3G83s2pmdj4+sDwmhry5w2yHAXcF1zkF+Bv520W4y0Ouc7qZNQ/Wv+acW+ycy3F+GGW+PMBzzrkvgnM+NjTRObfAObcyyLsCH1j2DZJjeW+Emo7/UeUAvsf5bufcd9HPBATt6F/AA8653OuRCbyCv/YHgPvxPZ2H3dsbobzuQT1C79WM1G5qh98SYGYtgX/geyCj5YXY2klhn3Fjyd8mwX9etMV/Rr8HvGNmh33+mNn1+GDzr4XU4RHn3M7gx72J+EAT59zXzrl5wefUdvyomb5heR8LPiP24Xv6awBdzKyacy7FObc+ZNtM/I8sIlKJKSgVkdI0ApjrnMsNYF4ipCfU/Ey4P8f3ouKc+wj4lsMD15Occw2ccx2cc/c453KKWI9dxPbFDnwPzc4ill+o4Ev8y8DVwX2XV3J4gFUHSC9CsdvDgoPm5O+p3Bisy7UjCN7AD/UDP2SakHW1o+zvr865+sHSOGR9tICgeVh6vp5UM7vQzD4OJn5Jx/eGNgZwzm3GDwseEnxZvpCgrYQzP3HQo/hhytXxX3qfDnrGsPwT97QOzeuc2++cmw7cGdJblIUPVnPl/p1pZn8MKWtKWD1G4XsEL3Z+AqtIZeWWV+gPJUGQPwjfi7QFf+/zv/FDsWPRGD/sObxdtIiS598h17l+cB2gZNf5NPMTPW03swx8j27udY7lvZFbzvH4H1SG469zV+AOM7s4SF8Vcm36hOSrif9R62PnXOgPI7/E9xp3Dcq7GphtZs3NrHVouwmrR0d8L+stzrlFIUmR2k1WaJAb3Es8F5gctLtoeSG2H9QK/IwroE0S/MCwzzm3Nzgn6YSNEgl6sx8GLgz5HC9I+PVvHpTR1MySzU9Utxv/Y1PjgvI6577G3886FtgW5A39HKvD4T/yiEglo6BUREpF8CXwcqCv+dkktwC/B3qEfPEfjP/iNTlkmxZEGcJbTCvw9/UVVudW+KGsiwrbtphewPdOnAfsDYLwUCeQf/heYcJ7czbjez1ytQ7WHWnRepXS8MP1cuUFhMGkTq/ge2CaBsNN38IP98uVO7Tz5/hhqZsK2E8SfubRz4LeuE+BTwiGkbr8E/d8W0AZ1fBDXMEPVQztNe4BbHXO7XDO/TmkrJEhx3M9wUQ1zrnQoHEV0N7M6oSVV9hwSIK6r3DO9XXONXLODQzqWNBjgcKvxff4HvLwdlHQeYxalShpBV7nwEv4HtFWzrl6wBQOv87R3hu5TgTWOufeCa7zGvww3wsBnHNdQ67NIshrZ6/iA/lfhZWXhL/XfW1Q3tvBsZzpnPs2tN3kZjCzNsC7+Pt6w4PnSO1mVUjeBviA9HXn3LgY8m51Pw7vjWYF0C58oqAobTISR8g1CYZkP4W/r3tlDHUIv/65nz1/Dsru5pyri38/h08ml69tOedecs7ljrRx+InIchX1c1JEKiAFpSJSWgbhh2F1wX/xS8J/mVjEjzMnjsA/CqVbyDZn4QPXbjHup5qZJYYskWZvXALUNz9D62HM7Bgz64ufCXMJPjAqsuAet0T8RB1VgvpUy00Pvmjn4IdP/issbwv8sOGPi7PvwHTgHvPPZG2MH1oYPuNwWfs3cLOZtQy+kIc+9qY6fpjeduAHM7sQOD8s/6v4e9RuwQ/PLcinQJ+QntGe+F6fiPeUmn+0R28zq25mNc1sDH4SnU+CTaYCvzSzLkEv7T34iX0iMrOr8F++BzjnNoSmOefW4u9TvD9oE4PxM7OLine truncated
"text/plain": [
"<Figure size 1152x720 with 1 Axes>"
]
File diff suppressed because it is too large. Load diff
+112 -125
View File
@@ -55,10 +55,10 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Pandas TA - Technical Analysis Indicators - v0.1.93b\n",
"Total Indicators: 116\n",
"Pandas TA - Technical Analysis Indicators - v0.1.99b\n",
"Total Indicators: 119\n",
"Abbreviations:\n",
" aberration, above, above_value, accbands, ad, adosc, adx, amat, ao, aobv, apo, aroon, atr, bbands, below, below_value, bias, bop, brar, cci, cdl_doji, cg, chop, cksp, cmf, cmo, coppock, cross, cross_value, decreasing, dema, donchian, dpo, efi, ema, entropy, eom, er, eri, fisher, fwma, ha, hl2, hlc3, hma, ichimoku, increasing, inertia, kama, kc, kdj, kst, kurtosis, linear_decay, linreg, log_return, long_run, macd, mad, massi, median, mfi, midpoint, midprice, mom, natr, nvi, obv, ohlc4, pdist, percent_return, pgo, ppo, psar, psl, pvi, pvo, pvol, pvt, pwma, qstick, quantile, rma, roc, rsi, rvgi, rvi, short_run, sinwma, skew, slope, sma, squeeze, stdev, stoch, supertrend, swma, t3, tema, trend_return, trima, trix, true_range, tsi, ui, uo, variance, vortex, vp, vwap, vwma, wcp, willr, wma, zlma, zscore\n"
" aberration, above, above_value, accbands, ad, adosc, adx, amat, ao, aobv, apo, aroon, atr, bbands, below, below_value, bias, bop, brar, cci, cdl_doji, cg, chop, cksp, cmf, cmo, coppock, cross, cross_value, decreasing, dema, donchian, dpo, efi, ema, entropy, eom, er, eri, fisher, fwma, ha, hilo, hl2, hlc3, hma, ichimoku, increasing, inertia, kama, kc, kdj, kst, kurtosis, linear_decay, linreg, log_return, long_run, macd, mad, massi, median, mfi, midpoint, midprice, mom, natr, nvi, obv, ohlc4, pdist, percent_return, pgo, ppo, psar, psl, pvi, pvo, pvol, pvt, pwma, qstick, quantile, rma, roc, rsi, rvgi, rvi, short_run, sinwma, skew, slope, sma, smi, squeeze, stdev, stoch, supertrend, swma, t3, tema, trend_return, trima, trix, true_range, tsi, ttm_trend, ui, uo, variance, vortex, vp, vwap, vwma, wcp, willr, wma, zlma, zscore\n"
]
}
],
@@ -189,25 +189,25 @@
"name": "stdout",
"output_type": "stream",
"text": [
"SPY(5236, 7) from 1999-11-01 00:00:00 to 2020-08-21 00:00:00\n",
"SPY(5246, 7) from 1999-11-01 00:00:00 to 2020-09-04 00:00:00\n",
" open high low close adj_close \\\n",
"count 5236.000000 5236.000000 5236.000000 5236.000000 5236.000000 \n",
"mean 162.047332 163.006003 160.983394 162.047209 138.058768 \n",
"std 62.884470 63.069087 62.686417 62.904408 70.362136 \n",
"count 5246.000000 5246.000000 5246.000000 5246.000000 5246.000000 \n",
"mean 162.402863 163.362961 161.334124 162.401883 138.459169 \n",
"std 63.349421 63.536577 63.139261 63.366684 70.889980 \n",
"min 67.950000 70.000000 67.100000 68.110000 53.914200 \n",
"25% 116.395000 117.330000 115.520000 116.497500 87.483525 \n",
"50% 138.190000 139.155000 137.080000 138.035600 106.285500 \n",
"75% 204.350000 205.725000 203.740000 204.630000 184.761700 \n",
"max 339.050000 339.720000 337.550000 339.480000 339.480000 \n",
"25% 116.500000 117.370000 115.565000 116.532500 87.502175 \n",
"50% 138.290000 139.290600 137.214350 138.165000 106.398000 \n",
"75% 204.697500 205.972500 203.897500 204.857700 185.105500 \n",
"max 355.870000 358.750000 353.430000 357.700000 357.700000 \n",
"\n",
" volume \n",
"count 5.236000e+03 \n",
"mean 1.112865e+08 \n",
"std 9.810613e+07 \n",
"count 5.246000e+03 \n",
"mean 1.112121e+08 \n",
"std 9.804044e+07 \n",
"min 6.790000e+04 \n",
"25% 4.756575e+07 \n",
"50% 8.223803e+07 \n",
"75% 1.493255e+08 \n",
"25% 4.757725e+07 \n",
"50% 8.215981e+07 \n",
"75% 1.491426e+08 \n",
"max 8.708580e+08 \n"
]
},
@@ -345,25 +345,25 @@
"name": "stdout",
"output_type": "stream",
"text": [
"SPY(251, 7) from 2019-08-26 00:00:00 to 2020-08-21 00:00:00\n",
"SPY(252, 7) from 2019-09-09 00:00:00 to 2020-09-04 00:00:00\n",
" open high low close adj_close \\\n",
"count 5236.000000 5236.000000 5236.000000 5236.000000 5236.000000 \n",
"mean 162.047332 163.006003 160.983394 162.047209 138.058768 \n",
"std 62.884470 63.069087 62.686417 62.904408 70.362136 \n",
"count 5246.000000 5246.000000 5246.000000 5246.000000 5246.000000 \n",
"mean 162.402863 163.362961 161.334124 162.401883 138.459169 \n",
"std 63.349421 63.536577 63.139261 63.366684 70.889980 \n",
"min 67.950000 70.000000 67.100000 68.110000 53.914200 \n",
"25% 116.395000 117.330000 115.520000 116.497500 87.483525 \n",
"50% 138.190000 139.155000 137.080000 138.035600 106.285500 \n",
"75% 204.350000 205.725000 203.740000 204.630000 184.761700 \n",
"max 339.050000 339.720000 337.550000 339.480000 339.480000 \n",
"25% 116.500000 117.370000 115.565000 116.532500 87.502175 \n",
"50% 138.290000 139.290600 137.214350 138.165000 106.398000 \n",
"75% 204.697500 205.972500 203.897500 204.857700 185.105500 \n",
"max 355.870000 358.750000 353.430000 357.700000 357.700000 \n",
"\n",
" volume \n",
"count 5.236000e+03 \n",
"mean 1.112865e+08 \n",
"std 9.810613e+07 \n",
"count 5.246000e+03 \n",
"mean 1.112121e+08 \n",
"std 9.804044e+07 \n",
"min 6.790000e+04 \n",
"25% 4.756575e+07 \n",
"50% 8.223803e+07 \n",
"75% 1.493255e+08 \n",
"25% 4.757725e+07 \n",
"50% 8.215981e+07 \n",
"75% 1.491426e+08 \n",
"max 8.708580e+08 \n"
]
},
@@ -409,75 +409,67 @@
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2019-08-26</th>\n",
" <td>2019-08-26</td>\n",
" <td>287.27</td>\n",
" <td>288.0000</td>\n",
" <td>285.58</td>\n",
" <td>288.0000</td>\n",
" <td>282.2825</td>\n",
" <td>72620598.0</td>\n",
" <th>2019-09-09</th>\n",
" <td>2019-09-09</td>\n",
" <td>299.14</td>\n",
" <td>299.24</td>\n",
" <td>297.16</td>\n",
" <td>298.20</td>\n",
" <td>292.2800</td>\n",
" <td>51086154.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-27</th>\n",
" <td>2019-08-27</td>\n",
" <td>289.54</td>\n",
" <td>289.9500</td>\n",
" <td>286.03</td>\n",
" <td>286.8700</td>\n",
" <td>281.1749</td>\n",
" <td>68262998.0</td>\n",
" <th>2019-09-10</th>\n",
" <td>2019-09-10</td>\n",
" <td>297.36</td>\n",
" <td>298.20</td>\n",
" <td>295.97</td>\n",
" <td>298.13</td>\n",
" <td>292.2114</td>\n",
" <td>57698673.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-28</th>\n",
" <td>2019-08-28</td>\n",
" <td>286.14</td>\n",
" <td>289.0700</td>\n",
" <td>285.25</td>\n",
" <td>288.8900</td>\n",
" <td>283.1548</td>\n",
" <td>58891544.0</td>\n",
" <th>2019-09-11</th>\n",
" <td>2019-09-11</td>\n",
" <td>298.47</td>\n",
" <td>300.34</td>\n",
" <td>297.75</td>\n",
" <td>300.25</td>\n",
" <td>294.2893</td>\n",
" <td>68008165.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-29</th>\n",
" <td>2019-08-29</td>\n",
" <td>291.72</td>\n",
" <td>293.1600</td>\n",
" <td>290.61</td>\n",
" <td>292.5800</td>\n",
" <td>286.7716</td>\n",
" <td>57998913.0</td>\n",
" <th>2019-09-12</th>\n",
" <td>2019-09-12</td>\n",
" <td>301.25</td>\n",
" <td>302.46</td>\n",
" <td>300.41</td>\n",
" <td>301.29</td>\n",
" <td>295.3086</td>\n",
" <td>72546530.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019-08-30</th>\n",
" <td>2019-08-30</td>\n",
" <td>294.22</td>\n",
" <td>294.2399</td>\n",
" <td>291.42</td>\n",
" <td>292.4527</td>\n",
" <td>286.6468</td>\n",
" <td>62831109.0</td>\n",
" <th>2019-09-13</th>\n",
" <td>2019-09-13</td>\n",
" <td>301.78</td>\n",
" <td>302.17</td>\n",
" <td>300.68</td>\n",
" <td>301.09</td>\n",
" <td>295.1126</td>\n",
" <td>62053458.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" date open high low close adj_close \\\n",
"date \n",
"2019-08-26 2019-08-26 287.27 288.0000 285.58 288.0000 282.2825 \n",
"2019-08-27 2019-08-27 289.54 289.9500 286.03 286.8700 281.1749 \n",
"2019-08-28 2019-08-28 286.14 289.0700 285.25 288.8900 283.1548 \n",
"2019-08-29 2019-08-29 291.72 293.1600 290.61 292.5800 286.7716 \n",
"2019-08-30 2019-08-30 294.22 294.2399 291.42 292.4527 286.6468 \n",
"\n",
" volume \n",
"date \n",
"2019-08-26 72620598.0 \n",
"2019-08-27 68262998.0 \n",
"2019-08-28 58891544.0 \n",
"2019-08-29 57998913.0 \n",
"2019-08-30 62831109.0 "
" date open high low close adj_close volume\n",
"date \n",
"2019-09-09 2019-09-09 299.14 299.24 297.16 298.20 292.2800 51086154.0\n",
"2019-09-10 2019-09-10 297.36 298.20 295.97 298.13 292.2114 57698673.0\n",
"2019-09-11 2019-09-11 298.47 300.34 297.75 300.25 294.2893 68008165.0\n",
"2019-09-12 2019-09-12 301.25 302.46 300.41 301.29 295.3086 72546530.0\n",
"2019-09-13 2019-09-13 301.78 302.17 300.68 301.09 295.1126 62053458.0"
]
},
"execution_count": 7,
@@ -656,7 +648,7 @@
"\n",
" def _attribution(self):\n",
" print(f\"\\nPandas v: {pd.__version__} [pip install pandas] https://github.com/pandas-dev/pandas\")\n",
" print(f\"\\nData from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\")\n",
" print(f\"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\")\n",
" print(f\"Technical Analysis with Pandas TA v: {ta.version} [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\")\n",
" print(f\"Charts by Matplotlib Finance v: {mpf.__version__} [pip install mplfinance] https://github.com/matplotlib/mplfinance\\n\")\n",
"\n",
@@ -953,7 +945,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[i] Loaded SPY(5236, 34)\n",
"[i] Loaded SPY(5246, 34)\n",
"[+] Strategy: Common Price and Volume SMAs\n",
"[i] Indicator arguments: {'append': True}\n",
"[i] Total indicators: 5\n",
@@ -962,7 +954,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1200x1000 with 10 Axes>"
]
@@ -970,28 +962,27 @@
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<__main__.Chart at 0x10b693910>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
"\n",
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
"Technical Analysis with Pandas TA v: 0.1.93b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Technical Analysis with Pandas TA v: 0.1.99b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
"\n"
]
},
{
"data": {
"text/plain": [
"<__main__.Chart at 0x1107d1d00>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
@@ -1055,7 +1046,7 @@
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x119ed94c0>"
"<matplotlib.axes._subplots.AxesSubplot at 0x1135e8550>"
]
},
"execution_count": 13,
@@ -1064,7 +1055,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1600x325 with 1 Axes>"
]
@@ -1096,7 +1087,7 @@
{
"data": {
"text/plain": [
"<matplotlib.lines.Line2D at 0x11a3b0fd0>"
"<matplotlib.lines.Line2D at 0x113aff5e0>"
]
},
"execution_count": 14,
@@ -1105,7 +1096,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1600x325 with 1 Axes>"
]
@@ -1135,7 +1126,7 @@
{
"data": {
"text/plain": [
"<matplotlib.lines.Line2D at 0x119ee3d00>"
"<matplotlib.lines.Line2D at 0x1107d1970>"
]
},
"execution_count": 15,
@@ -1144,7 +1135,7 @@
},
{
"data": {
"image/png": "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 truncated
"image/png": "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 truncated
"text/plain": [
"<Figure size 1600x325 with 1 Axes>"
]
@@ -1168,7 +1159,7 @@
{
"data": {
"text/plain": [
"<matplotlib.lines.Line2D at 0x11729f910>"
"<matplotlib.lines.Line2D at 0x110912040>"
]
},
"execution_count": 16,
@@ -1177,7 +1168,7 @@
},
{
"data": {
"image/png": "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+fJltGrVSl42b948hIaG4oknnsCBAwewePFizJw5E8nJyQCA1NRUpKam1rnucePGAQBWr15tstxgMGDNmjXo378/WrduDQD49ttvAQDjx4+3uK6AgADcfffdOHXqVK3jHjaFnJwcjBs3DhEREVixYoXVsY3qUlBQgNzcXPzxxx+YOHEiAJgct0OHDgEAbrrpJpPH9ezZE0qlUr7fkieeeAKzZ88GUDUe5MqVK/HCCy/I91dWVmLo0KEICwvD22+/jdGjR0MIgZEjR2LBggW444478O6776JDhw549tlnMWPGDLNt7Nq1C8888wwmTJiAl156CWlpabjrrruwePFiLFq0CFOmTMGzzz6LvXv34tFHH23QMRJCICcnByEhIfKyrKws5Obmmh0XAOjdu3etx8UarVYLAPD29ja7z9vbG4cOHYLRaKx1HYcOHYKvry86depkFpN0v2TQoEHYtm0b3n//fVy4cAGnTp3C1KlTUVJSgqeeeqre8QOWj1VpaSl+//139OrVC7Nnz0ZAQADUajXi4+OxZs2aOtdp7RyMiopCTEyMyT4dOnQIPXr0gFJp+tGwd+/eKC8vNxkTbtasWejUqROysrJMHm/L8avv82/p9cjWWOuz/zUNGDAATz75JABg9uzZWLlyJVauXCnv30svvYSpU6ciKioK77zzDkaPHo2PP/4YQ4YMgV6vt7pea3it2I7XSvO6VgDgwIED0Ol06NGjR63tJFevXgUAk+dQ8vLLL0OtVsPLywu9evXC9u3bbVpnbXr27Injx4+jtLS00esiInIF7s4OgIiIrJs5cyaGDRuGbt26oXfv3ujfvz9SU1MxePBgeHh4mLXX6/XygPRXrlzBvHnzkJOTg+nTp8tt/P39sWjRItx3330YMmQI4uLiGjTQd2JiInr16oWvv/4ab731lvxFZOfOncjNzcXcuXPltidPnkRAQECtk3F07doVQNXA7e3atat3PLYwGo3yQPA//vijxS8ptoqOjpa/dLdq1QqLFi3C7bffLt+fnZ0NNzc3hIWFmTxOpVKhVatWtU4a069fP2i1Wrz++uvo378/7rvvPpP7tVotxowZg3nz5snLNm3ahJ9++gmvvvqqnFScOnUqxowZg4ULF2LatGlISEiQ258+fRqnTp1CmzZtAABBQUF44okn8OqrryI9PR1+fn4AqhK/8+bNw4ULF+S2tvriiy+QlZWFV155xeS4AEBkZKRZ+8jISBQWFkKr1cLT09Pm7SQmJkKhUGD37t1y0lbaR2nQ/6KiIpOEeU3Z2dnyJBA1YwJg8nwtWrQI+fn5ePLJJ+VkUkhICH788Uf069fP5rirs3Sszp49CyEEvvrqK7i7u+Ott95CQEAAFi5ciPvLine truncated
"image/png": "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rYWrq6s4d+6cXK60tFR069ZNqFQq8corr4jPPvtMPPzwwwKAmDdvnll1mXv9V+f+VZtjEkKILVu2CIVCIe677z6xbNkyMWnSJGFnZyeee+45s46pOm019/hNeemll0TLli0Ntn366afCyclJPProo2Lx4sXiv//9r+jQoYMAIL766iuDssuXLxcAxNtvv230el32Hv7zzz8LBwcH8fDDD4v//ve/YvHixeK+++4TAMSbb75p1K5XX31VhIaGCr1eb9ZxEBGREAwUEhE1YA899JDw8fERN27cMHosLS3N4PfQ0FDRv39/g22pqanC2dlZfvP+559/Cjs7OzFz5ky5TG5urggMDBRdunQROp3O7LaFh4eLyMjICh/bv3+/wYfx4uJi0bZtW6HRaMSBAwcMypaWloqRI0cKAOLbb7+Vt9dFoLAys2bNEgDEhx9+WOt9/fXXXwKAeO+99+RtBQUFwtvb2+hvMmbMGOHs7CyysrIq3eeePXsEALF27doq68/Ly6tZw+vQvn37jD54njt3TqjVajFmzBiD7c8//7xwcnISiYmJ8rYdO3YIAOLzzz83KCsFaTIyMkwGCouKioSHh4e45557DD4M/vzzzwKA+OSTT6psf3JysnBwcBATJ06Ut+n1etGjRw8RHBwsSktLhRBCXL16Vdjb24uxY8caPP/TTz8VAMTGjRurrOvgwYNGfVur1YoWLVqIrl27ytsOHTokAIg33njD4PlTp04VCoVCxMXFVVpPdfrgggULBABx6NAheVt8fLxQKpUG94vaHpMQQjz44IMiICBA5OTkyNtiY2MFALFt27Yq6zK3rbW9BusrULhnzx6je610vc+aNctgu7nnqrCwUA4yHj582GSgsDH1XyGE+O6774zug+np6cLDw0M8+uij8jbpy64vv/zS4PlDhw4Vjo6ORq+X5Zl7/QtRvftXbY5JCCFat24toqOjRUlJibxt1qxZQqFQiPj4+CrrMret1Tn+ihQXF4smTZqI119/3WD7qVOnREZGhsG2wsJCERkZKYKDgw22S4HCw4cPV1rXxYsXxeXLlw226fV6cf/99wu1Wm30eii9Pv/666+V7peIiP7FQCERUQPWqlUrce+995pVtqJAoRBC3HnnncLBwUH+/YUXXhAODg7i77//FkIIMXnyZGFvby9OnDghhBAiISFBJCQkVFnf7NmzBQBx5MgRo8defPFFoVAo5A8na9askTMFKpKdnS08PDwMAo/1GSjcuXOnsLOzEw899FCdZBlcv35dABAzZsyQt23evFkAEJs3bzYoKwVRV61aZXJ/UtZN2Z+ePXvKjzk7O4uEhATx4IMPChcXF/Hwww8LIW4FDKdMmSKCg4OFSqUSLVu2FAsXLjQ6RgBi4sSJ4vvvvxdRUVHC0dFRdOnSRe4D//vf/0SLFi2EWq0WPXv2rFWgpEOHDqJDhw4G23x9fcXw4cONyrZs2VL06tWrwv1UFig8cuSIyYxYFxcX0a1btyrbuWTJEgFAvi4kq1evFgDkTKkffvihwr+r1L7Ro0dXWdf06dOFUqk0CP4IIcS7774rAIgrV64IIYT48MMPK2yTFAh67bXXKq2nOn2wU6dOolOnTkb7qCh7OTEx0ShIYe4x5eTkCHt7ezF9+nSDckVFRcLFxUU8/fTTBtvj4+MNghzVaWttrkHp/lb+R7oWSkpKxNtvvy3CwsKESqUSoaGhYubMmaKwsNDkPqvi5eUlhgwZIv9e3XMlqSxQ2Jj6rxBCDB8+XPj5+RkFVidMmCA0Go18vidNmiQAiPz8fINya9euFQDEsmXLKq3H3OtfiOrdvyp6PTX3mP7+++8K72spKSkCgJg7d668rbi4WMTHx4urV68alDW3rdU5/ors2rVLABC//fZbpeUkU6ZMEQBEbm6uvK1soDA3N7fK4GR5n3zyiQAgv46V5eXlJSZPnlyt/RER2TLOUUhE1ICFhobiyJEjOHXqVI2eX1JSgqSkJHh7e8vb3nvvPfj4+ODZZ5/FkSNHsGTJEkybNg3t2rUDAPTq1Qu9evWqct9jxowBAKxevdpgu06nw/fff48ePXogJCQEAPDzzz8DAB5//PEK9+Xu7o6HH34YZ86cqXTew7qQlpaGMWPGwN/fHytXroRCoajRfjIzM5Geno6//voLTz75JAAYnLdjx44BAO68806D53Xs2BF2dnby4xV59tln5XmeJk+ejFWrVmHWrFny46Wlpejbty98fX3xwQcfYOjQoRBCYNCgQVi0aBH69euHjz76CK1atcL06dMxZcoUozr27t2LqVOnYty4cZgzZw7i4+MxYMAALFmyBJ988gleeOEFTJ8+HX/++SeeeuqpGp0jIQTS0tLQpEkTeVtKSgrS09ONzgsA3HXXXZWeF1OkieqdnJyMHnNycsKxY8eg1+sr3cexY8fg7OyMqKgoozZJj1dWl0ajAQAcOXKkyvYeO3YMLVu2hJubW4V1SYvW1LYuc/ugXq/HiRMnTP5NLly4gJs3b8rbHn/8caPzZO4xnTx5EqWlpUZ1qVQqxMTEGP39o6KiDO4b1Wlrba7BIUOG4NFHHwULine truncated
"text/plain": [
"<Figure size 1600x325 with 1 Axes>"
]
@@ -1225,7 +1216,7 @@
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAANgCAYAAABgMtJKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3wVVfrH8c/cuSmQQELvvReJNBsYaYqAqIgIguCqsAq6Litrw5XI/izsYlfEBoorAiICgigKJIaiUsTQpNfQIRBIAknuzPz+iLkkpDeSwPf9evEid+bMzDOEIYdnznmO4TiOg4iIiIiIiIiISD65ijsAEREREREREREp3ZRgEhERERERERGRAlGCSURERERERERECkQJJhERERERERERKRAlmEREREREREREpECUYBIRERERERERkQJRgklERERERERERApECSYRERERERERESkQJZhERERERERERKRAlGASEREREREREZECUYJJRETkCvL1119z2223UaNGDXx9fSlXrhx169bluuuuY8SIEXzwwQfp2nfp0gXDMDL8Mk2T4OBgrrnmGsaPH8+pU6e8x/Tq1Std248++ijTWIYMGZKu3YQJE4r03kVERESk6BiO4zjFHYSIiIgUveHDhzNlypRs2wQFBXH69Gnv5y5duvDTTz/leO7q1auzdOlSWrZsyaFDh2jdurU36VS+fHk2bdpEnTp1vO3nz5/PnXfe6f18ww03sHz5clwuvfsSERERKY2UYBIREbkC/PDDD/Ts2dP7uW3btvTs2ZOgoCBiYmLYuHEjK1aswDTNbBNMEydOBODMmTPMnz+fDRs2ePe1b9+etWvXAjBjxgwGDx7s3dezZ0++//57AGJiYmjVqhVHjhwBICAggKioKBo1alQEdy4iIiIil4K7uAMQERGRopea3AFo1KgRa9aswTTNdG2Sk5NZtmxZtuf55z//6f167NixtGzZkj179gCwbt069uzZQ4MGDbj33nuZO3cus2fPBmDx4sVMmTKFhx56iMcff9ybXIKUpJWSSyIiIiKlm8ahi4iIXAEsy/J+ffr0aXbv3p2hjY+PT7pRTjnx9/enffv26bYdPnzY+/XkyZOpXr269/OYMWN47733mD59undbz549GTlyZK6vKSIiIiIlkxJMIiIiV4B27dp5vz558iTNmjUjJCSEhx56iHfffZeoqKg8n/P8+fOsW7cu3bYaNWp4v65UqRIff/yx93NsbCyPPvqo93OFChVyrAklIiIiIqWDajCJiIhcATweD507d+bXX3/Nsk2zZs2YMGFCuuLb+a3BlNaIESPSJZpSTZ8+PV2dJhEREREpvZRgEhERuULEx8czceJEpkyZQnR0dKZtDMNg/vz59O3bF8j9KnJVq1Zl6dKltG7dOsO+uLg42rRp463VBDBgwAC+/PLLfN6JiIiIiJQ0miInIiJyhQgICOCFF17gwIEDbNu2jc8++4yHH36YqlWrets4jsPrr7+e47kMw6B8+fJ06NCBcePGsWXLlkyTSwCBgYEMHTo03TbVXRIRERG5vGgVORERkStQ06ZNadq0KUOHDmXixIk0b96cQ4cOAbBv374sj8vvwGfDMLL9LCIiIiKlmxJMIiIiV4Bp06YRHx/P4MGDCQ4OTrfPz88PX19f7+dKlSpd6vBEREREpJRTgklEROQKsGfPHsaPH8/o0aPp1KkTbdu2pUqVKpw9e5Zvv/2WvXv3etv27t27+AIVERERkVJJCSYREZErSHJyMhEREURERGS6v0OHDvzzn/+8tEGJiIiISKmnBJOIiMgVYPTo0YSEhBAREcGaNWs4cuQIx44dIykpiQoVKtCqVSv69+/PiBEj0k2XExERERHJDcPJb7VOERERERERERERwFXcAYiIiIiIiIiISOmmBJOIiIiIiIiIiBSIEkwiIiIiIiIiIlIgSjCJiIiIiIiIiEiBKMEkIiIiIiIiIiIFogSTiIiIiIiIiIgUiLu4A7gUbNv2fm0YRjFGIiIiIiIiIiIlmeM43q9dLo3Lya0rIsEEcPbs2eIOQURERERERERKiXLlyuWq3ZQpU5g6dSoHDhwAoHnz5jz55JPcfPPN6do5jsOAAQNYunQpn3/+OX369PHuO3DgAGPGjGHFihUEBAQwaNAgwsLCcLtLT9qm9ERaCHx8fNi5cydNmjTBNM3iDkek1LAsix07dujZEckHPT8i+aNnRyT/9PyI5E/qs9O4cWOSk5NzfVzNmjUJCwujUaNGOI7DjBkzGDJkCD/99BMtWrTwtps8eXKms6osy2LgwIFUq1aNxYsXc+TIEUaOHImPjw/jxo0rlHu7FK6IBFPqN9AwDBzHwTAMTZUTyQM9OyL5p+dHJH/07Ijkn54fkfxJ++ykfs6NXr16pfv8/PPPM3XqVNauXetNMG3cuJFJkyaxbNkymjdvnq79smXL2LZtG/PmzaNq1apcddVVjB07lhdeeIFnnnkGX1/fQri7ondFJJhSWZaV7ncRyR09OyL5p+dHJH/07Ijkn54fkfy5+Nk5c+ZMuiSTn58ffn5+OZ5j3rx5JCQk0LFjRwASEhIYMWIEEydOpFq1ahmOWbNmDS1btqRq1arebd27d2fMmDFs3bqVNm3aFPjeLoUrKsG0e/duAHbu3FnMkYiUTnp2RPJPz49I/ujZEck/PT8i+bN7927q1atH69atiYuL825/+umneeaZZzI9ZvPmzfTs2ZPz588TEBDA//73P+9IpbFjx3LNNdfQu3fvTI89duxYuuQSQJUqVQA4evRoYdzSJXFFJZgaNmzIrl27aNy4seYii+SBZVns3LlTz45IPuj5EckfPTsi+afnR4pLREQEXbp0yff+4pb67DRs2BDLsti0aVOGEUxZadKkCZGRkZw5c4b58+czatQoFi5cyO7du1m+fDk//fTTpbiFYnVFJZhS/3E1TVP/0Irkg54dkfzT8yOSP3p2RPJPz49capGRkXTv3j3TfSGRYQRujyHOJ5Ko0PGXOLK8MU0Ty7IoX758rusw+fr60rBhQwCuvvpq1q9fz/vvv0+ZMmXYs2cP9evXT9d+2LBhXH/99SxcuJCqVauybt26dPuPHz8OkOmUupLKVdwBiIiISMkTHh5e3CGIiIhICXZxX8EcOIhum7dgDhyUafuTSXFEN/XnZFJcpvsvN7Ztk5SUxOjRo1mxYgWRkZHeXwAvv/wykyZNAqBjx45s2bLFm1SClD/fcuXK0axZs2KJPz+UYBIREZEMIiIiijsEERERKcEy9BViY+mWcA5iY72brpQXVuPHj2flypXs37+fzZs3M378eFasWMGAAQOoVq0aLVu2TPcLoHbt2tSrVw+Abt260axZMx555BE2btzI0qVLeemllxg+fHiORcVLEiWYREREJFeulE6iiIiIZC8kMowl1WOovWQMIZFhWba7Ul5YnThxgpEjR9KxY0fuvPNO1q9fz5w5c+jatWuujjdNk5kzZ+JyuejZsycPP/wwgwYNYuzYsUUceeG6omowiYiISM5CIsMIrB7DvMiwdDUSIiIict1REhERkZItPDw83c/1iz/n1D4nWfUnLkfvvPNOntqfOnUqw7a6desye/bswgqpWGgEk4iIyBUgL6OPrrQaCSIiIleii0cX5TTaKO3+qNDx9DhSkeger2WZPFJ/4sqjBJOIiMgV4OJOY3YJp0q+gdTefp5KvoFAStFO89Ze2RbuFBERkcuXMfsrau3bhzH7q3yf4+L+hVx+lGASERG5DGWXQJq8N5x3Vs5l8t7wTNtHhY7nxeZ3XXgjGRsLLjND4U4REREpPQpSS9EZcDcH69XDGXB3vs/xY/tHGVSz6WU/Xe5KpgSTiIjIZSYkMox/bf06y6KbI+t35arkCoysf6GOwsUjnFRrSURE5PKS9md9apHu7Ap05zkhFRTEsrJlICgo3ebk+GM8uOBBGr7bkNf2vUaylZy380qpoQSTiIjIZSBtJ/Dimge56URmKygIbCvTTqOIiIiUPrmpj5TXFeCsWTNZ1qol1qyZJFvJnD+5nRObv+TU5ll8vvFzkqwkapevzeG4wwWMXkoqJZhEREQuA2k7gRfXOMipE5lTAsqaNRPr+++8nUYREREpXcyBg7KtpXhxXyCzvkGXLl1yvE488by84mWaTGrCmV2LSY47DIaLwa0Hs/IvK1nxlxXUDapbKPckJY+7uAMQERGRwhUVOp5wK5yuoYU3zc2yLRycQjufiIiIXEKxsXRzmWBbuWp+MimO0039sdK8nLp4+nzahNNvh3/j3bXvMst/FsmRKVPgXD5lKVv1KvyqtOLT3u8X/B6kxNMIJhERkVIus7eSOdVQStspTF1q+OKim4meROb8MYc7v7yTwP8E8h/f/1D5tcrUf7s+V31wFW/++iaOo6STiIhIaXdxXyA3K751Du3MrM2zuOmzm7juk+v4fOPnJDvJXFPzGqbdMY1KIX+hXO3rMH0DLtVtSDHTCCYREZHSLo9vJSH7BNSBMwd49edXmbl5JqfOn7qww4AziWc4k3gG4uCppU+x+9Ru3rjlDUyXWZA7EBERkRIkKnQ8YUvDGD8y8xXf5m2bx+jFozkUdwgAH5cPA1oO4NEOj9KxZkcAnjy89pLFKyWDEkwiIiKXuUq+gQRujiGuVcUc264+uJq7Zt/FsYRjANQuV5shVw3h3lb3MuXdKTzy90eIT45n6Z6ljF02lvd/e5+j8UeZdsc0/N3+RX0rIiIikkvh4eF5WhU2NzWWbMfmxeUv8uKKFwGoHlCdEe1GMKLtCKoHVs9vqHKZUIJJRETkMpfbmkxz/pjDAwse4LznPG2qtmFC9wl0rdfVOzopkECaVGwCQPvHJxBfrj3/rf8bc7fN5cSME8wZMIdg/+Aivx8RERHJWkhkGCeT4qi3I4k4MyLDFHjI/OVTdjWWAOKS4njgmweYv30+AI93fJyLine truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAANeCAYAAABeQrSXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3gWVdrH8e/MPEkoIQEivXcEJBRREReT0LGxioBiAZQVVGxYeFk0ZlXEZdd1FxFsIKIColLEgpSEgEovUgxIFZAekhBCSDIz7x+RhwQSSIMk5Pe5rlw+z8yZmXu4MnK455z7GK7ruoiIiIiIiIiIiOSRWdgBiIiIiIiIiIhI8aYEk4iIiIiIiIiI5IsSTCIiIiIiIiIiki9KMImIiIiIiIiISL4owSQiIiIiIiIiIvmiBJOIiIiIiIiIiOSLEkwiIiIiIiIiIpIvSjCJiIiIiIiIiEi+KMEkIiIiIiIiIiL5ogSTiIiIiIiIiIjkixJMIiIiJchXX33FrbfeSrVq1fD19aVcuXLUrl2bG264gcGDB/Puu+9mah8SEoJhGOf9WJZF+fLlue6664iIiOD48ePeY3r06JGp7fvvv59lLP3798/UbsyYMZf03kVERETk0jFc13ULOwgRERG59B5++GE+/PDDC7YJDAwkLi7O+z0kJIQlS5Zc9NxVq1Zl0aJFNGvWjD/++IMWLVp4k04BAQFs2rSJWrVqedvPmTOHXr16eb/feOONLF26FNPUuy8RERGR4kgJJhERkRLghx9+oFu3bt7vrVu3plu3bgQGBhIbG8vGjRtZtmwZlmVdMME0duxYABISEpgzZw6//PKLd1/btm1ZvXo1ANOmTePee+/17uvWrRvff/89ALGxsTRv3pyDBw8CULZsWTZs2ECDBg0uwZ2LiIiIyOXgKewARERE5NI7k9wBaNCgAatWrcKyrExtUlNTWbx48QXP8+yzz3o/jxw5kmbNmrFr1y4A1qxZw65du6hXrx733HMPs2bNYubMmQDMnz+fDz/8kIceeognnnjCm1yC9KSVkksiIiIixZvGoYuIiJQAtm17P8fFxbFz587z2vj4+GQa5XQxpUqVom3btpm2HThwwPt5woQJVK1a1ft9+PDhvPPOO3z66afebd26dWPo0KE5vqaIiIiIFE1KMImIiJQAbdq08X4+duwYTZo0ITg4mIceeoi3336bDRs25PqcycnJrFmzJtO2atWqeT8HBQXxwQcfeL/Hx8fz2GOPeb9XqFDhojWhRERERKR4UA0mERGREiAtLY2bbrqJFStWZNumSZMmjBkzJlPx7bzWYMpo8ODBmRJNZ3z66aeZ6jSJiIiISPGlBJOIiEgJcfLkScaOHcuHH37Ivn37smxjGAZz5szhtttuA3K+ilzlypVZtGgRLVq0OG9fYmIiLVu29NZqArj77rv5/PPP83gnIiIiIlLUaIqciIhICVG2bFlefvll9u7dy9atW/n444955JFHqFy5sreN67q8+eabFz2XYRgEBARw7bXX8tJLL7Fly5Ysk0sA/v7+3H///Zm2qe6SiIiIyJVFq8iJiIiUQI0bN6Zx48bcf//9jB07lqZNm/LHH38AsGfPnmyPy+vAZ8MwLvhdRERERIo3JZhERERKgClTpnDy5Enuvfdeypcvn2mfn58fvr6+3u9BQUGXOzwRERERKeaUYBIRESkBdu3aRUREBE899RQdOnSgdevWVKpUiRMnTvDNN9+we/dub9uePXsWXqAiIiIiUiwpwSQiIlKCpKamEhUVRVRUVJb7r732Wp599tnLG5SIiIiIFHtKMImIiJQATz31FMHBwURFRbFq1SoOHjzI4cOHSUlJoUKFCjRv3py77rqLwYMHZ5ouJyIiIiKSE4ab12qdIiIiIiIiIiIigFnYAYiIiIiIiIiISPGmBJOIiIiIiIiIiOSLEkwiIiIiIiIiIpIvSjCJiIiIiIiIiEi+KMEkIiIiIiIiIpJHH374IR06dKB27drUrl2brl27smDBgkxtVq5cye23306NGjWoXbs2PXv25NSpU979x48fZ/DgwdSuXZs6deowbNgwEhMTL/et5ItWkRMRERERERERyaPvvvsOy7Jo0KABrusybdo0xo0bx5IlS7j66qtZuXIlvXv35umnn6Z79+54PB42bdpEz5498fPzA6B3794cOnSI//znP6SmpvL444/TunVrPvjgg0K+u5xTgklEREREREREpADVq1ePf/zjH9x///106dKFkJAQ/v73v2fZduvWrdxwww0sXryY1q1bA7Bw4UL69OnD5s2bqVat2uUMPc88hR3A5eA4jvezYRiFGImIiIiIiIiIFGWu63L69GlSUlIy5RD8/Py8I46yY9s2s2fPJikpiXbt2nHkyBFWr17N3XffTdeuXdm9ezeNGjVi1KhRtG/fHoBVq1YRGBjoTS4BhISEYJoma9as4dZbb700N1rASkSCCeDEiROFHYKIiIiIiIiIFBPXX389hw4d8n5/4YUXGDFiRJZtN2/eTLdu3UhOTqZs2bJMnTqVpk2bsmrVKgDGjBnDK6+8wjXXXMP06dPp1asXP/30Ew0aNODQoUNUqlQp0/k8Hg8VKlTIdP2irsQkmABM02TXrl3Ur18fy7IKOxyRYsG2bXbu3KnnRiSX9OyI5I2eHZG80bMjknvZPTeu65KamsqKFSvOG8GUnUaNGhEdHU1CQgJz5szh0UcfZd68ed4ZVQMGDKB///4AtGzZkiVLlvDJJ58QHh5+ie7u8isRCaYzvxAejwfXdfF4PPqfrkgOGYah50YkD/TsiOSNnh2RvNGzI5J72T03ZxJMAQEBOS6z4+vrS/369QFo1aoV69atY+LEiTz99NMANGnSJFP7Jk2asG/fPgCqVKnCkSNHMu1PS0vj+PHjVKlSJc/3d7mZhR2AiIiIiIiIiMiVxHEcUlJSqF27NtWqVWP79u2Z9m/fvp1atWoB0K5dO+Lj41m/fr13f3R0NI7j0LZt28sad36UiBFMIiIiIiIiInJpRUZGEhoaWthhXHYRERF07tyZWrVqceLECb744guWLVvGl19+iWEYDBs2jNdff50WLVpwzTXXMG3aNH777TemTJkCpI9m6tSpE08++SRvvvkmqampPP/889x5553FZgU5UIJJRERERERERApAVFRUiUwwHT16lKFDh3Lo0CECAgJo3rw5X375pffPYujQoSQnJzNy5Eji4uJo3rw5X331FfXq1fOe4/333+e5556jV69eGIbB7bffzpgxYwrrlvJECSYRERERERERkTwaN27cRds8/fTT3npMWalQoQIffPBBQYZ12akGk4iIiIiIiIiI5IsSTCIiIiIiIiKSL8HR4SysGktwdHhhhyKFRFPkRERERERERCRfjqUkEte4FHZKYmGHIoVEI5hERERERERERCRflGASEREREREREZF8UYJJRERERERERApcZGRkYYcgl5ESTCIiIiIiIiJS4KKiogo7BLmMlGASERERERERkQJl9e1H2OYtWH37FXYocploFTkRERERERERKVjx8YSZFjh2YUcil4lGMImIiIiIiIiISL4owSQiIiIiIiIiIvmiBJOIiIiIiIiI5EuQrz81tyUT5Otf2KFIIVGCSURERERERETyZUPHCDofrMiGjhGFHYoUEiWYREREREREREQkX5RgEhERERERERGRfFGCSURERERERETyLSQkpLBDkEKkBJOIiIiIiIiI5FtoaGhhhyCFSAkmEREREREREcm1yMjIwg5BihBPYQcgIiIiIiIiIsVLcHQ4/jGxJFpRWjlOACWYRERERERERCSXjqUkEte4FHZKYmGHIkWEpsiJiIiIiIiIiEi+KMEkIiIiIiIiIiL5ogSTiIiIiIiIiFyUinrLhSjBJCIiIiIiIiIXFRUVVdghSBGmIt8iIiIiIiIi4hUcHc6xP4t3B/n6a5U4yRGNYBIRERERERERr2MpiViGiWWY6Z/79sPq3oOwzVuw+vYD0hNPNbclE+TrX8jRSlGhBJOIiIiIiIhICXfB+krx8WBahCWdSv8MbOgYQeeDFTW6SbyUYBIREREREREp4VRfSfJLCSYRERERERER8Toz/c12nfQpcIGB4NgsLlM6/bNIFlTkW0RERERERES8NnSMIHxROBFD06e/2R3TtzuRkdihod52ISEhhRCdFFUawSQiIiIiIiIiFxWaIbmU1Xcp2ZRgEhERERERESnBrL79Mq0QV5DirTS+3f4tIxaPoNPUTqTaqQV+DSkaNEVORERERERERDLJz/S3E6dPMK72Tr4OOsY6/wScz5d49609uJbra1xfABFKUaMRTCIiIiIiIiIlTGRkpPezPWM6i5s3w54x3bstL9PfbMdm8vrJNJvYjJfr7mJNuQQcAxpUaMDA4IE81/A5GlZoWCDxS9GjEUwiIiIiIiIiJUhwdDj+MbEkWlFs6BhRIOdc+vtSnlnwDBsObQCg4anS/N/e+nSJLU/VuenJrPDwcIL6BBXI9aToUYJJREREREREpAQ5lpJIXONS2CmJBXK+n/f9TJdPu+C4DoF+gYz6yygeD/8WX8MHHBu7QK4iRZ0STCIiIiIiIiKSJ2lOGo9//ziO63BLo1t4/5b3uarMVVju92AUdnRyOakGk4iIiIiIiIjkyfjV49l4eCMVS1f0JpekZFKCSURERERERKSEy8uqcfsS9hERnV7DaXToaCWXSjglmERERERERERKuLysGvfcwudITEnkhho3MCB4wAXbWn37EbZ5C1bffnmMUIo61WASERERERERkVz5YecPfBnzJZZhMa77OEzjIuNX4uMJMy1wVPL7SqURTCIiIiIiIiKSY6dST/Hk/CcBeLzd4wRXCT6/UWAgi8uUhsDAyxydFBYlmEREREREREQkR2zHZuDXA9lxfAfV/avz0l9eyrrdjOksbt4Me8bLine truncated
"text/plain": [
"<Figure size 1200x1000 with 8 Axes>"
]
@@ -1239,9 +1230,8 @@
"text": [
"\n",
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
"\n",
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
"Technical Analysis with Pandas TA v: 0.1.93b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Technical Analysis with Pandas TA v: 0.1.99b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
"\n"
]
@@ -1249,7 +1239,7 @@
{
"data": {
"text/plain": [
"<__main__.Chart at 0x11ae46430>"
"<__main__.Chart at 0x11005d820>"
]
},
"execution_count": 18,
@@ -1278,7 +1268,7 @@
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIYAAANgCAYAAABZVWMRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3wVxf7/8dfuniRAAgFCl957BKUJIk0RQVSKINgVkavXC6JXf7aIXdGvXhUQr+i1IB0pgqBAQgBFARGREnoHKSGBkECS3f39ccghgYRUUuD9fDx4cM7u7JzZwHKGz3xmxnBd10VERERERERERK44ZkE3QERERERERERECoYCQyIiIiIiIiIiVygFhkRERERERERErlAKDImIiIiIiIiIXKEUGBIRERERERERuUIpMCQiIiIiIiIicoVSYEhERERERERE5AqlwJCIiIiIiIiIyBVKgSERERERERERkSuUAkMiIiIiIiIiIlcoBYZEREQuEzNnzqRXr15UrlwZf39/SpYsSfXq1Wnbti1Dhgxh/Pjxacp36tQJwzAu+GVZFqVLl6Z169aMGjWK48eP+67p0aNHmrL//e9/023L4MGD05R76623Lum9i4iIiEjOGK7rugXdCBEREcmdhx9+mAkTJly0THBwMDExMb73nTp1YunSpZnWXalSJRYvXkzjxo05cOAATZs29QWLSpUqxV9//UW1atV85WfPns3tt9/ue3/dddexbNkyTFPjUSIiIiKFjQJDIiIiRdyPP/5I9+7dfe9btGhB9+7dCQ4OJjo6mvXr17N8+XIsy7poYGj06NEAnDhxgtmzZ/Pnn3/6zl1zzTWsXr0agEmTJjFo0CDfue7du7NgwQIAoqOjadKkCYcOHQIgMDCQdevWUadOnUtw5yIiIiKSW56CboCIiIjkTkpQBqBOnTqsWrUKy7LSlElKSmLJkiUXreepp57yvX7uuedo3LgxO3fuBGDNmjXs3LmTWrVqcdddd/Hdd98xbdo0ABYuXMiECRN46KGHeOKJJ3xBIfAGmxQUEhERESm8lNMtIiJSxNm27XsdExPDjh07Lijj5+eXJqsoM8WKFeOaa65Jc+zgwYO+1+PGjaNSpUq+9yNHjmTs2LFMnDjRd6x79+4MGzYsy58pIiIiIvlPgSEREZEirmXLlr7Xx44d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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAABIYAAANeCAYAAABnJQXMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3gVVf7H8ffM3BQgECHSpHekhW7BxVCkKQgKggUVlFWwsrgrYImxrasu+FvFBogdEBEQEZCSEBGlF0F6kRpAAoGQhOTOzO+PwIVAQgoJCcnn9Tw83nvmzJnvSAYO3znFcF3XRUREREREREREihwzvwMQEREREREREZH8ocSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIiIiIiIiEgRpcSQiIhIIfHdd99x2223UbFiRfz9/SlZsiRVq1bl+uuvZ9CgQXz00Udp6oeFhWEYxgW/LMviqquuonXr1kRERHD06FHfOV27dk1Td+zYsenGcu+996ap98Ybb+TpvYuIiIhIzhiu67r5HYSIiIhcmocffpjx48dftE5wcDDHjh3zfQ8LC2PRokWZtl2hQgUWLFhAgwYN2L9/P40aNfIli0qVKsX69eupUqWKr/6MGTPo2bOn7/uNN97Izz//jGnqfZSIiIhIQaPEkIiIyBXup59+onPnzr7vzZo1o3PnzgQHBxMbG8vvv//O4sWLsSzroomht956C4Djx48zY8YM1q1b5zvWokULVqxYAcDEiRO55557fMc6d+7MnDlzAIiNjaVhw4bExMQAUKJECdauXUutWrXy4M5FRERE5FJ58jsAERERuTRnkjIAtWrVYvny5ViWlaZOSkoKCxcuvGg7zzzzjO/zyJEjadCgATt37gRg5cqV7Ny5kxo1anD33Xczbdo0pkyZAsDcuXMZP348Dz30EE8++aQvKQSpySYlhUREREQKLo3pFhERucLZtu37fOzYMXbs2HFBHT8/vzSjijITGBhIixYt0pQdOHDA9/mDDz6gQoUKvu/Dhg3j/fff56uvvvKVde7cmcGDB2f5miIiIiJy+SkxJCIicoVr3ry57/ORI0eoV68eoaGhPPTQQ7z33nusXbs2220mJSWxcuXKNGUVK1b0fQ4JCWHcuHG+73FxcTz22GO+76VLl850zSMRERERyX9aY0hEROQK5/V6uemmm1i6dGmGderVq8cbb7yRZlHonK4xdK5BgwalSRCd8dVXX6VZh0hERERECiYlhkRERAqBkydP8tZbbzF+/Hj27t2bbh3DMJgxYwbdu3cHsr4rWbly5ViwYAGNGjW64Fh8fDxNmjTxrUUE0KdPH7755psc3omIiIiIXE6aSiYiIlIIlChRgpdeeok9e/awefNmPv/8cx555BHKlSvnq+O6LqNGjcq0LcMwKFWqFC1btuTFF1/kjz/+SDcpBBAUFET//v3TlGldIREREZErh3YlExERKWTq1q1L3bp16d+/P2+99Rb169dn//79APz5558ZnpfTQcSGYVz0u4iIiIgUXEoMiYiIXOE+++wzTp48yT333MNVV12V5lhAQAD+/v6+7yEhIZc7PBEREREpwJQYEhERucLt3LmTiIgInn76adq0aUOzZs0oW7YsJ06cYNasWezatctXt1u3bvkXqIiIiIgUOEoMiYiIFBIpKSlERUURFRWV7vGWLVvyzDPPXN6gRERERKRAU2JIRETkCvf0008TGhpKVFQUy5cvJyYmhkOHDpGcnEzp0qVp2LAhd955J4MGDUozrUxERERERNvVi4iIiIiIiIgUUdquXkRERERERESkiFJiSERERERERESkiFJiSERERERERESkiFJiSERERERERESkiFJiSEREREREREQkHePHj6dNmzZUrVqVqlWr0qlTJ+bNm5emzrJly+jRoweVKlWiatWqdOvWjcTERN/xo0ePMmjQIKpWrUq1atV44okniI+Pv9y3kiHtSiYiIiIiIiIiko7Zs2djWRa1atXCdV0mTpzIu+++y6JFi7j22mtZtmwZvXv3ZujQoXTp0gWPx8P69evp1q0bAQEBAPTu3ZuDBw8yevRoUlJSePzxx2nWrBnjxo3L57tLpcSQiIiIiIiIiEgW1ahRg5dffpn+/ftzyy23EBYWxnPPPZdu3c2bN3P99dezcOFCmjVrBsD8+fO566672LBhAxUrVrycoafLk98BXCrHcXyfDcPIx0hEREREREREpCBzXZdTp06RnJycJocQEBDgG+GTEdu2mT59OgkJCbRq1YrDhw+zYsUK+vTpQ6dOndi1axd16tTh+eef54YbbgBg+fLlBAcH+5JCAGFhYZimycqVK7ntttvy5kaz4YpPDAGcOHEiv0MQERERERERkSvEddddx8GDB33fn332WYYPH55u3Q0bNtC5c2eSkpIoUaIEX3zxBfXr12f58uUAvPHGG7zyyis0btyYSZMm0bNnT5YsWUKtWrU4ePAgZcuWTdOex+OhdOnSaa6fnwpFYgjANE127txJzZo1sSwrv8MRuSLYts2OHTv03Ihkk54dkZzRsyOSM3p2RLIvo+fGdV1SUlJYunTpBSOGMlKnTh2io6M5fvw4M2bMYMiQIfzwww++GUwPPvgg9957LwBNmjRh0aJFfPnll4SHh+fR3eWuKz4xdOY30uPx4LouHo9Hf1iKZJFhGHpuRHJAz45IzujZEckZPTsi2ZfRc3MmMVSqVKksL0fj7+9PzZo1AWjatCmrV6/mww8/ZOjQoQDUq1cvTf169eqxd+9eAMqXL8/hw4fTHPd6vRw9epTy5cvn+P5yk7arFxERERERERHJIsdxSE5OpmrVqlSsWJFt27alOb5t2zaqVKkCQKtWrYiLi2PNmjW+49HR0TiOQ4sWLS5r3Bm54kcMiYiIiIiIiEjeioyMpF27dvkdxmUXERFBx44dqVKlCidOnODbb79l8eLFTJ06FcMweOKJJ/j3v/9No0aNaNy4MRMnTmTr1q189tlnQOrooQ4dOvDUU08xatQoUlJS+Ne//sUdd9xRIHYkAyWGRERERERERCQTUVFRRTIx9NdffzF48GAOHjxIqVKlaNiwIVOnTvX9vxg8eDBJSUmMHDmSY8eO0bBhQ7777jtq1Kjha2Ps2LH885//pGfPnhiGQY8ePXjjjTfy65YuoMSQiIiIiIiIiEg63n333UzrDB061LfeUHpKly7NuHHjcjOsXKU1hkREREREREREiiglhkREREREREQkQ6HR4cyvEEto9JWx/bpkj6aSiYiIiIiIiEiGjiTHc6xuIHZyfH6HInlAI4ZERERERERERIooJYZERERERERERIooJYZEREREREREJFsiIyPzOwTJJUoMiYiIiIiIiEi2REVF5XcIkkuUGBIRERERERGRLLP69qP9hj+w+vbL71AkF2hXMhERERERERHJurg42psWOHZ+RyK5QCOGRERERERERESKKCWGRERERERERESKKCWGRERERERERCRDIf5BVN6SRIh/UH6HInlAiSERERERERERydDathF0jCnD2rYR+R2K5AElhkREREREREREiiglhkREREREREREiiglhkRERERERETkosLCwvI7BMkjSgyJiIiIiIiIyEW1a9cuv0OQPKLEkIiIiIiIiIikERkZmd8hyGXiye8ARERERERERKTgCI0OJ2hTLPFWlHYiKwKUGBIRERERERERnyPJ8RyrG4idHJ/fochloKlkIiIiIiIiIiJFlBJDIiIiIiIiIiJFlBJDIiIiIiIiIkWcFpsuupQYEhERERERESnioqKi8jsEySdafFpERERERESkiAiNDufI6UWlQ/yDtOuYaMSQiIiIiIiISFFxJDkeyzCxDNOXILL69qP9hj+w+vYDUhNGlbckEeIflJ+hymWixJCIiIiIiIhIIZbp+kFxcbRPSIS4OADWto2gY0wZjSYqIpQYEhERERERESnEtH6QXIwSQyIiIiIiIiJFRIh/ELbrpJ0qFhzMwuLFIDg4f4OTfKHFp0VERERERESKiDPTw8J/DidicOpne/IknMhI7HbtfPXCwsLyIzzJBxoxJCIiIiIiIlLEtTsnKZTedym8NGJIREREREREpJCy+vajvW1jdekKwcHYkyflWtsJps0vOxcSvTuan3f/zJe9vqRiUMVca18uDyWGRERERERERIqYnE4VO+U9xbhrdvNt2cMsKxlHysQo37HoP6Pp27Bv7gQol42mkomIiIiIiIgUIuduT29PnsTChg2w58xOM1oou1PFXNdlxuYZNB3blKG1t/JL8DFSTJfKJStzd8O7earmU9xU9aZcuwe5fDRiSERERERERKSQCI0OJ2hTLPFWlG+h6Uu17tA6hv00jEW7FwFQ4ZQ/I/fWpOuRMlSdFolhGISHh1OpX6VcuZ5cXkoMiYiIiIiIiBQSR5LjOVY3EDs5Plfa23F0B20/a0tCSgKBnkCebv00I978lSACwLGxDSNXriP5R1PJREREREREROQCrusy9KehJKQk0Pqa1vz+yO+8HPYyQY7GmBQmSgyJiIiIiIiIyAVmbJnB7O2z8TP9GN99PNWCq+V3SJIHlBgSERERERERKcRysgNZfHI8//jpHwAMu34Y9ULq5XJUUlAoMSQiIiIiIiJSiGV3BzKAVxe/yt4Te6lxVQ1GtBlx0bpW33603/AHVt9+OQ1R8pEmBoqIiIiIiIiIz/pD6/nfsv8BMLrTaIr5Fbv4CXFxtDctcOzLEJ3kNo0YEhEREREREREAHNfhiTlP4HW83F73drrV7nZhpeBgFhYvBsHBlz9AyXVKDImIiIiIiIgIAMMXDOeXvb9Qwq8EozqNSreOPXkSCxs2wJ486TJLine truncated
"text/plain": [
"<Figure size 1200x1000 with 8 Axes>"
]
@@ -1292,9 +1282,8 @@
"text": [
"\n",
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
"\n",
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
"Technical Analysis with Pandas TA v: 0.1.93b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Technical Analysis with Pandas TA v: 0.1.99b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
"\n"
]
@@ -1302,7 +1291,7 @@
{
"data": {
"text/plain": [
"<__main__.Chart at 0x11b57cd30>"
"<__main__.Chart at 0x113ac5b80>"
]
},
"execution_count": 19,
@@ -1333,7 +1322,7 @@
"outputs": [
{
"data": {
"image/png": "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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAABH8AAANeCAYAAACLfKKfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3gVZdrH8e/MnCRAAgFC70WKtAiKBRABFQRpIlWsq6jYFSzLqjG6KrZ1XyzoKrqgUpQiCGtDEiKgUkQUkCZFeklISEifmfePyCGBhOSkl9/nurg8057nnnPO5Iz3PMVwXddFRERERERERETKJbOkAxARERERERERkaKj5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiIiIiIiISDmm5I+IiEgZNH/+fAYOHEj9+vXx9/enatWqNGnShEsvvZRx48bx7rvvZtm/V69eGIZx1j/LsqhevToXX3wx4eHhHD9+3HtM//79s+z73nvvZRvL2LFjs+w3efLkIj13EREREfGN4bquW9JBiIiISN7dcccdTJs27Zz7BAcHExsb613u1asXy5cvz7XsevXq8d1339GuXTsOHDhAhw4dvAmhatWqsXHjRho3buzdf+HChQwdOtS73K1bN77//ntMU8+XREREREoLJX9ERETKkG+++YZ+/fp5lzt37ky/fv0IDg4mJiaG3377jRUrVmBZ1jmTP6+88goAJ06cYOHChfz666/ebRdeeCFr164FYNasWdxwww3ebf369eOrr74CICYmhvbt23Po0CEAAgMD2bBhAy1btiyCMxcRERGR/PKUdAAiIiKSd6cSLwAtW7ZkzZo1WJaVZZ+0tDSWLVt2znImTpzofT1p0iTatWvHrl27AFi3bh27du2iefPmjBkzhgULFvDZZ58B8PXXXzNt2jRuv/12HnjgAW/iBzISSkr8iIiIiJQ+apMtIiJShti27X0dGxvLzp07z9rHz88vS+ug3FSqVIkLL7wwy7qDBw96X0+dOpV69ep5lydMmMDbb7/NJ5984l3Xr18/xo8fn+c6RURERKT4KPkjIiJShnTp0sX7Ojo6mjZt2hAaGsrtt9/Om2++yYYNG3wuMzk5mXXr1mVZV79+fe/rkJAQ3n//fe9yXFwc9957r3e5Ro0auY5BJCIiIiIlR2P+iIiIlCHp6en06NGDn376Kcd92rRpw+TJk7MMxJzfMX8yGzduXJYk0CmffPJJlnGBRERERKR0UfJHRESkjDl58iSvvPIK06ZNY9++fdnuYxgGCxcuZNCgQUDeZ/uqU6cO3333HR06dDhrW0JCAp06dfKODQQwYsQIPv3003yeiYiIiIgUB3X7EhERKWMCAwN55pln2Lt3L1u3bmXGjBncdddd1KlTx7uP67r861//yrUswzCoVq0aF110EU8//TSbN2/ONvEDEBQUxE033ZRlncb5ERERESn9NNuXiIhIGda6dWtat27NTTfdxCuvvELbtm05cOAAAHv27MnxuPw2/DUM45zLIiIiIlL6KPkjIiJShkyfPp2TJ09yww03UL169SzbAgIC8Pf39y6HhIQUd3giIiIiUgop+SMiIlKG7Nq1i/DwcB566CG6d+9O586dqV27NvHx8SxZsoTdu3d79x0wYEDJBSoiIiIipYaSPyIiImVQWloakZGRREZGZrv9oosuYuLEicUblIiIiIiUSkr+iIiIlCEPPfQQoaGhREZGsmbNGg4dOsSRI0dITU2lRo0atG/fnuuvv55x48Zl6QImIiIiIhWXpnoXERERERERESnHNNW7iIiIiIiIiEg5puSPiIiIiIiIiEg5puSPiIiIiIiIiEg5puSPiIiIiIiIiEg5puSPiIiIiIiIiAgwbdo0unfvTpMmTWjSpAl9+/bl22+/zbLP6tWrGTx4MA0bNqRJkyYMGDCApKQk7/bjx48zbtw4mjRpQtOmTbn//vtJSEgo7lPJQrN9iYiIiIiIiIgAX375JZZl0bJlS1zXZdasWbzxxhssX76c888/n9WrVzN8+HAefvhhrrnmGjweDxs3bmTAgAEEBAQAMHz4cA4fPszrr79OWloa9913H507d+b9998vsfNS8kdEREREREREJAfNmzfn2Wef5aabbuLqq6+mV69e/OMf/8h2361bt3LppZeybNkyOnfuDMDSpUsZOXIkmzZton79+sUZupenRGrNJ8dxvK8NwyjBSERERERERESktHNdl5SUFFJTU7PkEQICArwtdXJi2zaff/45iYmJdO3alaNHj7J27VpG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 truncated
"text/plain": [
"<Figure size 1200x1000 with 6 Axes>"
]
@@ -1347,9 +1336,8 @@
"text": [
"\n",
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
"\n",
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
"Technical Analysis with Pandas TA v: 0.1.93b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Technical Analysis with Pandas TA v: 0.1.99b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
"\n"
]
@@ -1357,7 +1345,7 @@
{
"data": {
"text/plain": [
"<__main__.Chart at 0x11bda8f40>"
"<__main__.Chart at 0x11510dcd0>"
]
},
"execution_count": 20,
@@ -1392,7 +1380,7 @@
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABH8AAANgCAYAAAC1DMRCAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3gVVeLG8e/M3CRAAgFCk95BQAIq2ABpiiICUgR1xYINXSt2fxpx1xUXd3XtBXRBkKqCICslJARQaQLSi7TQJSEJCaTcmfn9EXJJID2BJPB+noeH3Jkzc88Al5y8pxmu67qIiIiIiIiIiMgFySzpCoiIiIiIiIiIyLmj8EdERERERERE5AKm8EdERERERERE5AKm8EdERERERERE5AKm8EdERERERERE5AKm8EdERERERERE5AKm8EdERERERERE5AKm8EdERERERERE5AKm8EdERERERERE5AKm8EdERERERERE5AKm8EdERKQM+u677+jTpw+XXHIJ/v7+VKxYkfr163P11Vfz4IMP8tlnn2Up37VrVwzDOOuXZVlUrlyZjh07MmrUKI4dO+a75uabb85S9osvvsi2LnfddVeWcqNHjz6nzy4iIiIiBWO4ruuWdCVEREQk/x544AHGjRuXa5ng4GDi4uJ8r7t27crixYvzvHetWrUIDw+nVatWHDhwgDZt2vgCoUqVKrFhwwbq1avnKz9r1iz69+/ve33ttdeyZMkSTFP9SyIiIiKlhcIfERGRMmT+/Pn06tXL97p9+/b06tWL4OBgYmNjWb9+PUuXLsWyrFzDnzFjxgCQkJDArFmz+P33333nrrjiClatWgXA5MmTufPOO33nevXqxU8//QRAbGwsrVu35tChQwAEBgaybt06mjRpcg6eXEREREQKy1PSFRAREZH8ywheAJo0acLKlSuxLCtLmbS0NBYtWpTrfZ599lnf1y+//DKtWrVi165dAKxevZpdu3bRqFEj7rjjDr7//numT58OwLx58xg3bhzDhw/niSee8AU/kB4oKfgRERERKX00JltERKQMsW3b93VcXBw7d+48q4yfn1+W0UF5KVeuHFdccUWWYwcPHvR9/cknn1CrVi3f65EjR/Lxxx8zadIk37FevXoxYsSIfL+niIiIiJw/Cn9ERETKkMsvv9z3dUxMDC1atCA0NJThw4fz4Ycfsm7dugLfMzk5mdWrV2c5dskll/i+DgkJYezYsb7X8fHxPPbYY77XVapUyXMNIhEREREpOVrzR0REpAzxer106tSJ5cuX51imRYsWjB49OstCzIVd8yezBx98MEsIlGHSpElZ1gUSERERkdJF4Y+IiEgZk5SUxJgxYxg3bhz79u3LtoxhGMyaNYtbb70VyP9uXzVq1CA8PJw2bdqcdS4xMZG2bdv61gYCGDx4MNOmTSvkk4iIiIjI+aBpXyIiImVMYGAgr7/+OtHR0WzdupUJEybw8MMPU6NGDV8Z13X597//nee9DMOgUqVKXHnllbz22mts2rQp2+AHICgoiLvvvjvLMa3zIyIiIlL6abcvERGRMqx58+Y0b96cu+++mzFjxtCyZUsOHDgAwJ49e3K8rrADfw3DyPW1iIiIiJQ+Cn9ERETKkPHjx5OUlMSdd95J5cqVs5wLCAjA39/f9zokJOR8V09ERERESiGFPyIiImXIrl27GDVqFE899RTXXXcd7du3p3r16hw/fpwff/yR3bt3+8r27t275CoqIiIiIqWGwh8REZEyKC0tjcjISCIjI7M9f+WVV/Lss8+e30qJiIiISKmk8EdERKQMeeqppwgNDSUyMpKVK1dy6NAhjhw5QmpqKlWqVKF169YMHDiQBx98MMsUMBERERG5eGmrdxERERERERGRC5i2ehcRERERERERuYAp/BERERERERERuYAp/BERERERERERuYAp/BERERERERERuYAp/BERERERERERuYAp/BERERERERERuYB5SroCBeE4ju9rwzBKsCYiIiIiIiIiUtq5ruv72jQv3vEvZSr8ATh+/HhJV0FEREREREREypCKFSvmq9y4ceP48ssviY6OBqBly5Y899xz3HDDDVnKua7L4MGDCQ8PZ+LEidxyyy2+c9HR0YwcOZKlS5cSGBjI0KFDCQsLw+MpuQimzIU/AH5+fuzYsYNmzZphWVZJV0ekTLFtm+3bt+vzI1JA+uyIFJ4+PyKFo8+OSOFlfH6aNm1KWlpavq+rXbs2YWFhNGnSBNd1mTx5MnfddReLFy/m0ksv9ZX75JNPsp2RZNs2Q4YMoWbNmsybN49Dhw4xYsQI/Pz8eO2114rl2QqjTIU/GX+whmHgui6GYWj6l0gB6fMjUjj67IgUnj4/IoWjz45I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 truncated
"image/png": "iVBORw0KGgoAAAANSUhEUgAABH8AAANeCAYAAACLfKKfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3wVVfrH8c/M3CSUQIDQe0eKBKSIDUNoisCCgCBYEEUWXVxdd9UfK0Zsa0V3EStgRUFAQUBAIAkBRQSkK72XUJIQSELKvTO/PyKXBBJIQkLa9/165ZXcmTMzz0BGjs+c8xzDcRwHEREREREREREplsyCDkBERERERERERPKPkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiIiIiIiIsWYkj8iIiJF0Lfffkvv3r2pUaMGvr6+lCtXjrp169KpUydGjhzJhx9+mKF9cHAwhmFc9GVZFhUqVKBjx46MHz+e2NhY7zG33357hrYff/xxprEMGzYsQ7tXX301X+9dRERERHLGcBzHKeggREREJPseeughpkyZcsk2AQEBnDp1yvs5ODiY5cuXX/bc1atXZ9myZbRo0YIjR47QqlUrb0KofPnybNmyhTp16njbz507l379+nk/33jjjaxYsQLT1PslERERkcJCyR8REZEi5Mcff6Rnz57ez23btqVnz54EBAQQExPD5s2bWblyJZZlXTL588YbbwBw+vRp5s6dy6ZNm7z72rVrx9q1awH4+uuvGTp0qHdfz549WbRoEQAxMTG0bNmSqKgoAMqWLcvGjRtp1KhRPty5iIiIiOSWq6ADEBERkew7l3gBaNSoEWvWrMGyrAxtUlNTCQsLu+R5/vnPf3p/Hjt2LC1atGDv3r0ArFu3jr1799KgQQPuvvtuvvvuO2bOnAnA4sWLmTJlCg8++CCPPfaYN/EDaQklJX5ERERECh+NyRYRESlCPB6P9+dTp06xZ8+ei9r4+PhkGB10OaVKlaJdu3YZth09etT78/vvv0/16tW9n5988knee+89pk2b5t3Ws2dPRo8ene1rioiIiMjVo+SPiIhIEXLdddd5f46OjqZZs2YEBQXx4IMP8u6777Jx48YcnzMpKYl169Zl2FajRg3vz4GBgUyePNn7OS4ujkcffdT7uWLFipetQSQiIiIiBUc1f0RERIoQt9vNzTffzOrVq7Ns06xZM1599dUMhZhzW/MnvZEjR2ZIAp0zbdq0DHWBRERERKRwUfJHRESkiElISOCNN95gypQpHDp0KNM2hmEwd+5c+vTpA2R/ta+qVauybNkyWrVqddG++Ph4Wrdu7a0NBDBo0CC++eabXN6JiIiIiFwNmvYlIiJSxJQtW5bnn3+egwcPsn37dj7//HNGjRpF1apVvW0cx2HChAmXPZdhGJQvX5727dvz3HPP8fvvv2ea+AHw9/fn3nvvzbBNdX5ERERECj+t9iUiIlKENW3alKZNm3LvvffyxhtvcM0113DkyBEA9u/fn+VxuR34axjGJT+LiIiISOGj5I+IiEgR8tlnn5GQkMDQoUOpUKFChn1+fn74+vp6PwcGBl7t8ERERESkEFLyR0REpAjZu3cv48eP5/HHH+emm26ibdu2VKlShTNnzrBgwQL27dvnbdurV6+CC1RERERECg0lf0RERIqg1NRUIiIiiIiIyHR/+/bt+ec//3l1gxIRERGRQknJHxERkSLk8ccfJygoiIiICNasWUNUVBTHjx8nJSWFihUr0rJlSwYMGMDIkSMzTAETERERkZJLS72LiIiIiIiIiBRjWupdRERERERERKQYU/JHRERERERERKQYU/JHRERERERERKQYU/JHRERERERERKQYU/JHRERERERERASYMmUKN910E3Xr1qVu3br06NGDJUuWZGjz66+/0rdvX2rVqkXdunXp1asXZ8+e9e6PjY1l5MiR1K1bl3r16jFmzBji4+Ov9q1koNW+RERERERERESAhQsXYlkWjRo1wnEcvv76ayZOnMjy5ctp3rw5v/76KwMHDuSJJ57gtttuw+VysWXLFnr16oWfnx8AAwcO5NixY7z99tukpqbyt7/9jbZt2zJ58uQCuy8lf0REREREREREstCgQQNeeOEF7r33Xrp3705wcDD//ve/M227fft2OnXqRFhYGG3btgVg6dKl3HXXXWzdupUaNWpczdC9XAVy1Vyybdv7s2EYBRiJiIiIiIiIiBR2juOQnJxMSkpKhjyCn5+fd6ROVjweD3PmzCExMZEOHTpw4sQJ1q5d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 truncated
"text/plain": [
"<Figure size 1200x1000 with 8 Axes>"
]
@@ -1406,9 +1394,8 @@
"text": [
"\n",
"Pandas v: 1.1.0 [pip install pandas] https://github.com/pandas-dev/pandas\n",
"\n",
"Data from AlphaVantage v: 1.0.19 [pip install alphaVantage-api] http://www.alphavantage.co https://github.com/twopirllc/AlphaVantageAPI\n",
"Technical Analysis with Pandas TA v: 0.1.93b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Technical Analysis with Pandas TA v: 0.1.99b [pip install pandas_ta] https://github.com/twopirllc/pandas-ta\n",
"Charts by Matplotlib Finance v: 0.12.6a3 [pip install mplfinance] https://github.com/matplotlib/mplfinance\n",
"\n"
]
@@ -1416,7 +1403,7 @@
{
"data": {
"text/plain": [
"<__main__.Chart at 0x11b78a490>"
"<__main__.Chart at 0x114e2d1f0>"
]
},
"execution_count": 21,
+1 -1
View File
@@ -28,7 +28,7 @@ Category = {
"momentum": ["ao", "apo", "bias", "bop", "brar", "cci", "cg", "cmo", "coppock", "er", "eri", "fisher", "inertia", "kdj", "kst", "macd", "mom", "pgo", "ppo", "psl", "pvo", "roc", "rsi", "rvgi", "slope", "smi", "squeeze", "stoch", "trix", "tsi", "uo", "willr"],
# Overlap
"overlap": ["dema", "ema", "fwma", "hl2", "hlc3", "hma", "ichimoku", "kama", "linreg", "midpoint", "midprice", "ohlc4", "pwma", "rma", "sinwma", "sma", "supertrend", "swma", "t3", "tema", "trima", "vwap", "vwma", "wcp", "wma", "zlma"],
"overlap": ["dema", "ema", "fwma", "hilo", "hl2", "hlc3", "hma", "ichimoku", "kama", "linreg", "midpoint", "midprice", "ohlc4", "pwma", "rma", "sinwma", "sma", "supertrend", "swma", "t3", "tema", "trima", "vwap", "vwma", "wcp", "wma", "zlma"],
# Performance
"performance": ["log_return", "percent_return", "trend_return"],
+10 -1
View File
@@ -23,7 +23,7 @@ from pandas_ta.volatility import *
from pandas_ta.volume import *
from pandas_ta.utils import *
version = ".".join(("0", "1", "98b"))
version = ".".join(("0", "1", "99b"))
def mp_worker(args):
@@ -900,6 +900,15 @@ class AnalysisIndicators(BasePandasObject):
result = fwma(close=close, length=length, offset=offset, **kwargs)
return result
@finalize
def hilo(self, high=None, low=None, close=None, high_length=None, low_length=None, offset=None, **kwargs):
high = self._get_column(high, "high")
low = self._get_column(low, "low")
close = self._get_column(close, "close")
result = hilo(high=high, low=low, close=close, high_length=high_length, low_length=low_length, offset=offset, **kwargs)
return result
@finalize
def hl2(self, high=None, low=None, offset=None, **kwargs):
high = self._get_column(high, "high")
+6 -6
View File
@@ -33,14 +33,14 @@ def cmo(close, length=None, scalar=None, drift=None, offset=None, **kwargs):
cmo = cmo.shift(offset)
# Handle fills
if 'fillna' in kwargs:
cmo.fillna(kwargs['fillna'], inplace=True)
if 'fill_method' in kwargs:
cmo.fillna(method=kwargs['fill_method'], inplace=True)
if "fillna" in kwargs:
cmo.fillna(kwargs["fillna"], inplace=True)
if "fill_method" in kwargs:
cmo.fillna(method=kwargs["fill_method"], inplace=True)
# Name and Categorize it
cmo.name = f"CMO_{length}"
cmo.category = 'momentum'
cmo.category = "momentum"
return cmo
@@ -65,11 +65,11 @@ Calculation:
Args:
close (pd.Series): Series of 'close's
scalar (float): How much to magnify. Default: 100
talib (bool): If True, uses TA-Libs implementation. Otherwise uses EMA version. Default: True
drift (int): The short period. Default: 1
offset (int): How many periods to offset the result. Default: 0
Kwargs:
talib (bool): If True, uses TA-Libs implementation. Otherwise uses EMA version. Default: True
fillna (value, optional): pd.DataFrame.fillna(value)
fill_method (value, optional): Type of fill method
+1
View File
@@ -2,6 +2,7 @@
from .dema import dema
from .ema import ema
from .fwma import fwma
from .hilo import hilo
from .hl2 import hl2
from .hlc3 import hlc3
from .hma import hma
+133
View File
@@ -0,0 +1,133 @@
# -*- coding: utf-8 -*-
from numpy import NaN as npNaN
from pandas import DataFrame, Series
from .ema import ema
from .hma import hma
from .sma import sma
from pandas_ta.utils import get_offset, verify_series
def hilo(high, low, close, high_length=None, low_length=None, mamode=None, offset=None, **kwargs):
"""Indicator: Gann HiLo (HiLo)"""
# Validate Arguments
high = verify_series(high)
low = verify_series(low)
close = verify_series(close)
high_length = int(high_length) if high_length and high_length > 0 else 13
low_length = int(low_length) if low_length and low_length > 0 else 21
mamode = mamode.lower() if mamode else "sma"
offset = get_offset(offset)
# Calculate Result
m = close.size
hilo = Series(npNaN, index=close.index)
long = Series(npNaN, index=close.index)
short = Series(npNaN, index=close.index)
if mamode == "ema":
high_ma = ema(high, high_length)
low_ma = ema(low, low_length)
if mamode == "hma":
high_ma = hma(high, high_length)
low_ma = hma(low, low_length)
else: # "sma"
high_ma = sma(high, high_length)
low_ma = sma(low, low_length)
for i in range(1, m):
if close.iloc[i] > high_ma.iloc[i - 1]:
hilo.iloc[i] = long.iloc[i] = low_ma.iloc[i]
elif close.iloc[i] < low_ma.iloc[i - 1]:
hilo.iloc[i] = short.iloc[i] = high_ma.iloc[i]
else:
hilo.iloc[i] = hilo.iloc[i - 1]
long.iloc[i] = short.iloc[i] = hilo.iloc[i - 1]
# Offset
if offset != 0:
hilo = hilo.shift(offset)
# Handle fills
if "fillna" in kwargs:
hilo.fillna(kwargs["fillna"], inplace=True)
if "fill_method" in kwargs:
hilo.fillna(method=kwargs["fill_method"], inplace=True)
# Name & Category
_props = f"_{high_length}_{low_length}"
df = DataFrame({
f"HILO{_props}": hilo,
f"HILOl{_props}": long,
f"HILOs{_props}": short
}, index=close.index)
df.name = f"HILO{_props}"
df.category = "overlap"
return df
hilo.__doc__ = \
"""Gann HiLo Activator(HiLo)
The Gann High Low Activator Indicator was created by Robert Krausz in a 1998
issue of Stocks & Commodities Magazine. It is a moving average based trend
indicator consisting of two different simple moving averages.
The indicator tracks both curves (of the highs and the lows). The close of the
bar defines which of the two gets plotted.
Increasing high_length and decreasing low_length better for short trades,
vice versa for long positions.
Sources:
https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=447&Name=Gann_HiLo_Activator
https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/simple-moving-average-sma/
https://www.tradingview.com/script/XNQSLIYb-Gann-High-Low/
Calculation:
Default Inputs:
high_length=13, low_length=21, mamode="sma"
EMA = Exponential Moving Average
HMA = Hull Moving Average
SMA = Simple Moving Average # Default
if "ema":
high_ma = EMA(high, high_length)
low_ma = EMA(low, low_length)
elif "hma":
high_ma = HMA(high, high_length)
low_ma = HMA(low, low_length)
else: # "sma"
high_ma = SMA(high, high_length)
low_ma = SMA(low, low_length)
# Similar to Supertrend MA selection
hilo = Series(npNaN, index=close.index)
for i in range(1, m):
if close.iloc[i] > high_ma.iloc[i - 1]:
hilo.iloc[i] = low_ma.iloc[i]
elif close.iloc[i] < low_ma.iloc[i - 1]:
hilo.iloc[i] = high_ma.iloc[i]
else:
hilo.iloc[i] = hilo.iloc[i - 1]
Args:
high (pd.Series): Series of 'high's
low (pd.Series): Series of 'low's
close (pd.Series): Series of 'close's
high_length (int): It's period. Default: 13
low_length (int): It's period. Default: 21
mamode (str): Options: 'sma' or 'ema'. Default: 'sma'
offset (int): How many periods to offset the result. Default: 0
Kwargs:
adjust (bool): Default: True
presma (bool, optional): If True, uses SMA for initial value.
fillna (value, optional): pd.DataFrame.fillna(value)
fill_method (value, optional): Type of fill method
Returns:
pd.DataFrame: HILO (line), HILOl (long), HILOs (short) columns.
"""
+1 -1
View File
@@ -18,7 +18,7 @@ def rma(close, length=None, offset=None, **kwargs):
# Name & Category
rma.name = f"RMA_{length}"
rma.category = 'overlap'
rma.category = "overlap"
return rma
+4 -4
View File
@@ -60,11 +60,11 @@ def supertrend(high, low, close, length=None, multiplier=None, offset=None, **kw
df = df.shift(offset)
# Handle fills
if 'fillna' in kwargs:
df.fillna(kwargs['fillna'], inplace=True)
if "fillna" in kwargs:
df.fillna(kwargs["fillna"], inplace=True)
if 'fill_method' in kwargs:
df.fillna(method=kwargs['fill_method'], inplace=True)
if "fill_method" in kwargs:
df.fillna(method=kwargs["fill_method"], inplace=True)
return df
+4 -2
View File
@@ -227,8 +227,7 @@ def signals(indicator, xa, xb, cross_values, xserie, xserie_a, xserie_b, cross_s
def df_error_analysis(dfA: pd.DataFrame, dfB: pd.DataFrame, **kwargs) -> pd.DataFrame:
""" """
col = kwargs.pop("col", None)
"""DataFrame Correlation Analysis helper"""
corr_method = kwargs.pop("corr_method", "pearson")
# Find their differences and correlation
@@ -241,6 +240,9 @@ def df_error_analysis(dfA: pd.DataFrame, dfB: pd.DataFrame, **kwargs) -> pd.Data
if diff[diff > 0].any():
diff.plot(kind="kde")
if kwargs.pop("triangular", False):
return corr.where(np.triu(np.ones(corr.shape)).astype(np.bool))
return corr
def fibonacci(**kwargs) -> np.ndarray:
+12 -12
View File
@@ -32,16 +32,16 @@ def aberration(high, low, close, length=None, atr_length=None, offset=None, **kw
atr_ = atr_.shift(offset)
# Handle fills
if 'fillna' in kwargs:
zg.fillna(kwargs['fillna'], inplace=True)
sg.fillna(kwargs['fillna'], inplace=True)
xg.fillna(kwargs['fillna'], inplace=True)
atr_.fillna(kwargs['fillna'], inplace=True)
if 'fill_method' in kwargs:
zg.fillna(method=kwargs['fill_method'], inplace=True)
sg.fillna(method=kwargs['fill_method'], inplace=True)
xg.fillna(method=kwargs['fill_method'], inplace=True)
atr_.fillna(method=kwargs['fill_method'], inplace=True)
if "fillna" in kwargs:
zg.fillna(kwargs["fillna"], inplace=True)
sg.fillna(kwargs["fillna"], inplace=True)
xg.fillna(kwargs["fillna"], inplace=True)
atr_.fillna(kwargs["fillna"], inplace=True)
if "fill_method" in kwargs:
zg.fillna(method=kwargs["fill_method"], inplace=True)
sg.fillna(method=kwargs["fill_method"], inplace=True)
xg.fillna(method=kwargs["fill_method"], inplace=True)
atr_.fillna(method=kwargs["fill_method"], inplace=True)
# Name and Categorize it
_props = f"_{length}_{atr_length}"
@@ -49,7 +49,7 @@ def aberration(high, low, close, length=None, atr_length=None, offset=None, **kw
sg.name = f"ABER_SG{_props}"
xg.name = f"ABER_XG{_props}"
atr_.name = f"ABER_ATR{_props}"
zg.category = sg.category = 'volatility'
zg.category = sg.category = "volatility"
xg.category = atr_.category = zg.category
# Prepare DataFrame to return
@@ -61,7 +61,7 @@ def aberration(high, low, close, length=None, atr_length=None, offset=None, **kw
}
aberdf = DataFrame(data)
aberdf.name = f"ABER{_props}"
aberdf.category = 'volatility'
aberdf.category = zg.category
return aberdf
+24 -20
View File
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from pandas import DataFrame
from ..utils import get_drift, get_offset, non_zero_range, verify_series
from pandas_ta.overlap import ema, sma
from pandas_ta.utils import get_drift, get_offset, non_zero_range, verify_series
def accbands(high, low, close, length=None, c=None, drift=None, mamode=None, offset=None, **kwargs):
"""Indicator: Acceleration Bands (ACCBANDS)"""
@@ -12,7 +13,7 @@ def accbands(high, low, close, length=None, c=None, drift=None, mamode=None, off
length = int(length) if length and length > 0 else 20
c = float(c) if c and c > 0 else 4
min_periods = int(kwargs['min_periods']) if 'min_periods' in kwargs and kwargs['min_periods'] is not None else length
mamode = mamode.lower() if mamode else 'sma'
mamode = mamode.lower() if mamode else "sma"
drift = get_drift(drift)
offset = get_offset(offset)
@@ -22,14 +23,17 @@ def accbands(high, low, close, length=None, c=None, drift=None, mamode=None, off
_lower = low * (1 - hl_ratio)
_upper = high * (1 + hl_ratio)
if mamode is None or mamode == 'sma':
lower = _lower.rolling(length, min_periods=min_periods).mean()
mid = close.rolling(length, min_periods=min_periods).mean()
upper = _upper.rolling(length, min_periods=min_periods).mean()
elif mamode == 'ema':
lower = _lower.ewm(span=length, min_periods=min_periods).mean()
mid = close.ewm(span=length, min_periods=min_periods).mean()
upper = _upper.ewm(span=length, min_periods=min_periods).mean()
if mamode == "ema":
# lower = _lower.ewm(span=length, min_periods=min_periods).mean()
# mid = close.ewm(span=length, min_periods=min_periods).mean()
# upper = _upper.ewm(span=length, min_periods=min_periods).mean()
lower = ema(_lower, length=length)
mid = ema(close, length=length)
upper = ema(_upper, length=length)
else: # "sma"
lower = sma(_lower, length=length)
mid = sma(close, length=length)
upper = sma(_upper, length=length)
# Offset
if offset != 0:
@@ -38,26 +42,26 @@ def accbands(high, low, close, length=None, c=None, drift=None, mamode=None, off
upper = upper.shift(offset)
# Handle fills
if 'fillna' in kwargs:
lower.fillna(kwargs['fillna'], inplace=True)
mid.fillna(kwargs['fillna'], inplace=True)
upper.fillna(kwargs['fillna'], inplace=True)
if 'fill_method' in kwargs:
lower.fillna(method=kwargs['fill_method'], inplace=True)
mid.fillna(method=kwargs['fill_method'], inplace=True)
upper.fillna(method=kwargs['fill_method'], inplace=True)
if "fillna" in kwargs:
lower.fillna(kwargs["fillna"], inplace=True)
mid.fillna(kwargs["fillna"], inplace=True)
upper.fillna(kwargs["fillna"], inplace=True)
if "fill_method" in kwargs:
lower.fillna(method=kwargs["fill_method"], inplace=True)
mid.fillna(method=kwargs["fill_method"], inplace=True)
upper.fillna(method=kwargs["fill_method"], inplace=True)
# Name and Categorize it
lower.name = f"ACCBL_{length}"
mid.name = f"ACCBM_{length}"
upper.name = f"ACCBU_{length}"
mid.category = upper.category = lower.category = 'volatility'
mid.category = upper.category = lower.category = "volatility"
# Prepare DataFrame to return
data = {lower.name: lower, mid.name: mid, upper.name: upper}
accbandsdf = DataFrame(data)
accbandsdf.name = f"ACCBANDS_{length}"
accbandsdf.category = 'volatility'
accbandsdf.category = mid.category
return accbandsdf
+28 -21
View File
@@ -1,8 +1,7 @@
# -*- coding: utf-8 -*-
# from ..overlap.ema import ema
from ..overlap.rma import rma
from pandas_ta.overlap import ema, rma
from .true_range import true_range
from ..utils import get_drift, get_offset, verify_series
from pandas_ta.utils import get_drift, get_offset, verify_series
def atr(high, low, close, length=None, mamode=None, drift=None, offset=None, **kwargs):
"""Indicator: Average True Range (ATR)"""
@@ -11,32 +10,37 @@ def atr(high, low, close, length=None, mamode=None, drift=None, offset=None, **k
low = verify_series(low)
close = verify_series(close)
length = int(length) if length and length > 0 else 14
min_periods = int(kwargs['min_periods']) if 'min_periods' in kwargs and kwargs['min_periods'] is not None else length
mamode = mamode.lower() if mamode else 'ema'
mamode = mamode.lower() if mamode else "ema"
drift = get_drift(drift)
offset = get_offset(offset)
# Calculate Result
tr = true_range(high=high, low=low, close=close, drift=drift)
if mamode == 'ema':
alpha = (1.0 / length) if length > 0 else 0.5
atr = tr.ewm(alpha=alpha, min_periods=min_periods).mean()
if mamode == "ema":
# alpha = (1.0 / length) if length > 0 else 0.5
# atr = tr.ewm(alpha=alpha).mean()
atr = rma(tr, length=length)
else:
atr = tr.rolling(length, min_periods=min_periods).mean()
# atr = tr.rolling(length).mean()
atr = sma(tr, length=length)
percentage = kwargs.pop("percent", False)
if percentage:
atr *= 100 / close
# Offset
if offset != 0:
atr = atr.shift(offset)
# Handle fills
if 'fillna' in kwargs:
atr.fillna(kwargs['fillna'], inplace=True)
if 'fill_method' in kwargs:
atr.fillna(method=kwargs['fill_method'], inplace=True)
if "fillna" in kwargs:
atr.fillna(kwargs["fillna"], inplace=True)
if "fill_method" in kwargs:
atr.fillna(method=kwargs["fill_method"], inplace=True)
# Name and Categorize it
atr.name = f"ATR_{length}"
atr.category = 'volatility'
atr.name = f"ATR{'p' if percentage else ''}_{length}"
atr.category = "volatility"
return atr
@@ -53,7 +57,7 @@ Sources:
Calculation:
Default Inputs:
length=14, drift=1
length=14, drift=1, percent=False
SMA = Simple Moving Average
EMA = Exponential Moving Average
TR = True Range
@@ -63,19 +67,22 @@ Calculation:
else:
ATR = SMA(tr, length)
if percent:
ATR *= 100 / close
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
mamode (str): Two options: None or 'ema'. Default: 'ema'
drift (int): The difference period. Default: 1
offset (int): How many periods to offset the result. Default: 0
length (int): It's period. Default: 14
mamode (str): Two options: None or 'ema'. Default: 'ema'
drift (int): The difference period. Default: 1
offset (int): How many periods to offset the result. Default: 0
Kwargs:
percent (bool, optional): Return as percentage. Default: False
fillna (value, optional): pd.DataFrame.fillna(value)
fill_method (value, optional): Type of fill method
min_periods (int, optional) : Minimum number of periods before calculating ATR. Default : length
Returns:
pd.Series: New feature generated.
+18 -16
View File
@@ -14,13 +14,12 @@ def kc(high, low, close, length=None, scalar=None, mamode=None, offset=None, **k
low = verify_series(low)
close = verify_series(close)
length = int(length) if length and length > 0 else 20
min_periods = int(kwargs["min_periods"]) if "min_periods" in kwargs and kwargs["min_periods"] is not None else length
scalar = float(scalar) if scalar and scalar > 0 else 2
use_tr = kwargs.pop("tr", True)
mamode = mamode.lower() if mamode else None
offset = get_offset(offset)
# Calculate Result
use_tr = kwargs.pop("tr", True)
if use_tr:
range_ = true_range(high, low, close)
else:
@@ -82,21 +81,22 @@ Sources:
Calculation:
Default Inputs:
length=20, scalar=2, mamode=None
ATR = Average True Range
EMA = Exponential Moving Average
length=20, scalar=2, mamode=None, tr=True
TR = True Range
SMA = Simple Moving Average
EMA = Exponential Moving Average
if tr:
RANGE = TR(high, low, close)
else:
RANGE = high - low
BAND = ATR(high, low, close)
if mamode == "ema":
BASIS = EMA(close, length)
BASIS = sma(close, length)
BAND = sma(RANGE, length)
elif mamode == "sma":
BASIS = SMA(close, length)
else: # Typical Price
hl_range = high - low
tp = typical_price = hlc3(high, low, close)
BASIS = SMA(tp, length)
BAND = SMA(hl_range, length)
BASIS = sma(close, length)
BAND = sma(RANGE, length)
LOWER = BASIS - scalar * BAND
UPPER = BASIS + scalar * BAND
@@ -106,11 +106,13 @@ Args:
low (pd.Series): Series of 'low's
close (pd.Series): Series of 'close's
length (int): The short period. Default: 20
scalar (float): A positive float to scale the bands. Default: 2
mamode (str): Two options: None or "ema". Default: "ema"
offset (int): How many periods to offset the result. Default: 0
scalar (float): A positive float to scale the bands. Default: 2
mamode (str): Two options: "sma" or "ema". Default: "ema"
offset (int): How many periods to offset the result. Default: 0
Kwargs:
tr (bool): When True, it uses True Range for calculation. When False, use a
high - low as it's range calculation. Default: True
fillna (value, optional): pd.DataFrame.fillna(value)
fill_method (value, optional): Type of fill method
+8 -8
View File
@@ -30,10 +30,10 @@ def rvi(close, high=None, low=None, length=None, scalar=None, refined=None, thir
pos_std = pos * std
neg_std = neg * std
if mamode == 'sma':
if mamode == "sma":
pos_avg = sma(pos_std, length)
neg_avg = sma(neg_std, length)
else: # 'ema'
else: # "ema"
pos_avg = ema(pos_std, length)
neg_avg = ema(neg_std, length)
@@ -61,10 +61,10 @@ def rvi(close, high=None, low=None, length=None, scalar=None, refined=None, thir
rvi = rvi.shift(offset)
# Handle fills
if 'fillna' in kwargs:
rvi.fillna(kwargs['fillna'], inplace=True)
if 'fill_method' in kwargs:
rvi.fillna(method=kwargs['fill_method'], inplace=True)
if "fillna" in kwargs:
rvi.fillna(kwargs["fillna"], inplace=True)
if "fill_method" in kwargs:
rvi.fillna(method=kwargs["fill_method"], inplace=True)
# Name and Categorize it
rvi.name = f"RVI{_mode}_{length}"
@@ -103,9 +103,9 @@ Args:
high (pd.Series): Series of 'high's
low (pd.Series): Series of 'low's
close (pd.Series): Series of 'close's
length (int): The short period. Default: 14
length (int): The short period. Default: 14
scalar (float): A positive float to scale the bands. Default: 100
mamode (str): Two options: None or 'ema'. Default: 'ema'
mamode (str): Options: 'sma' or 'ema'. Default: 'sma'
refined (bool): Use 'refined' calculation which is the average of
RVI(high) and RVI(low) instead of RVI(close). Default: False
thirds (bool): Average of high, low and close. Default: False
+4 -4
View File
@@ -30,10 +30,10 @@ def ui(close, length=None, scalar=None, offset=None, **kwargs):
ui = ui.shift(offset)
# Handle fills
if 'fillna' in kwargs:
ui.fillna(kwargs['fillna'], inplace=True)
if 'fill_method' in kwargs:
ui.fillna(method=kwargs['fill_method'], inplace=True)
if "fillna" in kwargs:
ui.fillna(kwargs["fillna"], inplace=True)
if "fill_method" in kwargs:
ui.fillna(method=kwargs["fill_method"], inplace=True)
# Name and Categorize it
ui.name = f"UI{'' if not everget else 'e'}_{length}"
+5
View File
@@ -71,6 +71,11 @@ class TestOverlap(TestCase):
self.assertIsInstance(result, Series)
self.assertEqual(result.name, "FWMA_10")
def test_hilo(self):
result = pandas_ta.hilo(self.high, self.low, self.close)
self.assertIsInstance(result, DataFrame)
self.assertEqual(result.name, "HILO_13_21")
def test_hl2(self):
result = pandas_ta.hl2(self.high, self.low)
self.assertIsInstance(result, Series)
+5
View File
@@ -38,6 +38,11 @@ class TestOverlapExtension(TestCase):
self.assertIsInstance(self.data, DataFrame)
self.assertEqual(self.data.columns[-1], "FWMA_10")
def test_hilo_ext(self):
self.data.ta.hilo(append=True)
self.assertIsInstance(self.data, DataFrame)
self.assertEqual(list(self.data.columns[-3:]), ["HILO_13_21", "HILOl_13_21", "HILOs_13_21"])
def test_hl2_ext(self):
self.data.ta.hl2(append=True)
self.assertIsInstance(self.data, DataFrame)