From c26ea202d346e8280bf80046d1a3a4e12dc1d44a Mon Sep 17 00:00:00 2001 From: Rishikesh Tripathy Date: Fri, 6 Jan 2023 14:36:10 +0530 Subject: [PATCH] Create 300_macd_signal_rishi.ipynb Logic for buy & sell signal --- 300_macd_signal_rishi.ipynb | 742 ++++++++++++++++++++++++++++++++++++ 1 file changed, 742 insertions(+) create mode 100644 300_macd_signal_rishi.ipynb diff --git a/300_macd_signal_rishi.ipynb b/300_macd_signal_rishi.ipynb new file mode 100644 index 0000000..998b30c --- /dev/null +++ b/300_macd_signal_rishi.ipynb @@ -0,0 +1,742 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "db2b395c", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from mod_my_utils.read_write_data import get_price_csv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7051dcb5", + "metadata": {}, + "outputs": [], + "source": [ + "folder_path = 'data/'\n", + "stock_name = 'AAPL'\n", + "index_col = 'Date'" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "93205543", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "stock name: AAPL\n" + ] + } + ], + "source": [ + "stock_data = get_price_csv(folder_name=folder_path,symbol=stock_name, index_col=index_col)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6c84a0fa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Price
Date
2007-12-0322.986003
2007-12-0423.108091
2007-12-0523.839335
2007-12-0624.411582
2007-12-0724.970258
\n", + "
" + ], + "text/plain": [ + " Price\n", + "Date \n", + "2007-12-03 22.986003\n", + "2007-12-04 23.108091\n", + "2007-12-05 23.839335\n", + "2007-12-06 24.411582\n", + "2007-12-07 24.970258" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = stock_data[[\"Adj. Close\"]].copy()\n", + "data.columns = [\"Price\"] \n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "90dba1f4", + "metadata": {}, + "outputs": [], + "source": [ + "data['MA50'] = data['Price'].rolling(window=50, min_periods=1).mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "38ad3416", + "metadata": {}, + "outputs": [], + "source": [ + "data['MA250'] = data['Price'].rolling(window=250, min_periods=1).mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "fd768650", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PriceMA50MA250
Date
2007-12-0322.98600322.98600322.986003
2007-12-0423.10809123.04704723.047047
2007-12-0523.83933523.31114323.311143
2007-12-0624.41158223.58625323.586253
2007-12-0724.97025823.86305423.863054
\n", + "
" + ], + "text/plain": [ + " Price MA50 MA250\n", + "Date \n", + "2007-12-03 22.986003 22.986003 22.986003\n", + "2007-12-04 23.108091 23.047047 23.047047\n", + "2007-12-05 23.839335 23.311143 23.311143\n", + "2007-12-06 24.411582 23.586253 23.586253\n", + "2007-12-07 24.970258 23.863054 23.863054" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "17a275cd", + "metadata": {}, + "outputs": [], + "source": [ + "data['MACD'] = data['MA50'] - data['MA250']" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "3569b5ee", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PriceMA50MA250MACD
Date
2007-12-0322.98600322.98600322.9860030.000000
2007-12-0423.10809123.04704723.0470470.000000
2007-12-0523.83933523.31114323.3111430.000000
2007-12-0624.41158223.58625323.5862530.000000
2007-12-0724.97025823.86305423.8630540.000000
...............
2008-05-0523.74038018.65773119.790365-1.132634
2008-05-0623.98841218.82973419.829599-0.999865
2008-05-0723.46536018.99279219.863263-0.870471
2008-05-0823.78278919.15240719.899222-0.746816
2008-05-0923.57588219.29001919.932646-0.642627
\n", + "

110 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " Price MA50 MA250 MACD\n", + "Date \n", + "2007-12-03 22.986003 22.986003 22.986003 0.000000\n", + "2007-12-04 23.108091 23.047047 23.047047 0.000000\n", + "2007-12-05 23.839335 23.311143 23.311143 0.000000\n", + "2007-12-06 24.411582 23.586253 23.586253 0.000000\n", + "2007-12-07 24.970258 23.863054 23.863054 0.000000\n", + "... ... ... ... ...\n", + "2008-05-05 23.740380 18.657731 19.790365 -1.132634\n", + "2008-05-06 23.988412 18.829734 19.829599 -0.999865\n", + "2008-05-07 23.465360 18.992792 19.863263 -0.870471\n", + "2008-05-08 23.782789 19.152407 19.899222 -0.746816\n", + "2008-05-09 23.575882 19.290019 19.932646 -0.642627\n", + "\n", + "[110 rows x 4 columns]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.head(110)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "e6bce5db", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "data['MACD'].plot()" + ] + }, + { + "cell_type": "markdown", + "id": "29c47e0a", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "2044e328", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "fe1e58f8", + "metadata": {}, + "source": [ + "if macd > 0:\n", + "middle = 1\n", + "else:\n", + "middle = 0\n", + "\n", + "\n", + "diff(middle)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "69452958", + "metadata": {}, + "outputs": [], + "source": [ + "df = data.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "89f7c115", + "metadata": {}, + "outputs": [], + "source": [ + "df['middle'] = np.where(df['MACD'] > 0, 1, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "b6251cff", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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IowAAABXEUYAAICrCCMAAMBVhBEAAOAqwggAAHAVYQQAALjKyi/KO57vUSilpaUuVwIAAGrL97l9qkeaeSKM7Nu3T5Ic+eZeAADgrH379qlFixY1/t4TT2CtqqrSjh071KxZM0VFRTn2PqWlpUpMTNT27ds986RXag4Nag4NL9YsebNuag6NSK/ZGKN9+/apQ4cOAV8VczxPjIxER0erU6dOIXu/5s2be6bR+FBzaFBzaHixZsmbdVNzaERyzScbEfFhAisAAHAVYQQAALiKMHKM2NhY5eTkKDY21u1Sao2aQ4OaQ8OLNUverJuaQ4Oaa8cTE1gBAED4YmQEAAC4ijACAABcRRgBAACuIowAAABXEUYAhBRz5gEcL2LCSElJifbs2aOqqipJ8v+vzQ4dOhTwby904vv27Quo0ws1+2r0QpvwOXz4sNsl1MuePXt05MgR/7+90D6+/PJLffnll5IUULvN1q5dq7/85S+qrKx0u5Ra27Rpkx5//HFt3LjR7VJqbfPmzRoyZIief/55Sd5oz0VFRdqxY4f/88WWfi/sw0hFRYUmT56sIUOGaOTIkbrxxhtVWVl50mfku62iokK33HKLrrnmGmVkZOif//ynjDGOfi/P6aqoqNDNN9+sESNG6PLLL9fixYslyfqa77//fv3xj3+UJKvbhE95ebluu+02jR8/XhkZGfrggw/cLqlWysvLdeutt+rSSy/VZZddpkcffVRVVVVWtw9Jeu+999StWzddffXVkqQGDez+Bo3y8nJNnDhRffr00SeffOKJNl1ZWalbb71VvXv31vr161VSUuJ2SadUXl6ujIwMnXPOOVq+fLk+//xzSfb3dzfffLPS0tI0evRoXXrppTp8+LA1bcSOKhyyefNmnXfeedq4caOefPJJjRw5UitXrtRvfvMbt0ur0dq1a5WcnKx169bp+uuvV1FRkX71q1/p/vvvl2RPij3Wnj17dNFFF2nt2rX65S9/qYqKCt13333Kyspyu7QavfPOO0pNTdWDDz6oxYsXa9OmTZLs3L8+r7/+urp27ao1a9Zo6NChWrNmjbKzs/WXv/zF7dJOatGiRerSpYs+//xz3XnnnerYsaNeeuklPffcc26XdkobN27UkCFDVFJSoqeeekqSvaMjv//979WmTRtt2LBBn3zyiR566CGrPxx95syZo//85z/65z//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7rvvJEmfffZZwDpu1ewbIZMCZ+v/61//0v79+9W9e3f/suLi4pDUeqza7GvfPpwzZ44uvvhiNWrUSN26ddOAAQNUVVUV8sump6q5qqpKxhj1799fixYtUr9+/fSHP/xBY8eOVePGjbV3715FRUWFdDJrbdpHSkqK7r33XrVp08a/LCkpSU2bNpUxRgcOHAhZvbWpuVWrVv724LvL0fx3ZKFXr15q1KiR1q9fb0XNNd11EhcXp9jY2BMexRBKJ+ujfZKSkvT9998rJiZG119/vf+YHDx4sMrLy/Xpp5+6Urufq1GonnxnJFu2bDEtW7Y0S5YsCfj9ddddZ3r27Gk2b95sjDl61jtq1Cizd+9e/zoPP/ywGTJkiDlw4IA1Nffo0cOfaI/fdtOmTaZ79+4BidZpvrOXDz/80Nx9991m27Zt5rHHHjM9evQw77//vjHG+Cf07d6921xxxRVmyJAhZsOGDf7XuP76682ECROsqvnYM8ljPf/882bw4MHmxhtvNH369DHt27cPychZfWu++eabzbhx44wxxqxevdoMHTrUXHHFFTWewdlS97GmTJni/xtCoS41l5SUmLi4OBMXF2emTp1qSkpKTElJibn22mtNQkKClTVX5+DBg+aiiy4yd9xxRyjKDainNn3H/v37zfTp001UVJRZunSp/zUef/xxc8kll1jdnn39+uDBg01GRoYxpuYRFBtqfvHFF01ycrIpKiryL5s3b55JTU01JSUlIau7Op4KI1988UXA0OihQ4dM+/btzfz5840xPzTuPXv2mMaNG5tHH33UGGPMc889Z8477zxzySWXmFdeecXceOONpl27diYvL8+6mn2Xa3zb7Ny50+zYscOMGzfOnH/++SFpMMfXbMwPw31r1641P/3pTwOGfH2/++CDD8yll15qWrZsaW6//XYzfvx407p1a/OPf/wj4G+yoeZj1/X9/4KCAtOmTRsTFRVlpkyZYg4fPuxYvadbc2Vlpbn88svNb37zGzN16lQTHR1tMjIyTHl5uaM1n27dxhxt69u2bTM33XST6dy5s5Xtw7cf//73v5uPPvooYLu3337bPPjgg6aqqsqqmqvbz4WFhebGG280PXv2NAUFBY7VWt+afR+UW7ZsMRkZGaZJkybmyiuvNOPGjTOtW7c2f/rTn4wxdrWN49etqqoy06ZNM4MGDfJfpnZaXWv2BaSlS5eaCy+80PTq1cvk5eWZzMxM07p1a/PEE0+EpO6T8UQYWbx4sUlKSjI9evQwAwcONM8884wx5miizsjIMMOHD/d/qPs6kezsbHPWWWf5X+OFF14wQ4YMMYMHDzYjR44MOHu3qeakpCT/a+zYscPMmDHDtGrVygwZMsRs2bLFlZqNCTwAFyxYYM4991yzYMECY0zgdcnDhw+be++912RkZJgrr7zStf18qpqPP3t58cUXTUxMjBk2bJj58ssvra+5sLDQREVFmaioKDNo0CCzbt06R2sOVt3vvPOOmT59uklISDBDhw41X3zxhZU1Vzci5lvf6bkiwdjPb731lpkyZYpp06aNGTp0qNm0aZOVNR+/n/Py8swdd9xhMjMzPdN3GGPM5MmTzZQpU/x9um01H7uf//Wvf5nRo0eb4cOHm8svv9zx/Vxb1oeRd955xyQlJZl58+aZJUuWmKysLNOgQQP/yMLChQtNv379/Anat9M/+ugj065dO/Pvf//b/1oVFRUBw1O21uw7E6uoqDDvv/++yc/Pd6Xmhg0bmvnz5/snkPnq/Prrr83EiRPNeeedF/AMl2OdanjehpqPHUVYv369+fvf/259zb79vHbtWjN27NiAYW0v1F1YWGieeeYZ895771lfcyhGmYJds28/b9261cybN8+8++671tfsxf3sq9nXz4Xibzjdmo8d6a2srDR79uxxvOa6sDaM+FLerFmzTEpKSsB/7FtuucX069fPvP3226a0tNSMHz/eDBo0KGC+xeLFi02HDh0cH00I95oHDBhgXn311RO2+8c//mEGDBhgcnJyzH/+8x8zatQoU1hYSM0O13zZZZeFrOZg1u3Ffe3FmkPZPiJ5P1Nz8Fl7N43vroF169apS5cuatiwof8+6IceekhNmjTRCy+8oJiYGN16662Kjo7Wz372M61YsUKFhYV68803lZKS4n/ICzXXr+a4uDj99a9/PeFxx8OGDdPAgQP1wAMPKCUlRRUVFSG70yeSaz5y5EhI76iK5H3txZpD2T4ieT9TswPcTkM+77zzjvnlL39pnnjiiYBLK/PnzzfNmjU7YThs/vz5pmvXrmb58uXGGGM2bNhgUlJSTI8ePUx8fLzp16+f49fCIqXm7t27m2XLlvnX3b9/v3niiSdMTEyMGTp0qPn000+pOQxq9mrd1EzN1Ox+33G6XA8jO3bsMKNGjTLt27c348ePN7179zYtWrTw/0fYuHGj6dixo7nvvvuMMYFzExISEsycOXP8/963b5/56quvHH8IVCTWfOxs688//9ykpqY6fpsxNYemZq/WTc3UTM3u1hxMroaRAwcOmAkTJpixY8cGzJMYOHCgueGGG4wxxpSWlpqHHnrInHHGGf7rXb5raBdeeKG56aab/NuF4omI1Bwa1Ezd1EzN1GxvzcHm6pyRxo0bKzY2VjfccIM6d+7sf5rhyJEjtX79ehlj1KxZM1133XXq37+/rr32Wm3btk1RUVEqLCzUrl27NGbMGP/rheLrsqk5NKiZuqmZmqnZ3pqDzqUQ5HfszGDf/dvXXXedmTRpUsB6X3/9tenatatJSkoyV199tenQoYO56KKLQnKr7vGoOTSoOXS8WDc1hwY1h4YXaw6mKGNc/orBagwePFiTJk3ShAkT/M/Pj46O1ubNm1VQUKB///vfSk5O9n+dug2oOTSoOXS8WDc1hwY1h4YXa643t9PQ8b788ksTHx9vPv74Y/8yp59qd7qoOTSoOXS8WDc1hwY1h4YXaz4d1jxnxPx3gGb58uVq2rSpUlJSJEmzZs3StGnTtGvXLjfLqxY1hwY1h44X66bm0KDm0PBizcHQ4NSrhIZvIueqVat01VVXaenSpfrFL36hgwcP6vnnn7fyYS3UHBrUHDperJuaQ4OaQ8OLNQeFSyMy1Tp06JDp2rWriYqKMrGxseaRRx5xu6RToubQoObQ8WLd1Bwa1BwaXqz5dFk3gfWSSy5Rt27dNGfOHMXFxbldTq1Qc2hQc+h4sW5qDg1qDg0v1nw6rAsjlZWViomJcbuMOqHm0KDm0PFi3dQcGtQcGl6s+XRYF0YAAEBkseZuGgAAEJkIIwAAwFWEEQAA4CrCCAAAcBVhBAAAuIowAgAAXEUYAQAAriKMADhtN9xwg6KiohQVFaWGDRsqPj5el1xyiRYsWOD/6vPaWLhwoVq2bOlcoQCsRBgBEBQjRozQzp07tXXrVr311lsaNmyYpk2bplGjRunIkSNulwfAYoQRAEERGxurhIQEdezYUf3799c999yjv/71r3rrrbe0cOFCSdKcOXPUu3dvNWnSRImJibrlllu0f/9+SdKyZcuUmZmpvXv3+kdZ7r//fklSWVmZbr/9dnXs2FFNmjRRamqqli1b5s4fCiDoCCMAHHPRRRcpOTlZr776qiQpOjpav/vd7/T555/rueee03vvvac777xTkjRo0CDNnTtXzZs3186dO7Vz507dfvvtkqSpU6dq5cqVeumll/Tpp5/qmmuu0YgRI7Rp0ybX/jYAwcN30wA4bTfccIP27Nmj119//YTf/exnP9Onn36qdevWnfC7V155RZMnT9bu3bslHZ0zMn36dO3Zs8e/TmFhoc4++2wVFhaqQ4cO/uXp6ekaOHCgHn744aD/PQBCq4HbBQAIb8YYRUVFSZLeffdd5ebmasOGDSotLdWRI0d0+PBhHTx4UI0bN652+88++0yVlZXq3r17wPKysjK1adPG8foBOI8wAsBR69evV+fOnbV161aNGjVKU6ZM0a9//Wu1bt1ay5cv18SJE1VeXl5jGNm/f79iYmJUUFBwwleqN23aNBR/AgCHEUYAOOa9997TZ599pttuu00FBQWqqqrS7NmzFR19dLrayy+/HLB+o0aNVFlZGbCsX79+qqys1K5du3TBBReErHYAoUMYARAUZWVlKioqUmVlpYqLi7VkyRLl5uZq1KhRysjI0Nq1a1VRUaHf//73Gj16tP71r38pLy8v4DWSkpK0f/9+5efnKzk5WY0bN1b37t01fvx4ZWRkaPbs2erXr59KSkqUn5+vPn366LLLLnPpLwYQLNxNAyAolixZojPPPFNJSUkaMWKE3n//ff3ud7/TX//6V8XExCg5OVlz5szRo48+ql69eunFF19Ubm5uwGsMGjRIkydP1tixY9WuXTs99thjkqRnn31WGRkZ+tWvfqUePXpozJgx+uijj3TWWWe58acCCDLupgEAAK5iZAQAALiKMAIAAFxFGAEAAK4ijAAAAFcRRgAAgKsIIwAAwFWEEQAA4CrCCAAAcBVhBAAAuIowAgAAXEUYAQAAriKMAAAAV/1/YjpvF2kK+n4AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df['middle'].plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "a2b0b6f4", + "metadata": {}, + "outputs": [], + "source": [ + "df['diff_middle'] = df['middle'] - df['middle'].shift(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "0b17b90c", + "metadata": {}, + "outputs": [], + "source": [ + "def calc_signal(n):\n", + " if n == -1:\n", + " return 'sell'\n", + " elif n == 1:\n", + " return 'buy'\n", + " else: \n", + " return 'hold'" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "53bc4cef", + "metadata": {}, + "outputs": [], + "source": [ + "df['buy_sell'] = df['diff_middle'].apply(calc_signal)" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "a4411852", + "metadata": {}, + "outputs": [], + "source": [ + "df.drop(['middle', 'diff_middle'], axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "9d71b073", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PriceMA50MA250MACDbuy_sell
Date
2007-12-0322.98600322.98600322.9860030.000000hold
2007-12-0423.10809123.04704723.0470470.000000hold
2007-12-0523.83933523.31114323.3111430.000000hold
2007-12-0624.41158223.58625323.5862530.000000hold
2007-12-0724.97025823.86305423.8630540.000000hold
..................
2017-11-27174.090000162.113916144.21069717.903219hold
2017-11-28173.070000162.377716144.46220917.915507hold
2017-11-29169.480000162.593916144.69979617.894120hold
2017-11-30171.850000162.856316144.95057617.905740hold
2017-12-01171.050000163.155916145.20222617.953690hold
\n", + "

2517 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Price MA50 MA250 MACD buy_sell\n", + "Date \n", + "2007-12-03 22.986003 22.986003 22.986003 0.000000 hold\n", + "2007-12-04 23.108091 23.047047 23.047047 0.000000 hold\n", + "2007-12-05 23.839335 23.311143 23.311143 0.000000 hold\n", + "2007-12-06 24.411582 23.586253 23.586253 0.000000 hold\n", + "2007-12-07 24.970258 23.863054 23.863054 0.000000 hold\n", + "... ... ... ... ... ...\n", + "2017-11-27 174.090000 162.113916 144.210697 17.903219 hold\n", + "2017-11-28 173.070000 162.377716 144.462209 17.915507 hold\n", + "2017-11-29 169.480000 162.593916 144.699796 17.894120 hold\n", + "2017-11-30 171.850000 162.856316 144.950576 17.905740 hold\n", + "2017-12-01 171.050000 163.155916 145.202226 17.953690 hold\n", + "\n", + "[2517 rows x 5 columns]" + ] + }, + "execution_count": 82, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}