{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "7fae3f1f", "metadata": {}, "outputs": [], "source": [ "# This code generates long term, outer and inner trend lines\n", "\n", "import yfinance as yf\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 8, "id": "1f67519f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[*********************100%***********************] 1 of 1 completed\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseAdj CloseVolume
Date
2019-07-0897.739998104.00000097.309998103.250000103.25000012268300
2019-07-09102.669998104.440002100.620003103.400002103.40000210727300
2019-07-10104.279999105.889999102.089996103.500000103.5000008519300
2019-07-11103.900002104.900002101.559998104.540001104.5400019091800
2019-07-12104.220001105.455002102.120003102.470001102.4700017524200
.....................
2020-08-13148.619003152.005005146.809998149.970001149.9700015544700
2020-08-14150.850006152.500000146.199997146.850006146.8500063855000
2020-08-17147.770004148.270004143.360001145.710007145.7100074907400
2020-08-18147.300003152.190002146.509995149.850006149.8500065945800
2020-08-19149.000000150.889999146.173004147.369995147.3699954333700
\n", "

284 rows × 6 columns

\n", "
" ], "text/plain": [ " Open High Low Close Adj Close \\\n", "Date \n", "2019-07-08 97.739998 104.000000 97.309998 103.250000 103.250000 \n", "2019-07-09 102.669998 104.440002 100.620003 103.400002 103.400002 \n", "2019-07-10 104.279999 105.889999 102.089996 103.500000 103.500000 \n", "2019-07-11 103.900002 104.900002 101.559998 104.540001 104.540001 \n", "2019-07-12 104.220001 105.455002 102.120003 102.470001 102.470001 \n", "... ... ... ... ... ... \n", "2020-08-13 148.619003 152.005005 146.809998 149.970001 149.970001 \n", "2020-08-14 150.850006 152.500000 146.199997 146.850006 146.850006 \n", "2020-08-17 147.770004 148.270004 143.360001 145.710007 145.710007 \n", "2020-08-18 147.300003 152.190002 146.509995 149.850006 149.850006 \n", "2020-08-19 149.000000 150.889999 146.173004 147.369995 147.369995 \n", "\n", " Volume \n", "Date \n", "2019-07-08 12268300 \n", "2019-07-09 10727300 \n", "2019-07-10 8519300 \n", "2019-07-11 9091800 \n", "2019-07-12 7524200 \n", "... ... \n", "2020-08-13 5544700 \n", "2020-08-14 3855000 \n", "2020-08-17 4907400 \n", "2020-08-18 5945800 \n", "2020-08-19 4333700 \n", "\n", "[284 rows x 6 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stock_name_list = ['ROKU']\n", "df = yf.download(\"ROKU\", '2019-07-06', '2020-08-20')#df.to_excel('output.xls\n", "df" ] }, { "cell_type": "code", "execution_count": 6, "id": "511c1ae5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "min_ = np.min(df[\"Low\"])\n", "idx_min = np.argmin(df[\"Low\"])\n", "new_df = df[\"Low\"][np.argmin(df[\"Low\"]):]\n", "index = np.arange(np.size(new_df)+1)[1:]\n", "index = np.reshape(index, (np.size(index), -1))\n", "numerator = (new_df - min_)\n", "numerator = numerator.values\n", "numerator = np.reshape(numerator, (np.size(numerator), -1))\n", "ans = numerator/index\n", "slope = np.arctan(ans)\n", "np.argmin(slope[1:])\n", "idx_min_slope = np.argmin(slope[1:])\n", "minimum_slope = np.min(slope[1:])\n", "\n", "\n", "# Note about the calculation done below :-\n", "# Here minimum_slope value and value of printed line's slopw will be diffrerent because printed line\n", "# is based on \"df\" data frame index and calculated slope is based on new_df index, So in order to extent\n", "# the line we need to calculate the slope according to \"df\" data frame's index, in order to do that hrere\n", "# as shown below I am calcu;ating slope value using x and y values given below and finally, \n", "# There calculated slope value \"m\" will be used to extend the trendline (line shown in the figure below)\n", "\n", "# y = (m*x) + c\n", "\n", "x = idx_min\n", "x1 = (idx_min + idx_min_slope + 1) # x value in order to calulate slope \"m\"\n", "y = new_df.values[0] # x value in order to calulate slope \"m\"\n", "y1 = new_df.values[idx_min_slope+1]\n", "\n", "c = y\n", "\n", "Y = (y - y1)\n", "X = x - x1\n", "\n", "m = Y / X # y = mx + c\n", " # y1 = mx1 + c\n", " # - - -\n", " # y-y1 = m*(x-x1)\n", " # m = (y-y1)/(x-x1)\n", "c = y - (m*x) # from the above given illustration we can calculate the value of c using this equation (c = y - mx)\n", "# print(m)\n", "\n", "fig, ax = plt.subplots()\n", "# ax.legend(loc=df[i])\n", "ax.plot(df[\"Low\"][idx_min:], color='r')\n", "\n", "x1, y1 = [idx_min, (idx_min + idx_min_slope + 1)], [new_df.values[0], new_df.values[idx_min_slope+1]]\n", "# x1, y1 = [idx_min,(idx_min + idx_min_slope + 1)], [new_df.values[0], (idx_min + idx_min_slope + 1)]\n", "x2, y2 = [idx_min, np.size(df[\"Low\"])], [new_df.values[0], (m*np.size(df[\"Low\"]) + c)]\n", "\n", "plt.plot(x1, y1, x2, y2, marker = 'o')" ] }, { "cell_type": "code", "execution_count": 7, "id": "5f16a506", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9\n", "103.94000244140625\n", "0\n", "112.11000061035156\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "# ax.legend(loc=df[i])\n", "ax.plot(df[\"Low\"][idx_min:], color='r')\n", "\n", "for _ in range(0,2):\n", " first_index = idx_min + idx_min_slope + 1\n", " new_df_ = new_df[idx_min_slope+1:]\n", " # print(new_df_)\n", " index_ = np.arange(np.size(new_df_)+1)[1:]\n", " index_ = np.reshape(index_, (np.size(index_), -1))\n", " # print(index_)\n", " numerator_ = (new_df_ - new_df_.values[0])\n", " numerator_ = numerator_.values\n", " numerator_ = np.reshape(numerator_, (np.size(numerator_), -1))\n", " ans_ = numerator_/index_\n", " slope_ = np.arctan(ans_)\n", " np.argmin(slope_[1:])\n", " idx_min_slope_ = np.argmin(slope_[1:])\n", " minimum_slope_ = np.min(slope_[1:])\n", " print(idx_min_slope_)\n", " print(new_df_.values[0])\n", " \n", " \n", " x = first_index\n", " x1 = (first_index + idx_min_slope_ + 1) # x value in order to calulate slope \"m\"\n", " y = new_df_.values[0] # x value in order to calulate slope \"m\"\n", " y1 = new_df_.values[idx_min_slope_+1]\n", "\n", " c = y\n", "\n", " Y = (y - y1)\n", " X = x - x1\n", "\n", " m = Y / X # y = mx + c\n", " # y1 = mx1 + c\n", " # - - -\n", " # y-y1 = m*(x-x1)\n", " # m = (y-y1)/(x-x1)\n", " c = y - (m*x) # from the above given illustration we can calculate the value of c using this equation (c = y - mx)\n", " # print(m)\n", " \n", " \n", "# x1, y1 = [first_index, (first_index + idx_min_slope_ + 1)], [new_df_.values[0], new_df_.values[idx_min_slope_+1]]\n", " x2, y2 = [first_index, np.size(df[\"Low\"])], [new_df_.values[0], (m*np.size(df[\"Low\"]) + c)]\n", " \n", " \n", " plt.plot(x2, y2, marker = 'o')\n", " \n", " idx_min_slope = idx_min_slope + idx_min_slope_ + 1\n", " \n", "# TODO: Have to add a slope condition whi" ] }, { "cell_type": "code", "execution_count": null, "id": "770992c1", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }