-
Notifications
You must be signed in to change notification settings - Fork 0
/
SignalGenerator
1 lines (1 loc) · 36.1 KB
/
SignalGenerator
1
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyOm+Z6juykl9qbIPvHyOcII"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"id":"brapkRwpRxK8"},"outputs":[],"source":["import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","plt.style.use('fivethirtyeight')\n","from google.colab import files"]},{"cell_type":"markdown","source":["#***SMA***"],"metadata":{"id":"me6LS0_da1iP"}},{"cell_type":"code","source":["df1 = pd.read_csv('btc_6h.csv')\n","df1 = df1.set_index(pd.DatetimeIndex(df1['datetime'].values))\n","\n","# plt.figure(figsize=(16,8))\n","# plt.title('close price history', fontsize = 18)\n","# plt.plot(df['close'])\n","# plt.xlabel('date' , fontsize = 18)\n","# plt.ylabel('close Price',fontsize = 18)\n","# plt.show()\n","\n","def SMA(data, period = 60, column = 'close'):\n"," return data[column].rolling(window=period).mean()\n","df1['SMA20'] =SMA(df1, 200)\n","df1['SMA50'] =SMA(df1, 500)\n","\n","df1['signal'] = np.where(df1['SMA20'] > df1['SMA50'], 1, 0)\n","df1['position'] = df1['signal'].diff()\n","\n","df1['Buy'] = np.where(df1['position']== 1, df1['close'], np.NAN)\n","df1['sell'] = np.where(df1['position']== -1, df1['close'], np.NAN)\n","\n","# plt.figure(figsize=(16,8))\n","# plt.title('close price history with buy & sell signal', fontsize = 18)\n","# plt.plot(df['close'], alpha = 0.5, label = 'close')\n","# plt.plot(df['SMA20'], alpha = 1, label = 'SMA20')\n","# plt.plot(df['SMA50'], alpha = 1, label = 'SMA50')\n","# plt.scatter(df.index, df['Buy'], alpha = 1, label = 'Buy Signal', marker = '^', color = 'green')\n","# plt.scatter(df.index, df['sell'], alpha = 1, label = 'sell Signal', marker = 'v', color = 'red')\n","\n","# plt.xlabel('date' , fontsize = 18)\n","# plt.ylabel('close Price',fontsize = 18)\n","# plt.legend(['close', 'EMA Short', 'EMA long', 'Buy', 'sell'])\n","# plt.show()\n","\n","df1['SMASig'] = 0\n","df1.loc[df1['position'] == 1, 'SMASig'] = 1\n","df1.loc[df1['position'] == -1, 'SMASig'] = -1\n","columns_to_drop = ['SMA20', 'SMA50', 'signal','position','Buy','sell']\n","df1 = df1.drop(columns=columns_to_drop)\n","df1.to_csv('(1).csv', index=False)"],"metadata":{"id":"kvavDKv9YFZE"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["df2 = pd.read_csv('(1).csv')\n","df2"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"j0BVMgDE8U_L","executionInfo":{"status":"ok","timestamp":1705082966341,"user_tz":-330,"elapsed":16,"user":{"displayName":"Aayush Ujjwal","userId":"13452929503409066436"}},"outputId":"c4016457-b2b8-4452-c572-fc585108d369"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" datetime open high low close \\\n","0 2018-01-01 05:30:00 13715.65 13715.65 13155.38 13558.99 \n","1 2018-01-01 11:30:00 13539.00 13818.55 13001.13 13220.56 \n","2 2018-01-01 17:30:00 13220.56 13330.00 12750.00 13022.00 \n","3 2018-01-01 23:30:00 13007.87 13599.70 12940.00 13380.00 \n","4 2018-01-02 05:30:00 13382.16 13850.00 12890.02 13166.95 \n","... ... ... ... ... ... \n","5954 2022-01-30 05:30:00 38166.83 38300.00 37737.49 38139.39 \n","5955 2022-01-30 11:30:00 38139.38 38359.26 37795.00 38110.02 \n","5956 2022-01-30 17:30:00 38110.03 38153.82 37712.05 37991.00 \n","5957 2022-01-30 23:30:00 37991.00 38230.00 37351.63 37881.76 \n","5958 2022-01-31 05:30:00 37881.75 37951.07 36632.61 37001.65 \n","\n"," volume SMASig \n","0 2421.241182 0 \n","1 1876.934392 0 \n","2 2427.898747 0 \n","3 1883.841523 0 \n","4 3957.954564 0 \n","... ... ... \n","5954 4656.397760 0 \n","5955 6113.435610 0 \n","5956 4075.221880 0 \n","5957 6585.610020 0 \n","5958 8627.985380 0 \n","\n","[5959 rows x 7 columns]"],"text/html":["\n"," <div id=\"df-cc18811c-c75e-41c4-84be-d67362ab20ce\" class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>datetime</th>\n"," <th>open</th>\n"," <th>high</th>\n"," <th>low</th>\n"," <th>close</th>\n"," <th>volume</th>\n"," <th>SMASig</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>2018-01-01 05:30:00</td>\n"," <td>13715.65</td>\n"," <td>13715.65</td>\n"," <td>13155.38</td>\n"," <td>13558.99</td>\n"," <td>2421.241182</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>2018-01-01 11:30:00</td>\n"," <td>13539.00</td>\n"," <td>13818.55</td>\n"," <td>13001.13</td>\n"," <td>13220.56</td>\n"," <td>1876.934392</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>2018-01-01 17:30:00</td>\n"," <td>13220.56</td>\n"," <td>13330.00</td>\n"," <td>12750.00</td>\n"," <td>13022.00</td>\n"," <td>2427.898747</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>2018-01-01 23:30:00</td>\n"," <td>13007.87</td>\n"," <td>13599.70</td>\n"," <td>12940.00</td>\n"," <td>13380.00</td>\n"," <td>1883.841523</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>2018-01-02 05:30:00</td>\n"," <td>13382.16</td>\n"," <td>13850.00</td>\n"," <td>12890.02</td>\n"," <td>13166.95</td>\n"," <td>3957.954564</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>...</th>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," </tr>\n"," <tr>\n"," <th>5954</th>\n"," <td>2022-01-30 05:30:00</td>\n"," <td>38166.83</td>\n"," <td>38300.00</td>\n"," <td>37737.49</td>\n"," <td>38139.39</td>\n"," <td>4656.397760</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5955</th>\n"," <td>2022-01-30 11:30:00</td>\n"," <td>38139.38</td>\n"," <td>38359.26</td>\n"," <td>37795.00</td>\n"," <td>38110.02</td>\n"," <td>6113.435610</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5956</th>\n"," <td>2022-01-30 17:30:00</td>\n"," <td>38110.03</td>\n"," <td>38153.82</td>\n"," <td>37712.05</td>\n"," <td>37991.00</td>\n"," <td>4075.221880</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5957</th>\n"," <td>2022-01-30 23:30:00</td>\n"," <td>37991.00</td>\n"," <td>38230.00</td>\n"," <td>37351.63</td>\n"," <td>37881.76</td>\n"," <td>6585.610020</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5958</th>\n"," <td>2022-01-31 05:30:00</td>\n"," <td>37881.75</td>\n"," <td>37951.07</td>\n"," <td>36632.61</td>\n"," <td>37001.65</td>\n"," <td>8627.985380</td>\n"," <td>0</td>\n"," </tr>\n"," </tbody>\n","</table>\n","<p>5959 rows × 7 columns</p>\n","</div>\n"," <div class=\"colab-df-buttons\">\n","\n"," <div class=\"colab-df-container\">\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-cc18811c-c75e-41c4-84be-d67362ab20ce')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n"," <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n"," </svg>\n"," </button>\n","\n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," .colab-df-buttons div {\n"," margin-bottom: 4px;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-cc18811c-c75e-41c4-84be-d67362ab20ce button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-cc18811c-c75e-41c4-84be-d67362ab20ce');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n","\n","\n","<div id=\"df-baa317d6-e89c-41b1-8077-b207709b5c9b\">\n"," <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-baa317d6-e89c-41b1-8077-b207709b5c9b')\"\n"," title=\"Suggest charts\"\n"," style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <g>\n"," <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n"," </g>\n","</svg>\n"," </button>\n","\n","<style>\n"," .colab-df-quickchart {\n"," --bg-color: #E8F0FE;\n"," --fill-color: #1967D2;\n"," --hover-bg-color: #E2EBFA;\n"," --hover-fill-color: #174EA6;\n"," --disabled-fill-color: #AAA;\n"," --disabled-bg-color: #DDD;\n"," }\n","\n"," [theme=dark] .colab-df-quickchart {\n"," --bg-color: #3B4455;\n"," --fill-color: #D2E3FC;\n"," --hover-bg-color: #434B5C;\n"," --hover-fill-color: #FFFFFF;\n"," --disabled-bg-color: #3B4455;\n"," --disabled-fill-color: #666;\n"," }\n","\n"," .colab-df-quickchart {\n"," background-color: var(--bg-color);\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: var(--fill-color);\n"," height: 32px;\n"," padding: 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-quickchart:hover {\n"," background-color: var(--hover-bg-color);\n"," box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: var(--button-hover-fill-color);\n"," }\n","\n"," .colab-df-quickchart-complete:disabled,\n"," .colab-df-quickchart-complete:disabled:hover {\n"," background-color: var(--disabled-bg-color);\n"," fill: var(--disabled-fill-color);\n"," box-shadow: none;\n"," }\n","\n"," .colab-df-spinner {\n"," border: 2px solid var(--fill-color);\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," animation:\n"," spin 1s steps(1) infinite;\n"," }\n","\n"," @keyframes spin {\n"," 0% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," border-left-color: var(--fill-color);\n"," }\n"," 20% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 30% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," border-right-color: var(--fill-color);\n"," }\n"," 40% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 60% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," }\n"," 80% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-bottom-color: var(--fill-color);\n"," }\n"," 90% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," }\n"," }\n","</style>\n","\n"," <script>\n"," async function quickchart(key) {\n"," const quickchartButtonEl =\n"," document.querySelector('#' + key + ' button');\n"," quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n"," quickchartButtonEl.classList.add('colab-df-spinner');\n"," try {\n"," const charts = await google.colab.kernel.invokeFunction(\n"," 'suggestCharts', [key], {});\n"," } catch (error) {\n"," console.error('Error during call to suggestCharts:', error);\n"," }\n"," quickchartButtonEl.classList.remove('colab-df-spinner');\n"," quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n"," }\n"," (() => {\n"," let quickchartButtonEl =\n"," document.querySelector('#df-baa317d6-e89c-41b1-8077-b207709b5c9b button');\n"," quickchartButtonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n"," })();\n"," </script>\n","</div>\n","\n"," <div id=\"id_ba24ee5a-244a-4620-8c7c-038c7c46ea18\">\n"," <style>\n"," .colab-df-generate {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-generate:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," [theme=dark] .colab-df-generate {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-generate:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n"," <button class=\"colab-df-generate\" onclick=\"generateWithVariable('df2')\"\n"," title=\"Generate code using this dataframe.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n"," </svg>\n"," </button>\n"," <script>\n"," (() => {\n"," const buttonEl =\n"," document.querySelector('#id_ba24ee5a-244a-4620-8c7c-038c7c46ea18 button.colab-df-generate');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," buttonEl.onclick = () => {\n"," google.colab.notebook.generateWithVariable('df2');\n"," }\n"," })();\n"," </script>\n"," </div>\n","\n"," </div>\n"," </div>\n"]},"metadata":{},"execution_count":3}]},{"cell_type":"markdown","source":["# ***EMA***"],"metadata":{"id":"RG5j6LvVf1Hs"}},{"cell_type":"code","source":["df2 = pd.read_csv('(1).csv')\n","\n","df2 = df2.set_index(pd.DatetimeIndex(df2['datetime'].values))\n","\n","df2['ema_short'] = df2['close'].ewm(span = 9, adjust = False).mean()\n","df2['ema_long'] = df2['close'].ewm(span = 21, adjust = False).mean()\n","\n","df2['bullish'] = 0.0\n","df2['bullish'] = np.where(df2['ema_short'] > df2['ema_long'], 1, 0)\n","\n","df2['crossover'] = df2['bullish'].diff()\n","\n","# fig = plt.figure(figsize = (12,8))\n","# axl = fig.add_subplot(111, ylabel = 'price in $')\n","\n","# df2['close'].plot(ax = axl, color = 'b', lw =3.)\n","# df2['ema_short'].plot(ax = axl, color = 'r', lw =3.)\n","# df2['ema_long'].plot(ax = axl, color = 'g', lw =3.)\n","\n","# axl.plot(df2.loc[df2.crossover == 1].index,\n","# df2.close[df2.crossover == 1],\n","# '.', markersize = 5, color = 'g')\n","\n","# axl.plot(df2.loc[df2.crossover == -1].index,\n","# df2.close[df2.crossover == -1],\n","# '.', markersize = 4, color = 'r')\n","\n","# plt.legend(['close', 'EMA Short', 'EMA long', 'Buy', 'sell'])\n","# plt.title('EMA crossover')\n","\n","df2['EMASig'] = 0\n","df2.loc[df2['crossover'] == 1, ['EMASig']] = 1\n","df2.loc[df2['crossover'] == -1, ['EMASig']] = -1\n","columns_to_drop = ['ema_short','ema_long','bullish','crossover']\n","df2 = df2.drop(columns=columns_to_drop)\n","df2.to_csv('(2).csv', index=False)"],"metadata":{"id":"c9TBEXe1f6LA"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["df3 = pd.read_csv(\"(2).csv\")\n","df3"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":423},"id":"meL7Cu4h7jHO","executionInfo":{"status":"ok","timestamp":1705082966342,"user_tz":-330,"elapsed":14,"user":{"displayName":"Aayush Ujjwal","userId":"13452929503409066436"}},"outputId":"826d8f5b-0eef-436f-8ac2-a7157f68f140"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":[" datetime open high low close \\\n","0 2018-01-01 05:30:00 13715.65 13715.65 13155.38 13558.99 \n","1 2018-01-01 11:30:00 13539.00 13818.55 13001.13 13220.56 \n","2 2018-01-01 17:30:00 13220.56 13330.00 12750.00 13022.00 \n","3 2018-01-01 23:30:00 13007.87 13599.70 12940.00 13380.00 \n","4 2018-01-02 05:30:00 13382.16 13850.00 12890.02 13166.95 \n","... ... ... ... ... ... \n","5954 2022-01-30 05:30:00 38166.83 38300.00 37737.49 38139.39 \n","5955 2022-01-30 11:30:00 38139.38 38359.26 37795.00 38110.02 \n","5956 2022-01-30 17:30:00 38110.03 38153.82 37712.05 37991.00 \n","5957 2022-01-30 23:30:00 37991.00 38230.00 37351.63 37881.76 \n","5958 2022-01-31 05:30:00 37881.75 37951.07 36632.61 37001.65 \n","\n"," volume SMASig EMASig \n","0 2421.241182 0 0 \n","1 1876.934392 0 0 \n","2 2427.898747 0 0 \n","3 1883.841523 0 0 \n","4 3957.954564 0 0 \n","... ... ... ... \n","5954 4656.397760 0 0 \n","5955 6113.435610 0 0 \n","5956 4075.221880 0 0 \n","5957 6585.610020 0 0 \n","5958 8627.985380 0 0 \n","\n","[5959 rows x 8 columns]"],"text/html":["\n"," <div id=\"df-b6343a8c-896b-4187-92c4-f2a57af3a4e9\" class=\"colab-df-container\">\n"," <div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>datetime</th>\n"," <th>open</th>\n"," <th>high</th>\n"," <th>low</th>\n"," <th>close</th>\n"," <th>volume</th>\n"," <th>SMASig</th>\n"," <th>EMASig</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>2018-01-01 05:30:00</td>\n"," <td>13715.65</td>\n"," <td>13715.65</td>\n"," <td>13155.38</td>\n"," <td>13558.99</td>\n"," <td>2421.241182</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>2018-01-01 11:30:00</td>\n"," <td>13539.00</td>\n"," <td>13818.55</td>\n"," <td>13001.13</td>\n"," <td>13220.56</td>\n"," <td>1876.934392</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>2018-01-01 17:30:00</td>\n"," <td>13220.56</td>\n"," <td>13330.00</td>\n"," <td>12750.00</td>\n"," <td>13022.00</td>\n"," <td>2427.898747</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>2018-01-01 23:30:00</td>\n"," <td>13007.87</td>\n"," <td>13599.70</td>\n"," <td>12940.00</td>\n"," <td>13380.00</td>\n"," <td>1883.841523</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>2018-01-02 05:30:00</td>\n"," <td>13382.16</td>\n"," <td>13850.00</td>\n"," <td>12890.02</td>\n"," <td>13166.95</td>\n"," <td>3957.954564</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>...</th>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," </tr>\n"," <tr>\n"," <th>5954</th>\n"," <td>2022-01-30 05:30:00</td>\n"," <td>38166.83</td>\n"," <td>38300.00</td>\n"," <td>37737.49</td>\n"," <td>38139.39</td>\n"," <td>4656.397760</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5955</th>\n"," <td>2022-01-30 11:30:00</td>\n"," <td>38139.38</td>\n"," <td>38359.26</td>\n"," <td>37795.00</td>\n"," <td>38110.02</td>\n"," <td>6113.435610</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5956</th>\n"," <td>2022-01-30 17:30:00</td>\n"," <td>38110.03</td>\n"," <td>38153.82</td>\n"," <td>37712.05</td>\n"," <td>37991.00</td>\n"," <td>4075.221880</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5957</th>\n"," <td>2022-01-30 23:30:00</td>\n"," <td>37991.00</td>\n"," <td>38230.00</td>\n"," <td>37351.63</td>\n"," <td>37881.76</td>\n"," <td>6585.610020</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," <tr>\n"," <th>5958</th>\n"," <td>2022-01-31 05:30:00</td>\n"," <td>37881.75</td>\n"," <td>37951.07</td>\n"," <td>36632.61</td>\n"," <td>37001.65</td>\n"," <td>8627.985380</td>\n"," <td>0</td>\n"," <td>0</td>\n"," </tr>\n"," </tbody>\n","</table>\n","<p>5959 rows × 8 columns</p>\n","</div>\n"," <div class=\"colab-df-buttons\">\n","\n"," <div class=\"colab-df-container\">\n"," <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b6343a8c-896b-4187-92c4-f2a57af3a4e9')\"\n"," title=\"Convert this dataframe to an interactive table.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n"," <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n"," </svg>\n"," </button>\n","\n"," <style>\n"," .colab-df-container {\n"," display:flex;\n"," gap: 12px;\n"," }\n","\n"," .colab-df-convert {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-convert:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," .colab-df-buttons div {\n"," margin-bottom: 4px;\n"," }\n","\n"," [theme=dark] .colab-df-convert {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-convert:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n","\n"," <script>\n"," const buttonEl =\n"," document.querySelector('#df-b6343a8c-896b-4187-92c4-f2a57af3a4e9 button.colab-df-convert');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," async function convertToInteractive(key) {\n"," const element = document.querySelector('#df-b6343a8c-896b-4187-92c4-f2a57af3a4e9');\n"," const dataTable =\n"," await google.colab.kernel.invokeFunction('convertToInteractive',\n"," [key], {});\n"," if (!dataTable) return;\n","\n"," const docLinkHtml = 'Like what you see? Visit the ' +\n"," '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n"," + ' to learn more about interactive tables.';\n"," element.innerHTML = '';\n"," dataTable['output_type'] = 'display_data';\n"," await google.colab.output.renderOutput(dataTable, element);\n"," const docLink = document.createElement('div');\n"," docLink.innerHTML = docLinkHtml;\n"," element.appendChild(docLink);\n"," }\n"," </script>\n"," </div>\n","\n","\n","<div id=\"df-108fed19-a909-41b0-bd8a-c5ff5b6fab75\">\n"," <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-108fed19-a909-41b0-bd8a-c5ff5b6fab75')\"\n"," title=\"Suggest charts\"\n"," style=\"display:none;\">\n","\n","<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <g>\n"," <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n"," </g>\n","</svg>\n"," </button>\n","\n","<style>\n"," .colab-df-quickchart {\n"," --bg-color: #E8F0FE;\n"," --fill-color: #1967D2;\n"," --hover-bg-color: #E2EBFA;\n"," --hover-fill-color: #174EA6;\n"," --disabled-fill-color: #AAA;\n"," --disabled-bg-color: #DDD;\n"," }\n","\n"," [theme=dark] .colab-df-quickchart {\n"," --bg-color: #3B4455;\n"," --fill-color: #D2E3FC;\n"," --hover-bg-color: #434B5C;\n"," --hover-fill-color: #FFFFFF;\n"," --disabled-bg-color: #3B4455;\n"," --disabled-fill-color: #666;\n"," }\n","\n"," .colab-df-quickchart {\n"," background-color: var(--bg-color);\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: var(--fill-color);\n"," height: 32px;\n"," padding: 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-quickchart:hover {\n"," background-color: var(--hover-bg-color);\n"," box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: var(--button-hover-fill-color);\n"," }\n","\n"," .colab-df-quickchart-complete:disabled,\n"," .colab-df-quickchart-complete:disabled:hover {\n"," background-color: var(--disabled-bg-color);\n"," fill: var(--disabled-fill-color);\n"," box-shadow: none;\n"," }\n","\n"," .colab-df-spinner {\n"," border: 2px solid var(--fill-color);\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," animation:\n"," spin 1s steps(1) infinite;\n"," }\n","\n"," @keyframes spin {\n"," 0% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," border-left-color: var(--fill-color);\n"," }\n"," 20% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 30% {\n"," border-color: transparent;\n"," border-left-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," border-right-color: var(--fill-color);\n"," }\n"," 40% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-top-color: var(--fill-color);\n"," }\n"," 60% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," }\n"," 80% {\n"," border-color: transparent;\n"," border-right-color: var(--fill-color);\n"," border-bottom-color: var(--fill-color);\n"," }\n"," 90% {\n"," border-color: transparent;\n"," border-bottom-color: var(--fill-color);\n"," }\n"," }\n","</style>\n","\n"," <script>\n"," async function quickchart(key) {\n"," const quickchartButtonEl =\n"," document.querySelector('#' + key + ' button');\n"," quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n"," quickchartButtonEl.classList.add('colab-df-spinner');\n"," try {\n"," const charts = await google.colab.kernel.invokeFunction(\n"," 'suggestCharts', [key], {});\n"," } catch (error) {\n"," console.error('Error during call to suggestCharts:', error);\n"," }\n"," quickchartButtonEl.classList.remove('colab-df-spinner');\n"," quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n"," }\n"," (() => {\n"," let quickchartButtonEl =\n"," document.querySelector('#df-108fed19-a909-41b0-bd8a-c5ff5b6fab75 button');\n"," quickchartButtonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n"," })();\n"," </script>\n","</div>\n","\n"," <div id=\"id_a8ab8ff8-4253-4c15-ad41-333daaa132cf\">\n"," <style>\n"," .colab-df-generate {\n"," background-color: #E8F0FE;\n"," border: none;\n"," border-radius: 50%;\n"," cursor: pointer;\n"," display: none;\n"," fill: #1967D2;\n"," height: 32px;\n"," padding: 0 0 0 0;\n"," width: 32px;\n"," }\n","\n"," .colab-df-generate:hover {\n"," background-color: #E2EBFA;\n"," box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n"," fill: #174EA6;\n"," }\n","\n"," [theme=dark] .colab-df-generate {\n"," background-color: #3B4455;\n"," fill: #D2E3FC;\n"," }\n","\n"," [theme=dark] .colab-df-generate:hover {\n"," background-color: #434B5C;\n"," box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n"," filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n"," fill: #FFFFFF;\n"," }\n"," </style>\n"," <button class=\"colab-df-generate\" onclick=\"generateWithVariable('df3')\"\n"," title=\"Generate code using this dataframe.\"\n"," style=\"display:none;\">\n","\n"," <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n"," width=\"24px\">\n"," <path d=\"M7,19H8.4L18.45,9,17,7.55,7,17.6ZM5,21V16.75L18.45,3.32a2,2,0,0,1,2.83,0l1.4,1.43a1.91,1.91,0,0,1,.58,1.4,1.91,1.91,0,0,1-.58,1.4L9.25,21ZM18.45,9,17,7.55Zm-12,3A5.31,5.31,0,0,0,4.9,8.1,5.31,5.31,0,0,0,1,6.5,5.31,5.31,0,0,0,4.9,4.9,5.31,5.31,0,0,0,6.5,1,5.31,5.31,0,0,0,8.1,4.9,5.31,5.31,0,0,0,12,6.5,5.46,5.46,0,0,0,6.5,12Z\"/>\n"," </svg>\n"," </button>\n"," <script>\n"," (() => {\n"," const buttonEl =\n"," document.querySelector('#id_a8ab8ff8-4253-4c15-ad41-333daaa132cf button.colab-df-generate');\n"," buttonEl.style.display =\n"," google.colab.kernel.accessAllowed ? 'block' : 'none';\n","\n"," buttonEl.onclick = () => {\n"," google.colab.notebook.generateWithVariable('df3');\n"," }\n"," })();\n"," </script>\n"," </div>\n","\n"," </div>\n"," </div>\n"]},"metadata":{},"execution_count":5}]},{"cell_type":"markdown","source":["# ***MeanReversion***"],"metadata":{"id":"CllLePJdnp7c"}},{"cell_type":"code","source":["df3 = pd.read_csv(\"(2).csv\")\n","# Assuming 'df' is your DataFrame with datetime as index and 'close' as closing prices\n","window_size = 20 # Choose an appropriate window size\n","\n","# Calculate rolling mean and standard deviation\n","df3['rolling_mean'] = df3['close'].rolling(window=window_size).mean()\n","df3['rolling_std'] = df3['close'].rolling(window=window_size).std()\n","\n","# Choose an appropriate threshold for mean deviation\n","threshold = 1.0 # Adjust as needed\n","\n","# Generate signals\n","df3['buy_signal'] = df3['close'] < (df3['rolling_mean'] - threshold * df3['rolling_std'])\n","df3['sell_signal'] = df3['close'] > (df3['rolling_mean'] + threshold * df3['rolling_std'])\n","\n","# # Plot actual prices, rolling mean, and buy/sell signals\n","# plt.figure(figsize=(10, 6))\n","# plt.plot(df['close'], label='Actual Prices', color='black')\n","# plt.plot(df['rolling_mean'], label='Rolling Mean', color='blue')\n","# plt.scatter(df.index[df['buy_signal']], df['close'][df['buy_signal']], label='Buy Signal', marker='^', color='green')\n","# plt.scatter(df.index[df['sell_signal']], df['close'][df['sell_signal']], label='Sell Signal', marker='v', color='red')\n","# plt.legend()\n","# plt.title('Actual Prices vs. Mean Reversion Strategy')\n","# plt.xlabel('Date')\n","# plt.ylabel('Price')\n","# plt.show()\n","\n","df3['MeanRevSig'] = 0 # Initialize MeanRevSig column with zeros\n","\n","# Apply conditions\n","df3.loc[(df3['buy_signal'] == True) & (df3['sell_signal'] == False), 'MeanRevSig'] = 1\n","df3.loc[(df3['buy_signal'] == False) & (df3['sell_signal'] == True), 'MeanRevSig'] = -1\n","columns_to_drop = ['rolling_mean','rolling_std','buy_signal','sell_signal']\n","df3 = df3.drop(columns=columns_to_drop)\n","df3.to_csv('(3).csv', index=False)"],"metadata":{"id":"68pBYwSGn1u8"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["# ***Combining***"],"metadata":{"id":"cmMWCQov5YaB"}},{"cell_type":"code","source":["df = pd.read_csv(\"(3).csv\")\n","\n","df['FinalSig'] = 0\n","\n","# Define conditions using bitwise operators\n","condition_3 = (df['MeanRevSig'] + df['SMASig'] + df['EMASig'] == 3)\n","condition_2 = (df['MeanRevSig'] + df['SMASig'] + df['EMASig'] == 2)\n","condition_1 = (df['MeanRevSig'] + df['SMASig'] + df['EMASig'] == 1)\n","condition_minus_1 = (df['MeanRevSig'] + df['SMASig'] + df['EMASig'] == -1)\n","condition_minus_2 = (df['MeanRevSig'] + df['SMASig'] + df['EMASig'] == -2)\n","condition_minus_3 = (df['MeanRevSig'] + df['SMASig'] + df['EMASig'] == -3)\n","\n","# Apply conditions to set FinalSig\n","df.loc[condition_3, 'FinalSig'] = 2\n","df.loc[condition_2, 'FinalSig'] = 2\n","df.loc[condition_1, 'FinalSig'] = 1\n","df.loc[condition_minus_1, 'FinalSig'] = -1\n","df.loc[condition_minus_2, 'FinalSig'] = -2\n","df.loc[condition_minus_3, 'FinalSig'] = -2\n"],"metadata":{"id":"soeHv5II8phT"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["# ***Saving and Downloading***"],"metadata":{"id":"6W8xWD1wCWej"}},{"cell_type":"code","source":["df.to_csv('btc_6hSignals.csv', index=False)"],"metadata":{"id":"8i-W3fj1CUM_"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["files.download('btc_6hSignals.csv')"],"metadata":{"id":"5eyf4as_GL6l"},"execution_count":null,"outputs":[]}]}