Skip to content

Instantly share code, notes, and snippets.

@ammarhaiderak
Last active April 18, 2024 13:38
Show Gist options
  • Select an option

  • Save ammarhaiderak/c94fc38bf061dbe50352112efea620da to your computer and use it in GitHub Desktop.

Select an option

Save ammarhaiderak/c94fc38bf061dbe50352112efea620da to your computer and use it in GitHub Desktop.
Apple Stock Analysis using yFinance and Pandas
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyNff3qanC9hYAJLLR/e7Lad",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/ammarhaiderak/c94fc38bf061dbe50352112efea620da/connorsrsi.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "YEbWkFyHpjWc"
},
"outputs": [],
"source": [
"# install required packages\n",
"! pip install pandas\n",
"! pip install yfinance\n",
"! pip install pandas_ta\n",
"! pip install matplotlib\n",
"! pip install numpy"
]
},
{
"cell_type": "code",
"source": [
"def streak(df):\n",
" siz = df['Close'].shape[0]\n",
" # df['streak'] = 0\n",
" for i in range(1, siz):\n",
" if df.loc[i-1, 'streak'] >= 0:\n",
" if df.loc[i, 'Close'] > df.loc[i-1, 'Close']: # continuing positive streak\n",
" df.loc[i, 'streak'] = df.loc[i-1, 'streak'] + 1\n",
" elif df.loc[i, 'Close'] < df.loc[i-1, 'Close']: # starting a new negative streak\n",
" df.loc[i, 'streak'] = -1\n",
" else:\n",
" df.loc[i, 'streak'] = 0\n",
" elif df.loc[i-1, 'streak'] <= 0:\n",
" if df.loc[i, 'Close'] > df.loc[i-1, 'Close']: # starting a new positive streak\n",
" df.loc[i, 'streak'] = 1\n",
" elif df.loc[i, 'Close'] < df.loc[i-1, 'Close']: # continuing neg streak\n",
" df.loc[i, 'streak'] = df.loc[i-1, 'streak'] - 1\n",
" else:\n",
" df.loc[i, 'streak'] = 0\n",
" return df\n",
"\n",
"\n",
"# streak(df).head()"
],
"metadata": {
"id": "mpTb_mQ91Vp4"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"def get_streaks_rsi(df, length):\n",
" # logic tables\n",
" closing_prices = df['Close']\n",
" series = pd.DataFrame(closing_prices)\n",
" geq = series >= series.shift(1) # True if rising\n",
" eq = series == series.shift(1) # True if equal\n",
" logic_table = pd.concat([geq, eq], axis=1)\n",
"\n",
" streaks = [0] # holds the streak duration, starts with 0\n",
"\n",
" for row in logic_table.iloc[1:].itertuples(): # iterate through logic table\n",
" if row[2]: # same value as before\n",
" streaks.append(0)\n",
" continue\n",
" last_value = streaks[-1]\n",
" if row[1]: # higher value than before\n",
" streaks.append(last_value + 1 if last_value >= 0 else 1) # increase or reset to +1\n",
" else: # lower value than before\n",
" streaks.append(last_value - 1 if last_value < 0 else -1) # decrease or reset to -1\n",
"\n",
" df['streaks_numpy'] = np.array(streaks, dtype=float)\n",
" df['second-rsi'] = ta.momentum.rsi(df['streaks_numpy'], length)\n",
" return df\n",
"# get_streaks_rsi(df['Close'], 2)"
],
"metadata": {
"id": "X9e_lQc_oZSu"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import pandas as pd\n",
"import pandas_ta as ta\n",
"import yfinance as yf\n",
"\n",
"df = pd.DataFrame() # Empty DataFrame\n",
"\n",
"# Valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo\n",
"# 1mo => 5m, 15m, 30m, 1h\n",
"# 1d => 1m\n",
"# 1y => 1d\n",
"\n",
"df = df.ta.ticker(\"aapl\", period='1y', interval='1d')\n",
"\n",
"\n",
"df.reset_index(inplace=True)\n",
"df['id'] = [x for x in range(df.shape[0])]\n",
"df.set_index(df['id'], inplace=True)\n",
"\n",
"\n",
"df.head()\n",
"df['streak'] = 0\n",
"# # df.head()\n",
"# df.index\n",
"# df = streak(df)\n",
"df = get_streaks_rsi(df, 2)\n",
"df = streak(df)\n",
"df['rsi'] = ta.rsi(close=df[\"Close\"], length=14)\n",
"df['first-rsi'] = ta.rsi(close=df[\"Close\"], length=3)\n",
"df['second-rsi-2'] = ta.rsi(close=df[\"streak\"], length=2)\n",
"df['roc'] = ta.roc(close=df[\"Close\"], length=100)\n",
"\n",
"df['crsi'] = (df['first-rsi'] + df['second-rsi'] + df['roc']) / 3\n",
"\n",
"fdf = df.tail(100)\n",
"\n",
"\n",
"fdf\n",
"\n",
"# get_streaks_rsi(df['Close'], 2)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "fT620Ujzp1dm",
"outputId": "5e639f84-c82c-461c-8e4d-fbe0baaba5d6"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"(251, 7)\n",
"[50.98109738207822, 37.18980823132517, 18.24508628957017, 7.5101051168642625, 5.422749919732635, 33.588173210339, 48.69365709320937, 15.981268200616055, 11.028552296081573, 6.54789417900817, 3.0681681798689984, 32.08144411806282, 19.13903446039291, 12.742735678307852, 34.73931933049851, 19.990799303735347, 41.92620900331951, 53.82097186454559, 18.011833072150466, 32.43059266153079, 19.131605757308318, 13.233163463323656, 42.09979029441363, 49.49595500429848, 22.127378720357203, 18.225250281932922, 11.061815858602793, 34.40069209673393, 40.638478647605446, 18.49565705399112, 7.234819258824011, 3.4949341384781873, 36.66576686469576, 47.55135904373049, 50.91518271162884, 24.456025299459153, 11.977393246715886, 29.59283537953664, 18.703765767268983, 14.569060888146815, 48.44872167557231, 23.95960820100362, 43.48587499823169, 49.28541596000424, 51.52413549929332, 25.56991300398563, 45.72429975859819, 52.610479812686975, 58.13005382461924, 26.891697914362833, 14.914079233552348, 48.88693007596526, 34.09202204463357, 26.33479842976497, 16.570243515684805, 10.369278608682754, 8.54870270940155, 36.930371388095494, 42.25208926790474, 18.19642989412065, 48.63847592445618, 54.7829887046866, 34.14042062751997, 47.00793975768715, 32.80836353524459, 49.15620555953885, 53.672523057131, 24.2856342219122, 42.55234455218733, 48.59604477955994, 21.58458337200555, 11.705608703790695, 6.412854163550066, 46.83745829641856, 49.115230747768805, 30.078685197668534, 21.875834954431614, 10.408344203371419, 6.5474501042901885, 38.575943684891676, 25.89228439068097, 42.61714086685674, 48.589843397538196, 20.987906646299297, 8.08123132393249, 3.113671811076641, -0.18481092782852926, -2.216092636077811, 40.065871656947245, 22.342734912883923, 15.769853884172766, 7.765725475720711, 0.22094926110854374, 36.16279023599686, 38.50270811579001, 10.659853698853635, 25.121004602762117, 11.703453071007042, 35.69625312822612, 43.6185317338663]\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Date Open High Low Close \\\n",
"id \n",
"151 2022-08-17 00:00:00-04:00 172.483874 175.858266 172.284209 174.260925 \n",
"152 2022-08-18 00:00:00-04:00 173.462256 174.610345 172.833295 173.861588 \n",
"153 2022-08-19 00:00:00-04:00 172.743440 173.452271 171.026288 171.235947 \n",
"154 2022-08-22 00:00:00-04:00 169.408980 169.578697 166.863200 167.292496 \n",
"155 2022-08-23 00:00:00-04:00 166.803303 168.430609 166.374007 166.953049 \n",
".. ... ... ... ... ... \n",
"246 2023-01-03 00:00:00-05:00 130.279999 130.899994 124.169998 125.070000 \n",
"247 2023-01-04 00:00:00-05:00 126.889999 128.660004 125.080002 126.360001 \n",
"248 2023-01-05 00:00:00-05:00 127.129997 127.769997 124.760002 125.019997 \n",
"249 2023-01-06 00:00:00-05:00 126.010002 130.289993 124.889999 129.619995 \n",
"250 2023-01-09 00:00:00-05:00 130.464996 133.410004 130.479996 132.410095 \n",
"\n",
" Volume Dividends Stock Splits id streak streaks_numpy \\\n",
"id \n",
"151 79542000 0.0 0.0 151 1 1.0 \n",
"152 62290100 0.0 0.0 152 -1 -1.0 \n",
"153 70346300 0.0 0.0 153 -2 -2.0 \n",
"154 69026800 0.0 0.0 154 -3 -3.0 \n",
"155 54147100 0.0 0.0 155 -4 -4.0 \n",
".. ... ... ... ... ... ... \n",
"246 112117500 0.0 0.0 246 -1 -1.0 \n",
"247 89113600 0.0 0.0 247 1 1.0 \n",
"248 80962700 0.0 0.0 248 -1 -1.0 \n",
"249 87686600 0.0 0.0 249 1 1.0 \n",
"250 40435385 0.0 0.0 250 2 2.0 \n",
"\n",
" second-rsi rsi first-rsi second-rsi-2 roc crsi \n",
"id \n",
"151 60.372378 76.524776 92.008336 60.372378 0.562578 50.981097 \n",
"152 31.282926 75.319164 80.327634 31.282926 -0.041136 37.189808 \n",
"153 21.110955 67.760238 35.668386 21.110955 -2.044081 18.245086 \n",
"154 12.792030 58.297246 15.835000 12.792030 -6.096714 7.510105 \n",
"155 7.153921 57.552179 14.774266 7.153921 -5.659937 5.422750 \n",
".. ... ... ... ... ... ... \n",
"246 35.550528 32.340122 22.405478 35.550528 -25.976445 10.659854 \n",
"247 64.019712 34.889563 36.223348 64.019712 -24.880047 25.121005 \n",
"248 33.990527 33.478394 28.355518 33.990527 -27.235686 11.703453 \n",
"249 65.941548 42.131325 66.180405 65.941548 -25.033193 35.696253 \n",
"250 77.050131 46.663165 77.154162 77.050131 -23.348698 43.618532 \n",
"\n",
"[100 rows x 17 columns]"
],
"text/html": [
"\n",
" <div id=\"df-0c9975ae-2d8d-46a4-bfe8-aee9b6771eaf\">\n",
" <div 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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Volume</th>\n",
" <th>Dividends</th>\n",
" <th>Stock Splits</th>\n",
" <th>id</th>\n",
" <th>streak</th>\n",
" <th>streaks_numpy</th>\n",
" <th>second-rsi</th>\n",
" <th>rsi</th>\n",
" <th>first-rsi</th>\n",
" <th>second-rsi-2</th>\n",
" <th>roc</th>\n",
" <th>crsi</th>\n",
" </tr>\n",
" <tr>\n",
" <th>id</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>151</th>\n",
" <td>2022-08-17 00:00:00-04:00</td>\n",
" <td>172.483874</td>\n",
" <td>175.858266</td>\n",
" <td>172.284209</td>\n",
" <td>174.260925</td>\n",
" <td>79542000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>151</td>\n",
" <td>1</td>\n",
" <td>1.0</td>\n",
" <td>60.372378</td>\n",
" <td>76.524776</td>\n",
" <td>92.008336</td>\n",
" <td>60.372378</td>\n",
" <td>0.562578</td>\n",
" <td>50.981097</td>\n",
" </tr>\n",
" <tr>\n",
" <th>152</th>\n",
" <td>2022-08-18 00:00:00-04:00</td>\n",
" <td>173.462256</td>\n",
" <td>174.610345</td>\n",
" <td>172.833295</td>\n",
" <td>173.861588</td>\n",
" <td>62290100</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>152</td>\n",
" <td>-1</td>\n",
" <td>-1.0</td>\n",
" <td>31.282926</td>\n",
" <td>75.319164</td>\n",
" <td>80.327634</td>\n",
" <td>31.282926</td>\n",
" <td>-0.041136</td>\n",
" <td>37.189808</td>\n",
" </tr>\n",
" <tr>\n",
" <th>153</th>\n",
" <td>2022-08-19 00:00:00-04:00</td>\n",
" <td>172.743440</td>\n",
" <td>173.452271</td>\n",
" <td>171.026288</td>\n",
" <td>171.235947</td>\n",
" <td>70346300</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>153</td>\n",
" <td>-2</td>\n",
" <td>-2.0</td>\n",
" <td>21.110955</td>\n",
" <td>67.760238</td>\n",
" <td>35.668386</td>\n",
" <td>21.110955</td>\n",
" <td>-2.044081</td>\n",
" <td>18.245086</td>\n",
" </tr>\n",
" <tr>\n",
" <th>154</th>\n",
" <td>2022-08-22 00:00:00-04:00</td>\n",
" <td>169.408980</td>\n",
" <td>169.578697</td>\n",
" <td>166.863200</td>\n",
" <td>167.292496</td>\n",
" <td>69026800</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>154</td>\n",
" <td>-3</td>\n",
" <td>-3.0</td>\n",
" <td>12.792030</td>\n",
" <td>58.297246</td>\n",
" <td>15.835000</td>\n",
" <td>12.792030</td>\n",
" <td>-6.096714</td>\n",
" <td>7.510105</td>\n",
" </tr>\n",
" <tr>\n",
" <th>155</th>\n",
" <td>2022-08-23 00:00:00-04:00</td>\n",
" <td>166.803303</td>\n",
" <td>168.430609</td>\n",
" <td>166.374007</td>\n",
" <td>166.953049</td>\n",
" <td>54147100</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>155</td>\n",
" <td>-4</td>\n",
" <td>-4.0</td>\n",
" <td>7.153921</td>\n",
" <td>57.552179</td>\n",
" <td>14.774266</td>\n",
" <td>7.153921</td>\n",
" <td>-5.659937</td>\n",
" <td>5.422750</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",
" <td>...</td>\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>246</th>\n",
" <td>2023-01-03 00:00:00-05:00</td>\n",
" <td>130.279999</td>\n",
" <td>130.899994</td>\n",
" <td>124.169998</td>\n",
" <td>125.070000</td>\n",
" <td>112117500</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>246</td>\n",
" <td>-1</td>\n",
" <td>-1.0</td>\n",
" <td>35.550528</td>\n",
" <td>32.340122</td>\n",
" <td>22.405478</td>\n",
" <td>35.550528</td>\n",
" <td>-25.976445</td>\n",
" <td>10.659854</td>\n",
" </tr>\n",
" <tr>\n",
" <th>247</th>\n",
" <td>2023-01-04 00:00:00-05:00</td>\n",
" <td>126.889999</td>\n",
" <td>128.660004</td>\n",
" <td>125.080002</td>\n",
" <td>126.360001</td>\n",
" <td>89113600</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>247</td>\n",
" <td>1</td>\n",
" <td>1.0</td>\n",
" <td>64.019712</td>\n",
" <td>34.889563</td>\n",
" <td>36.223348</td>\n",
" <td>64.019712</td>\n",
" <td>-24.880047</td>\n",
" <td>25.121005</td>\n",
" </tr>\n",
" <tr>\n",
" <th>248</th>\n",
" <td>2023-01-05 00:00:00-05:00</td>\n",
" <td>127.129997</td>\n",
" <td>127.769997</td>\n",
" <td>124.760002</td>\n",
" <td>125.019997</td>\n",
" <td>80962700</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>248</td>\n",
" <td>-1</td>\n",
" <td>-1.0</td>\n",
" <td>33.990527</td>\n",
" <td>33.478394</td>\n",
" <td>28.355518</td>\n",
" <td>33.990527</td>\n",
" <td>-27.235686</td>\n",
" <td>11.703453</td>\n",
" </tr>\n",
" <tr>\n",
" <th>249</th>\n",
" <td>2023-01-06 00:00:00-05:00</td>\n",
" <td>126.010002</td>\n",
" <td>130.289993</td>\n",
" <td>124.889999</td>\n",
" <td>129.619995</td>\n",
" <td>87686600</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>249</td>\n",
" <td>1</td>\n",
" <td>1.0</td>\n",
" <td>65.941548</td>\n",
" <td>42.131325</td>\n",
" <td>66.180405</td>\n",
" <td>65.941548</td>\n",
" <td>-25.033193</td>\n",
" <td>35.696253</td>\n",
" </tr>\n",
" <tr>\n",
" <th>250</th>\n",
" <td>2023-01-09 00:00:00-05:00</td>\n",
" <td>130.464996</td>\n",
" <td>133.410004</td>\n",
" <td>130.479996</td>\n",
" <td>132.410095</td>\n",
" <td>40435385</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>250</td>\n",
" <td>2</td>\n",
" <td>2.0</td>\n",
" <td>77.050131</td>\n",
" <td>46.663165</td>\n",
" <td>77.154162</td>\n",
" <td>77.050131</td>\n",
" <td>-23.348698</td>\n",
" <td>43.618532</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>100 rows × 17 columns</p>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-0c9975ae-2d8d-46a4-bfe8-aee9b6771eaf')\"\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 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\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",
" [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-0c9975ae-2d8d-46a4-bfe8-aee9b6771eaf 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-0c9975ae-2d8d-46a4-bfe8-aee9b6771eaf');\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",
" </div>\n",
" "
]
},
"metadata": {},
"execution_count": 38
}
]
},
{
"cell_type": "code",
"source": [
"fdf[:50].plot.line(x='Date', y='crsi')"
],
"metadata": {
"id": "pfQ43W_Tq0BV",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 305
},
"outputId": "613f3ea8-5b36-4191-c600-f2282e511346"
},
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fac10a17fa0>"
]
},
"metadata": {},
"execution_count": 40
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"print(df.ta.indicators())"
],
"metadata": {
"id": "4omHLyAsrU-R"
},
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment