Files
OpenBB/examples/googleColab.ipynb
Danglewood 1d505577c4 Google Colab Install Notebook (#5841)
* Google Colab Install Notebook

Adds example notebook for Google Colab install.

* Update README.md

* Update README.md

Add badge -- won't work until merged into develop

* point to develop for nb

---------

Co-authored-by: James Maslek <jmaslek11@gmail.com>
2023-12-01 20:27:07 +00:00

2125 lines
106 KiB
Plaintext
Vendored
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"fc6a4747cea243f4bac6a19c43264fec": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DropdownModel",
"model_module_version": "1.5.0",
"state": {
"_dom_classes": [],
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DropdownModel",
"_options_labels": [
"Total Open Interest",
"Call Open Interest",
"Put Open Interest",
"Total Volume",
"Call Volume",
"Put Volume"
],
"_view_count": null,
"_view_module": "@jupyter-widgets/controls",
"_view_module_version": "1.5.0",
"_view_name": "DropdownView",
"description": "",
"description_tooltip": null,
"disabled": false,
"index": 0,
"layout": "IPY_MODEL_bf10b4a3831f4e6595398f2d62a0f7b2",
"style": "IPY_MODEL_6095af63918f4075a891fc950c9790d3"
}
},
"bf10b4a3831f4e6595398f2d62a0f7b2": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"model_module_version": "1.2.0",
"state": {
"_model_module": "@jupyter-widgets/base",
"_model_module_version": "1.2.0",
"_model_name": "LayoutModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "LayoutView",
"align_content": null,
"align_items": null,
"align_self": null,
"border": null,
"bottom": null,
"display": null,
"flex": null,
"flex_flow": null,
"grid_area": null,
"grid_auto_columns": null,
"grid_auto_flow": null,
"grid_auto_rows": null,
"grid_column": null,
"grid_gap": null,
"grid_row": null,
"grid_template_areas": null,
"grid_template_columns": null,
"grid_template_rows": null,
"height": null,
"justify_content": null,
"justify_items": null,
"left": null,
"margin": null,
"max_height": null,
"max_width": null,
"min_height": null,
"min_width": null,
"object_fit": null,
"object_position": null,
"order": null,
"overflow": null,
"overflow_x": null,
"overflow_y": null,
"padding": null,
"right": null,
"top": null,
"visibility": null,
"width": null
}
},
"6095af63918f4075a891fc950c9790d3": {
"model_module": "@jupyter-widgets/controls",
"model_name": "DescriptionStyleModel",
"model_module_version": "1.5.0",
"state": {
"_model_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_model_name": "DescriptionStyleModel",
"_view_count": null,
"_view_module": "@jupyter-widgets/base",
"_view_module_version": "1.2.0",
"_view_name": "StyleView",
"description_width": ""
}
}
}
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# Installing the OpenBB Platform in Google Colab\n",
"\n",
"This notebook will install the OpenBB Platform, fetch some data and prepare it for display as a bar chart.\n",
"\n",
"Sign up for a free account here: https://my.openbb.co"
],
"metadata": {
"id": "xIOXTKkqBReO"
}
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "xvU65bhqKNns"
},
"outputs": [],
"source": [
"# Install the OpenBB Platform with all available extensions.\n",
"# Messages indicating package version conflicts at the end of installation can be safely ignored.\n",
"\n",
"!pip install openbb[all]\n",
"\n",
"# There is also a nightly distribution available, openbb-nightly"
]
},
{
"cell_type": "code",
"source": [
"# Before running this cell, restart the runtime by selecting, \"Restart runtime\", from the \"Runtime\" menu.\n",
"\n",
"# Import statements - for many scenarios, the only import needed will be `from openbb import obb`\n",
"from typing import Literal\n",
"from IPython.display import display\n",
"from IPython.display import clear_output\n",
"import ipywidgets as widgets\n",
"import pandas as pd\n",
"import pandas_ta as ta\n",
"from datetime import datetime\n",
"from plotly import graph_objects as go\n",
"\n",
"from openbb import obb"
],
"metadata": {
"id": "_69FIu9YKRhI"
},
"execution_count": 98,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Login to OpenBB Hub to retrieve stored API keys.\n",
"# https://my.openbb.co/app/platform/pat\n",
"# https://my.openbb.co/app/platform/api-keys\n",
"\n",
"obb.account.login(pat=\"replace with your PAT\")\n",
"\n",
"# This is not required"
],
"metadata": {
"id": "1OLsZHDYMBSS"
},
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Verify that the credentials from Hub were loaded successfully.\n",
"\n",
"obb.user.credentials"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "gJ7FwTC6MTzv",
"outputId": "b9d4e888-7f3f-4756-b1a4-ae438e61c2b5"
},
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Credentials\n",
"\n",
"alpha_vantage_api_key: **********\n",
"benzinga_api_key: None\n",
"biztoc_api_key: None\n",
"fmp_api_key: **********\n",
"fred_api_key: **********\n",
"intrinio_api_key: **********\n",
"nasdaq_api_key: **********\n",
"polygon_api_key: **********\n",
"tiingo_token: None\n",
"tradingeconomics_api_key: None"
]
},
"metadata": {},
"execution_count": 4
}
]
},
{
"cell_type": "code",
"source": [
"# Set the output preference, if desired. The examples below use Pandas DataFrames.\n",
"\n",
"obb.user.preferences.output_type = \"dataframe\""
],
"metadata": {
"id": "27JtqRAQ2HTb"
},
"execution_count": 67,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Get Some Data\n",
"symbol = \"SPY\"\n",
"\n",
"options = obb.derivatives.options.chains(symbol, provider=\"cboe\")\n",
"\n",
"options"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 444
},
"id": "GWI_60zD3M3l",
"outputId": "47338fab-8ab5-467f-c26e-44148c848c63"
},
"execution_count": 88,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" contract_symbol expiration strike option_type volume open \\\n",
"0 SPY231130C00387000 2023-11-30 387.0 call 7.0 67.60 \n",
"1 SPY231130P00387000 2023-11-30 387.0 put 2.0 0.01 \n",
"2 SPY231130C00388000 2023-11-30 388.0 call 1.0 66.47 \n",
"3 SPY231130P00388000 2023-11-30 388.0 put 1.0 0.01 \n",
"4 SPY231130C00389000 2023-11-30 389.0 call 0.0 0.00 \n",
"... ... ... ... ... ... ... \n",
"8215 SPY260116P00670000 2026-01-16 670.0 put 0.0 0.00 \n",
"8216 SPY260116C00675000 2026-01-16 675.0 call 0.0 0.00 \n",
"8217 SPY260116P00675000 2026-01-16 675.0 put 0.0 0.00 \n",
"8218 SPY260116C00680000 2026-01-16 680.0 call 0.0 0.00 \n",
"8219 SPY260116P00680000 2026-01-16 680.0 put 0.0 0.00 \n",
"\n",
" open_interest high low implied_volatility ... last_trade_price \\\n",
"0 5.0 67.60 66.55 0.0000 ... 66.55 \n",
"1 290.0 0.01 0.01 0.0000 ... 0.01 \n",
"2 0.0 66.47 66.47 0.0000 ... 66.47 \n",
"3 1.0 0.01 0.01 0.0000 ... 0.01 \n",
"4 0.0 0.00 0.00 0.0000 ... 0.00 \n",
"... ... ... ... ... ... ... \n",
"8215 0.0 0.00 0.00 0.2367 ... 216.04 \n",
"8216 0.0 0.00 0.00 0.1387 ... 0.00 \n",
"8217 0.0 0.00 0.00 0.2385 ... 0.00 \n",
"8218 0.0 0.00 0.00 0.1411 ... 0.00 \n",
"8219 0.0 0.00 0.00 0.2432 ... 223.91 \n",
"\n",
" tick prev_close change change_percent rho \\\n",
"0 down 67.69 -1.135 -1.68 0.0003 \n",
"1 no_change 0.00 0.005 100.00 0.0000 \n",
"2 down 66.68 -0.210 -0.31 0.0003 \n",
"3 no_change 0.00 0.005 100.00 0.0000 \n",
"4 no_change 65.69 0.000 0.00 0.0003 \n",
"... ... ... ... ... ... \n",
"8215 down 215.44 0.000 0.00 -0.3427 \n",
"8216 no_change 2.50 0.000 0.00 0.4385 \n",
"8217 no_change 220.50 0.000 0.00 -0.3453 \n",
"8218 no_change 2.50 0.000 0.00 0.4078 \n",
"8219 down 225.50 0.000 0.00 -0.3478 \n",
"\n",
" last_trade_timestamp dte bid ask \n",
"0 2023-11-30 12:27:59 -1 67.77 70.67 \n",
"1 2023-11-30 09:30:12 -1 0.00 0.01 \n",
"2 2023-11-30 09:42:00 -1 67.56 68.77 \n",
"3 2023-11-30 10:16:04 -1 0.00 0.01 \n",
"4 NaT -1 65.77 68.67 \n",
"... ... ... ... ... \n",
"8215 2023-11-20 12:31:47 777 211.56 216.50 \n",
"8216 NaT 777 0.00 5.00 \n",
"8217 NaT 777 216.50 221.50 \n",
"8218 NaT 777 0.00 5.00 \n",
"8219 2023-11-27 14:07:53 777 221.50 226.50 \n",
"\n",
"[8220 rows x 27 columns]"
],
"text/html": [
"\n",
" <div id=\"df-2a8d8e0e-044c-4e66-bd79-582b5ef51f80\" 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>contract_symbol</th>\n",
" <th>expiration</th>\n",
" <th>strike</th>\n",
" <th>option_type</th>\n",
" <th>volume</th>\n",
" <th>open</th>\n",
" <th>open_interest</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>implied_volatility</th>\n",
" <th>...</th>\n",
" <th>last_trade_price</th>\n",
" <th>tick</th>\n",
" <th>prev_close</th>\n",
" <th>change</th>\n",
" <th>change_percent</th>\n",
" <th>rho</th>\n",
" <th>last_trade_timestamp</th>\n",
" <th>dte</th>\n",
" <th>bid</th>\n",
" <th>ask</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>SPY231130C00387000</td>\n",
" <td>2023-11-30</td>\n",
" <td>387.0</td>\n",
" <td>call</td>\n",
" <td>7.0</td>\n",
" <td>67.60</td>\n",
" <td>5.0</td>\n",
" <td>67.60</td>\n",
" <td>66.55</td>\n",
" <td>0.0000</td>\n",
" <td>...</td>\n",
" <td>66.55</td>\n",
" <td>down</td>\n",
" <td>67.69</td>\n",
" <td>-1.135</td>\n",
" <td>-1.68</td>\n",
" <td>0.0003</td>\n",
" <td>2023-11-30 12:27:59</td>\n",
" <td>-1</td>\n",
" <td>67.77</td>\n",
" <td>70.67</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>SPY231130P00387000</td>\n",
" <td>2023-11-30</td>\n",
" <td>387.0</td>\n",
" <td>put</td>\n",
" <td>2.0</td>\n",
" <td>0.01</td>\n",
" <td>290.0</td>\n",
" <td>0.01</td>\n",
" <td>0.01</td>\n",
" <td>0.0000</td>\n",
" <td>...</td>\n",
" <td>0.01</td>\n",
" <td>no_change</td>\n",
" <td>0.00</td>\n",
" <td>0.005</td>\n",
" <td>100.00</td>\n",
" <td>0.0000</td>\n",
" <td>2023-11-30 09:30:12</td>\n",
" <td>-1</td>\n",
" <td>0.00</td>\n",
" <td>0.01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>SPY231130C00388000</td>\n",
" <td>2023-11-30</td>\n",
" <td>388.0</td>\n",
" <td>call</td>\n",
" <td>1.0</td>\n",
" <td>66.47</td>\n",
" <td>0.0</td>\n",
" <td>66.47</td>\n",
" <td>66.47</td>\n",
" <td>0.0000</td>\n",
" <td>...</td>\n",
" <td>66.47</td>\n",
" <td>down</td>\n",
" <td>66.68</td>\n",
" <td>-0.210</td>\n",
" <td>-0.31</td>\n",
" <td>0.0003</td>\n",
" <td>2023-11-30 09:42:00</td>\n",
" <td>-1</td>\n",
" <td>67.56</td>\n",
" <td>68.77</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>SPY231130P00388000</td>\n",
" <td>2023-11-30</td>\n",
" <td>388.0</td>\n",
" <td>put</td>\n",
" <td>1.0</td>\n",
" <td>0.01</td>\n",
" <td>1.0</td>\n",
" <td>0.01</td>\n",
" <td>0.01</td>\n",
" <td>0.0000</td>\n",
" <td>...</td>\n",
" <td>0.01</td>\n",
" <td>no_change</td>\n",
" <td>0.00</td>\n",
" <td>0.005</td>\n",
" <td>100.00</td>\n",
" <td>0.0000</td>\n",
" <td>2023-11-30 10:16:04</td>\n",
" <td>-1</td>\n",
" <td>0.00</td>\n",
" <td>0.01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>SPY231130C00389000</td>\n",
" <td>2023-11-30</td>\n",
" <td>389.0</td>\n",
" <td>call</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0000</td>\n",
" <td>...</td>\n",
" <td>0.00</td>\n",
" <td>no_change</td>\n",
" <td>65.69</td>\n",
" <td>0.000</td>\n",
" <td>0.00</td>\n",
" <td>0.0003</td>\n",
" <td>NaT</td>\n",
" <td>-1</td>\n",
" <td>65.77</td>\n",
" <td>68.67</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",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8215</th>\n",
" <td>SPY260116P00670000</td>\n",
" <td>2026-01-16</td>\n",
" <td>670.0</td>\n",
" <td>put</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.2367</td>\n",
" <td>...</td>\n",
" <td>216.04</td>\n",
" <td>down</td>\n",
" <td>215.44</td>\n",
" <td>0.000</td>\n",
" <td>0.00</td>\n",
" <td>-0.3427</td>\n",
" <td>2023-11-20 12:31:47</td>\n",
" <td>777</td>\n",
" <td>211.56</td>\n",
" <td>216.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8216</th>\n",
" <td>SPY260116C00675000</td>\n",
" <td>2026-01-16</td>\n",
" <td>675.0</td>\n",
" <td>call</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.1387</td>\n",
" <td>...</td>\n",
" <td>0.00</td>\n",
" <td>no_change</td>\n",
" <td>2.50</td>\n",
" <td>0.000</td>\n",
" <td>0.00</td>\n",
" <td>0.4385</td>\n",
" <td>NaT</td>\n",
" <td>777</td>\n",
" <td>0.00</td>\n",
" <td>5.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8217</th>\n",
" <td>SPY260116P00675000</td>\n",
" <td>2026-01-16</td>\n",
" <td>675.0</td>\n",
" <td>put</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.2385</td>\n",
" <td>...</td>\n",
" <td>0.00</td>\n",
" <td>no_change</td>\n",
" <td>220.50</td>\n",
" <td>0.000</td>\n",
" <td>0.00</td>\n",
" <td>-0.3453</td>\n",
" <td>NaT</td>\n",
" <td>777</td>\n",
" <td>216.50</td>\n",
" <td>221.50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8218</th>\n",
" <td>SPY260116C00680000</td>\n",
" <td>2026-01-16</td>\n",
" <td>680.0</td>\n",
" <td>call</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.1411</td>\n",
" <td>...</td>\n",
" <td>0.00</td>\n",
" <td>no_change</td>\n",
" <td>2.50</td>\n",
" <td>0.000</td>\n",
" <td>0.00</td>\n",
" <td>0.4078</td>\n",
" <td>NaT</td>\n",
" <td>777</td>\n",
" <td>0.00</td>\n",
" <td>5.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8219</th>\n",
" <td>SPY260116P00680000</td>\n",
" <td>2026-01-16</td>\n",
" <td>680.0</td>\n",
" <td>put</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.2432</td>\n",
" <td>...</td>\n",
" <td>223.91</td>\n",
" <td>down</td>\n",
" <td>225.50</td>\n",
" <td>0.000</td>\n",
" <td>0.00</td>\n",
" <td>-0.3478</td>\n",
" <td>2023-11-27 14:07:53</td>\n",
" <td>777</td>\n",
" <td>221.50</td>\n",
" <td>226.50</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8220 rows × 27 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-2a8d8e0e-044c-4e66-bd79-582b5ef51f80')\"\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-2a8d8e0e-044c-4e66-bd79-582b5ef51f80 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-2a8d8e0e-044c-4e66-bd79-582b5ef51f80');\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-9fe9272b-1929-45e6-bb98-bf3f44b552b7\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-9fe9272b-1929-45e6-bb98-bf3f44b552b7')\"\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-9fe9272b-1929-45e6-bb98-bf3f44b552b7 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
" </div>\n",
" </div>\n"
]
},
"metadata": {},
"execution_count": 88
}
]
},
{
"cell_type": "code",
"source": [
"# Prepare A View - Volume and Open Interest by Expiration or Strike\n",
"\n",
"def filter_options_data(options, by: Literal[\"expiration\", \"strike\"] = \"expiration\"):\n",
" data = pd.DataFrame()\n",
" data[\"Total Open Interest\"] = options.groupby(by)[\"open_interest\"].sum()\n",
" data[\"Call Open Interest\"] = options[options[\"option_type\"] == \"call\"].groupby(by)[\"open_interest\"].sum()\n",
" data[\"Put Open Interest\"] = options[options[\"option_type\"] == \"put\"].groupby(by)[\"open_interest\"].sum()\n",
" data[\"Total Volume\"] = options.groupby(by)[\"volume\"].sum()\n",
" data[\"Call Volume\"] = options[options[\"option_type\"] == \"call\"].groupby(by)[\"volume\"].sum()\n",
" data[\"Put Volume\"] = options[options[\"option_type\"] == \"put\"].groupby(by)[\"volume\"].sum()\n",
"\n",
" return data\n",
"\n",
"data = filter_options_data(options, \"strike\")\n",
"\n",
"data"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 455
},
"id": "F-SpeJUi3l1k",
"outputId": "ee703998-297f-4831-8aad-422e16a5b3eb"
},
"execution_count": 101,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" Total Open Interest Call Open Interest Put Open Interest \\\n",
"strike \n",
"120.0 22821.0 74.0 22747.0 \n",
"130.0 1506.0 19.0 1487.0 \n",
"140.0 488.0 2.0 486.0 \n",
"150.0 72684.0 2072.0 70612.0 \n",
"155.0 12298.0 18.0 12280.0 \n",
"... ... ... ... \n",
"700.0 24945.0 24835.0 110.0 \n",
"705.0 478.0 478.0 0.0 \n",
"710.0 1511.0 1511.0 0.0 \n",
"715.0 981.0 981.0 0.0 \n",
"720.0 102823.0 102821.0 2.0 \n",
"\n",
" Total Volume Call Volume Put Volume \n",
"strike \n",
"120.0 78.0 0.0 78.0 \n",
"130.0 61.0 0.0 61.0 \n",
"140.0 1.0 0.0 1.0 \n",
"150.0 65.0 4.0 61.0 \n",
"155.0 21.0 1.0 20.0 \n",
"... ... ... ... \n",
"700.0 2.0 2.0 0.0 \n",
"705.0 0.0 0.0 0.0 \n",
"710.0 3.0 1.0 2.0 \n",
"715.0 0.0 0.0 0.0 \n",
"720.0 36.0 36.0 0.0 \n",
"\n",
"[272 rows x 6 columns]"
],
"text/html": [
"\n",
" <div id=\"df-02f2b63a-6a85-4d2c-b3bf-21981cfe56e6\" 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>Total Open Interest</th>\n",
" <th>Call Open Interest</th>\n",
" <th>Put Open Interest</th>\n",
" <th>Total Volume</th>\n",
" <th>Call Volume</th>\n",
" <th>Put Volume</th>\n",
" </tr>\n",
" <tr>\n",
" <th>strike</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>120.0</th>\n",
" <td>22821.0</td>\n",
" <td>74.0</td>\n",
" <td>22747.0</td>\n",
" <td>78.0</td>\n",
" <td>0.0</td>\n",
" <td>78.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>130.0</th>\n",
" <td>1506.0</td>\n",
" <td>19.0</td>\n",
" <td>1487.0</td>\n",
" <td>61.0</td>\n",
" <td>0.0</td>\n",
" <td>61.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>140.0</th>\n",
" <td>488.0</td>\n",
" <td>2.0</td>\n",
" <td>486.0</td>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>150.0</th>\n",
" <td>72684.0</td>\n",
" <td>2072.0</td>\n",
" <td>70612.0</td>\n",
" <td>65.0</td>\n",
" <td>4.0</td>\n",
" <td>61.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>155.0</th>\n",
" <td>12298.0</td>\n",
" <td>18.0</td>\n",
" <td>12280.0</td>\n",
" <td>21.0</td>\n",
" <td>1.0</td>\n",
" <td>20.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",
" </tr>\n",
" <tr>\n",
" <th>700.0</th>\n",
" <td>24945.0</td>\n",
" <td>24835.0</td>\n",
" <td>110.0</td>\n",
" <td>2.0</td>\n",
" <td>2.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>705.0</th>\n",
" <td>478.0</td>\n",
" <td>478.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>710.0</th>\n",
" <td>1511.0</td>\n",
" <td>1511.0</td>\n",
" <td>0.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>2.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>715.0</th>\n",
" <td>981.0</td>\n",
" <td>981.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>720.0</th>\n",
" <td>102823.0</td>\n",
" <td>102821.0</td>\n",
" <td>2.0</td>\n",
" <td>36.0</td>\n",
" <td>36.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>272 rows × 6 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-02f2b63a-6a85-4d2c-b3bf-21981cfe56e6')\"\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-02f2b63a-6a85-4d2c-b3bf-21981cfe56e6 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-02f2b63a-6a85-4d2c-b3bf-21981cfe56e6');\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-77122ec2-11de-4cce-a82a-480f982b0f10\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-77122ec2-11de-4cce-a82a-480f982b0f10')\"\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-77122ec2-11de-4cce-a82a-480f982b0f10 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
" </div>\n",
" </div>\n"
]
},
"metadata": {},
"execution_count": 101
}
]
},
{
"cell_type": "code",
"source": [
"# Do not run this cell if you are following the example above.\n",
"\n",
"# In this scenario, \"data\" could be anything that would be displayed as a bar chart. Alternatively, it could be company fundamentals data.\n",
"\n",
"# Note: This requires a valid FMP API key\n",
"\n",
"\n",
"symbol=\"AAPL\"\n",
"\n",
"data = obb.equity.fundamental.ratios(symbol, limit = 100, period=\"quarter\", provider=\"fmp\")\n",
"\n",
"data.index = data.index.strftime(\"%Y-%m-%d\")\n",
"\n",
"data"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 649
},
"id": "2fAclYaEMVz5",
"outputId": "10413c8a-253d-4aae-c837-644f8880923b"
},
"execution_count": 93,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" symbol period current_ratio quick_ratio cash_ratio \\\n",
"date \n",
"1998-12-26 AAPL Q1 2.605795 2.352426 0.822776 \n",
"1999-03-27 AAPL Q2 2.650259 2.413212 0.879534 \n",
"1999-06-26 AAPL Q3 2.792723 2.600390 1.152047 \n",
"1999-09-25 AAPL Q4 2.766301 2.522272 0.856036 \n",
"2000-01-01 AAPL Q1 2.498219 2.316539 0.807125 \n",
"... ... ... ... ... ... \n",
"2022-09-24 AAPL Q4 0.879356 0.709408 0.153563 \n",
"2022-12-31 AAPL Q1 0.938020 0.768724 0.149578 \n",
"2023-04-01 AAPL Q2 0.940354 0.764281 0.205597 \n",
"2023-07-01 AAPL Q3 0.981563 0.813585 0.227331 \n",
"2023-09-30 AAPL Q4 0.988012 0.843312 0.206217 \n",
"\n",
" days_of_sales_outstanding days_of_inventory_outstanding \\\n",
"date \n",
"1998-12-26 48.052632 1.832248 \n",
"1999-03-27 47.294118 1.437445 \n",
"1999-06-26 51.758665 0.557029 \n",
"1999-09-25 45.875749 1.890756 \n",
"2000-01-01 34.263764 0.777650 \n",
"... ... ... \n",
"2022-09-24 60.833315 8.551997 \n",
"2022-12-31 41.622138 9.185598 \n",
"2023-04-01 34.068392 12.738933 \n",
"2023-07-01 43.115762 14.577604 \n",
"2023-09-30 61.327069 11.611542 \n",
"\n",
" operating_cycle days_of_payables_outstanding \\\n",
"date \n",
"1998-12-26 49.884879 48.004886 \n",
"1999-03-27 48.731562 63.167702 \n",
"1999-06-26 52.315694 63.023873 \n",
"1999-09-25 47.766505 76.764706 \n",
"2000-01-01 35.041414 60.864055 \n",
"... ... ... \n",
"2022-09-24 69.385312 110.859542 \n",
"2022-12-31 50.807736 78.007542 \n",
"2023-04-01 46.807325 73.118615 \n",
"2023-07-01 57.693367 92.607747 \n",
"2023-09-30 72.938611 114.833405 \n",
"\n",
" cash_conversion_cycle ... price_earnings_ratio \\\n",
"date ... \n",
"1998-12-26 1.879993 ... 8.732568 \n",
"1999-03-27 -14.436140 ... 8.397059 \n",
"1999-06-26 -10.708179 ... 7.484225 \n",
"1999-09-25 -28.998201 ... 23.552897 \n",
"2000-01-01 -25.822641 ... 22.618570 \n",
"... ... ... ... \n",
"2022-09-24 -41.474230 ... 29.094281 \n",
"2022-12-31 -27.199806 ... 17.208993 \n",
"2023-04-01 -26.311290 ... 26.938138 \n",
"2023-07-01 -34.914381 ... 38.288645 \n",
"2023-09-30 -41.894793 ... 29.085850 \n",
"\n",
" price_to_free_cash_flows_ratio \\\n",
"date \n",
"1998-12-26 24.355053 \n",
"1999-03-27 18.137648 \n",
"1999-06-26 75.027047 \n",
"1999-09-25 51.769733 \n",
"2000-01-01 49.423264 \n",
"... ... \n",
"2022-09-24 115.723695 \n",
"2022-12-31 68.334817 \n",
"2023-04-01 101.516990 \n",
"2023-07-01 125.370206 \n",
"2023-09-30 137.421101 \n",
"\n",
" price_to_operating_cash_flows_ratio price_cash_flow_ratio \\\n",
"date \n",
"1998-12-26 23.808976 23.808976 \n",
"1999-03-27 16.856551 16.856551 \n",
"1999-06-26 69.058986 69.058986 \n",
"1999-09-25 47.970120 47.970120 \n",
"2000-01-01 44.388186 44.388186 \n",
"... ... ... \n",
"2022-09-24 99.948206 99.948206 \n",
"2022-12-31 60.724643 60.724643 \n",
"2023-04-01 91.152020 91.152020 \n",
"2023-07-01 115.423282 115.423282 \n",
"2023-09-30 123.658630 123.658630 \n",
"\n",
" price_earnings_to_growth_ratio price_sales_ratio dividend_yield \\\n",
"date \n",
"1998-12-26 0.203760 3.104913 0.000000 \n",
"1999-03-27 -0.699755 2.963668 0.000000 \n",
"1999-06-26 0.178003 3.900636 0.000000 \n",
"1999-09-25 -0.467319 7.827460 0.000000 \n",
"2000-01-01 0.350588 7.066493 0.000000 \n",
"... ... ... ... \n",
"2022-09-24 3.879237 26.750498 0.001536 \n",
"2022-12-31 0.369993 17.625873 0.001825 \n",
"2023-04-01 -1.414252 27.450564 0.001402 \n",
"2023-07-01 -2.253139 37.224668 0.001264 \n",
"2023-09-30 1.846951 29.841774 0.001407 \n",
"\n",
" enterprise_value_multiple price_fair_value calendarYear \n",
"date \n",
"1998-12-26 28.650009 2.760999 1999 \n",
"1999-03-27 62.597153 2.084787 1999 \n",
"1999-06-26 209.281398 2.046192 1999 \n",
"1999-09-25 70.913430 3.369035 1999 \n",
"2000-01-01 58.063853 3.750973 2000 \n",
"... ... ... ... \n",
"2022-09-24 90.344514 47.589406 2022 \n",
"2022-12-31 55.366190 36.401387 2023 \n",
"2023-04-01 86.117046 41.882005 2023 \n",
"2023-07-01 135.913479 50.517075 2023 \n",
"2023-09-30 92.900618 42.975881 2023 \n",
"\n",
"[100 rows x 57 columns]"
],
"text/html": [
"\n",
" <div id=\"df-7cf38376-8f1c-43b9-9d1a-578e0f267575\" 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>symbol</th>\n",
" <th>period</th>\n",
" <th>current_ratio</th>\n",
" <th>quick_ratio</th>\n",
" <th>cash_ratio</th>\n",
" <th>days_of_sales_outstanding</th>\n",
" <th>days_of_inventory_outstanding</th>\n",
" <th>operating_cycle</th>\n",
" <th>days_of_payables_outstanding</th>\n",
" <th>cash_conversion_cycle</th>\n",
" <th>...</th>\n",
" <th>price_earnings_ratio</th>\n",
" <th>price_to_free_cash_flows_ratio</th>\n",
" <th>price_to_operating_cash_flows_ratio</th>\n",
" <th>price_cash_flow_ratio</th>\n",
" <th>price_earnings_to_growth_ratio</th>\n",
" <th>price_sales_ratio</th>\n",
" <th>dividend_yield</th>\n",
" <th>enterprise_value_multiple</th>\n",
" <th>price_fair_value</th>\n",
" <th>calendarYear</th>\n",
" </tr>\n",
" <tr>\n",
" <th>date</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",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1998-12-26</th>\n",
" <td>AAPL</td>\n",
" <td>Q1</td>\n",
" <td>2.605795</td>\n",
" <td>2.352426</td>\n",
" <td>0.822776</td>\n",
" <td>48.052632</td>\n",
" <td>1.832248</td>\n",
" <td>49.884879</td>\n",
" <td>48.004886</td>\n",
" <td>1.879993</td>\n",
" <td>...</td>\n",
" <td>8.732568</td>\n",
" <td>24.355053</td>\n",
" <td>23.808976</td>\n",
" <td>23.808976</td>\n",
" <td>0.203760</td>\n",
" <td>3.104913</td>\n",
" <td>0.000000</td>\n",
" <td>28.650009</td>\n",
" <td>2.760999</td>\n",
" <td>1999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-03-27</th>\n",
" <td>AAPL</td>\n",
" <td>Q2</td>\n",
" <td>2.650259</td>\n",
" <td>2.413212</td>\n",
" <td>0.879534</td>\n",
" <td>47.294118</td>\n",
" <td>1.437445</td>\n",
" <td>48.731562</td>\n",
" <td>63.167702</td>\n",
" <td>-14.436140</td>\n",
" <td>...</td>\n",
" <td>8.397059</td>\n",
" <td>18.137648</td>\n",
" <td>16.856551</td>\n",
" <td>16.856551</td>\n",
" <td>-0.699755</td>\n",
" <td>2.963668</td>\n",
" <td>0.000000</td>\n",
" <td>62.597153</td>\n",
" <td>2.084787</td>\n",
" <td>1999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-06-26</th>\n",
" <td>AAPL</td>\n",
" <td>Q3</td>\n",
" <td>2.792723</td>\n",
" <td>2.600390</td>\n",
" <td>1.152047</td>\n",
" <td>51.758665</td>\n",
" <td>0.557029</td>\n",
" <td>52.315694</td>\n",
" <td>63.023873</td>\n",
" <td>-10.708179</td>\n",
" <td>...</td>\n",
" <td>7.484225</td>\n",
" <td>75.027047</td>\n",
" <td>69.058986</td>\n",
" <td>69.058986</td>\n",
" <td>0.178003</td>\n",
" <td>3.900636</td>\n",
" <td>0.000000</td>\n",
" <td>209.281398</td>\n",
" <td>2.046192</td>\n",
" <td>1999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1999-09-25</th>\n",
" <td>AAPL</td>\n",
" <td>Q4</td>\n",
" <td>2.766301</td>\n",
" <td>2.522272</td>\n",
" <td>0.856036</td>\n",
" <td>45.875749</td>\n",
" <td>1.890756</td>\n",
" <td>47.766505</td>\n",
" <td>76.764706</td>\n",
" <td>-28.998201</td>\n",
" <td>...</td>\n",
" <td>23.552897</td>\n",
" <td>51.769733</td>\n",
" <td>47.970120</td>\n",
" <td>47.970120</td>\n",
" <td>-0.467319</td>\n",
" <td>7.827460</td>\n",
" <td>0.000000</td>\n",
" <td>70.913430</td>\n",
" <td>3.369035</td>\n",
" <td>1999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2000-01-01</th>\n",
" <td>AAPL</td>\n",
" <td>Q1</td>\n",
" <td>2.498219</td>\n",
" <td>2.316539</td>\n",
" <td>0.807125</td>\n",
" <td>34.263764</td>\n",
" <td>0.777650</td>\n",
" <td>35.041414</td>\n",
" <td>60.864055</td>\n",
" <td>-25.822641</td>\n",
" <td>...</td>\n",
" <td>22.618570</td>\n",
" <td>49.423264</td>\n",
" <td>44.388186</td>\n",
" <td>44.388186</td>\n",
" <td>0.350588</td>\n",
" <td>7.066493</td>\n",
" <td>0.000000</td>\n",
" <td>58.063853</td>\n",
" <td>3.750973</td>\n",
" <td>2000</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",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-09-24</th>\n",
" <td>AAPL</td>\n",
" <td>Q4</td>\n",
" <td>0.879356</td>\n",
" <td>0.709408</td>\n",
" <td>0.153563</td>\n",
" <td>60.833315</td>\n",
" <td>8.551997</td>\n",
" <td>69.385312</td>\n",
" <td>110.859542</td>\n",
" <td>-41.474230</td>\n",
" <td>...</td>\n",
" <td>29.094281</td>\n",
" <td>115.723695</td>\n",
" <td>99.948206</td>\n",
" <td>99.948206</td>\n",
" <td>3.879237</td>\n",
" <td>26.750498</td>\n",
" <td>0.001536</td>\n",
" <td>90.344514</td>\n",
" <td>47.589406</td>\n",
" <td>2022</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022-12-31</th>\n",
" <td>AAPL</td>\n",
" <td>Q1</td>\n",
" <td>0.938020</td>\n",
" <td>0.768724</td>\n",
" <td>0.149578</td>\n",
" <td>41.622138</td>\n",
" <td>9.185598</td>\n",
" <td>50.807736</td>\n",
" <td>78.007542</td>\n",
" <td>-27.199806</td>\n",
" <td>...</td>\n",
" <td>17.208993</td>\n",
" <td>68.334817</td>\n",
" <td>60.724643</td>\n",
" <td>60.724643</td>\n",
" <td>0.369993</td>\n",
" <td>17.625873</td>\n",
" <td>0.001825</td>\n",
" <td>55.366190</td>\n",
" <td>36.401387</td>\n",
" <td>2023</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2023-04-01</th>\n",
" <td>AAPL</td>\n",
" <td>Q2</td>\n",
" <td>0.940354</td>\n",
" <td>0.764281</td>\n",
" <td>0.205597</td>\n",
" <td>34.068392</td>\n",
" <td>12.738933</td>\n",
" <td>46.807325</td>\n",
" <td>73.118615</td>\n",
" <td>-26.311290</td>\n",
" <td>...</td>\n",
" <td>26.938138</td>\n",
" <td>101.516990</td>\n",
" <td>91.152020</td>\n",
" <td>91.152020</td>\n",
" <td>-1.414252</td>\n",
" <td>27.450564</td>\n",
" <td>0.001402</td>\n",
" <td>86.117046</td>\n",
" <td>41.882005</td>\n",
" <td>2023</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2023-07-01</th>\n",
" <td>AAPL</td>\n",
" <td>Q3</td>\n",
" <td>0.981563</td>\n",
" <td>0.813585</td>\n",
" <td>0.227331</td>\n",
" <td>43.115762</td>\n",
" <td>14.577604</td>\n",
" <td>57.693367</td>\n",
" <td>92.607747</td>\n",
" <td>-34.914381</td>\n",
" <td>...</td>\n",
" <td>38.288645</td>\n",
" <td>125.370206</td>\n",
" <td>115.423282</td>\n",
" <td>115.423282</td>\n",
" <td>-2.253139</td>\n",
" <td>37.224668</td>\n",
" <td>0.001264</td>\n",
" <td>135.913479</td>\n",
" <td>50.517075</td>\n",
" <td>2023</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2023-09-30</th>\n",
" <td>AAPL</td>\n",
" <td>Q4</td>\n",
" <td>0.988012</td>\n",
" <td>0.843312</td>\n",
" <td>0.206217</td>\n",
" <td>61.327069</td>\n",
" <td>11.611542</td>\n",
" <td>72.938611</td>\n",
" <td>114.833405</td>\n",
" <td>-41.894793</td>\n",
" <td>...</td>\n",
" <td>29.085850</td>\n",
" <td>137.421101</td>\n",
" <td>123.658630</td>\n",
" <td>123.658630</td>\n",
" <td>1.846951</td>\n",
" <td>29.841774</td>\n",
" <td>0.001407</td>\n",
" <td>92.900618</td>\n",
" <td>42.975881</td>\n",
" <td>2023</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>100 rows × 57 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-7cf38376-8f1c-43b9-9d1a-578e0f267575')\"\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-7cf38376-8f1c-43b9-9d1a-578e0f267575 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-7cf38376-8f1c-43b9-9d1a-578e0f267575');\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-40497031-c39d-486f-975c-a6b353d3d6f1\">\n",
" <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-40497031-c39d-486f-975c-a6b353d3d6f1')\"\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-40497031-c39d-486f-975c-a6b353d3d6f1 button');\n",
" quickchartButtonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
" })();\n",
" </script>\n",
"</div>\n",
" </div>\n",
" </div>\n"
]
},
"metadata": {},
"execution_count": 93
}
]
},
{
"cell_type": "code",
"source": [
"# Create a widget for selecting the data to display.\n",
"\n",
"clear_output(wait = False)\n",
"\n",
"data_choices = data.columns.tolist()\n",
"data_selection = widgets.Dropdown(\n",
" options = data_choices,\n",
" value = None,\n",
")\n",
"output = widgets.Output()\n",
"\n",
"\n",
"def generate_figure(data, data_choice):\n",
" data = data[data[data_choice].notnull()]\n",
" fig = go.Figure()\n",
" fig.add_bar(\n",
" y = data[data_choice][data[data_choice] > 0].values,\n",
" x = data[data_choice][data[data_choice] > 0].index,\n",
" name = data_choice,\n",
" marker = dict(color = \"blue\"),\n",
" )\n",
" fig.add_bar(\n",
" y = data[data_choice][data[data_choice] < 0].values,\n",
" x = data[data_choice][data[data_choice] < 0].index,\n",
" name = data_choice,\n",
" marker = dict(color = \"red\")\n",
" )\n",
" fig.update_xaxes(type=\"category\")\n",
" fig.update_traces(width=0.98, selector=dict(type=\"bar\"))\n",
" fig.update_layout(\n",
" showlegend=False,\n",
" width=1400,\n",
" height=600,\n",
" title = dict(\n",
" text=f\"{symbol} {data_choice.replace('_', ' ').title()}\",\n",
" xanchor = \"center\",\n",
" x = 0.5,\n",
" font = dict(size = 20)\n",
" ),\n",
" barmode=\"overlay\",\n",
" bargap=0,\n",
" bargroupgap=0,\n",
" yaxis=dict(\n",
" ticklen=0,\n",
" showgrid=True,\n",
" tickfont=dict(size=14),\n",
" ),\n",
" xaxis=dict(\n",
" showgrid=False,\n",
" autorange=True,\n",
" tickangle=90,\n",
" tickfont=dict(size=11),\n",
" ),\n",
" )\n",
" return fig\n",
"\n",
"def on_value_change(change):\n",
" clear_output(wait = True)\n",
" display(data_selection)\n",
" with output:\n",
" data_selection.value\n",
"\n",
"data_selection.observe(on_value_change, names=\"value\")\n",
"display(data_selection)\n",
"\n",
"# Select from the drop-down menu below."
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 49,
"referenced_widgets": [
"fc6a4747cea243f4bac6a19c43264fec",
"bf10b4a3831f4e6595398f2d62a0f7b2",
"6095af63918f4075a891fc950c9790d3"
]
},
"id": "jvvAtHfvMkXB",
"outputId": "6155ecd8-5bec-4fb7-ef77-52b3bb325af7"
},
"execution_count": 102,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"Dropdown(options=('Total Open Interest', 'Call Open Interest', 'Put Open Interest', 'Total Volume', 'Call Volu…"
],
"application/vnd.jupyter.widget-view+json": {
"version_major": 2,
"version_minor": 0,
"model_id": "fc6a4747cea243f4bac6a19c43264fec"
}
},
"metadata": {}
}
]
},
{
"cell_type": "code",
"source": [
"# Play this cell to display the choice\n",
"\n",
"if data_selection.value is not None:\n",
"\n",
" generate_figure(data, data_selection.value).show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 617
},
"id": "J9D5Qq0sQOwH",
"outputId": "91092fb7-c313-4305-eed2-00d6b5750a8b"
},
"execution_count": 106,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"<html>\n",
"<head><meta charset=\"utf-8\" /></head>\n",
"<body>\n",
" <div> <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script> <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n",
" <script charset=\"utf-8\" src=\"https://cdn.plot.ly/plotly-2.27.0.min.js\"></script> <div id=\"bd364da0-3ff3-405a-a34f-67ffc2e881f9\" class=\"plotly-graph-div\" style=\"height:600px; width:1400px;\"></div> <script type=\"text/javascript\"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"bd364da0-3ff3-405a-a34f-67ffc2e881f9\")) { Plotly.newPlot( \"bd364da0-3ff3-405a-a34f-67ffc2e881f9\", [{\"marker\":{\"color\":\"blue\"},\"name\":\"Total Open Interest\",\"x\":[120.0,130.0,140.0,150.0,155.0,160.0,165.0,170.0,175.0,180.0,185.0,190.0,195.0,200.0,205.0,210.0,215.0,220.0,225.0,230.0,235.0,240.0,245.0,250.0,255.0,260.0,265.0,270.0,275.0,280.0,285.0,290.0,295.0,300.0,305.0,310.0,315.0,320.0,325.0,326.0,327.0,328.0,329.0,330.0,331.0,332.0,333.0,334.0,335.0,336.0,337.0,338.0,339.0,340.0,341.0,342.0,343.0,344.0,345.0,346.0,347.0,348.0,349.0,350.0,351.0,352.0,353.0,354.0,355.0,356.0,357.0,358.0,359.0,360.0,361.0,362.0,363.0,364.0,365.0,366.0,367.0,368.0,369.0,370.0,371.0,372.0,373.0,374.0,375.0,376.0,377.0,378.0,379.0,380.0,381.0,382.0,383.0,384.0,385.0,386.0,387.0,388.0,389.0,390.0,391.0,392.0,393.0,394.0,395.0,396.0,397.0,398.0,399.0,400.0,401.0,402.0,403.0,404.0,405.0,406.0,407.0,407.5,408.0,409.0,410.0,411.0,412.0,412.5,413.0,414.0,415.0,416.0,417.0,417.5,418.0,419.0,420.0,421.0,422.0,422.5,423.0,424.0,425.0,426.0,427.0,427.5,428.0,429.0,430.0,431.0,432.0,432.5,433.0,434.0,435.0,436.0,437.0,437.5,438.0,439.0,440.0,441.0,442.0,442.5,443.0,444.0,445.0,446.0,447.0,447.5,448.0,449.0,450.0,451.0,452.0,452.5,453.0,454.0,455.0,456.0,457.0,457.5,458.0,459.0,460.0,461.0,462.0,462.5,463.0,464.0,465.0,466.0,467.0,468.0,469.0,470.0,471.0,472.0,473.0,474.0,475.0,476.0,477.0,478.0,479.0,480.0,481.0,482.0,483.0,484.0,485.0,486.0,487.0,488.0,489.0,490.0,491.0,492.0,493.0,494.0,495.0,496.0,497.0,498.0,499.0,500.0,501.0,505.0,510.0,515.0,520.0,525.0,530.0,535.0,540.0,545.0,550.0,555.0,560.0,565.0,570.0,575.0,580.0,585.0,590.0,595.0,600.0,605.0,610.0,615.0,620.0,625.0,630.0,635.0,640.0,645.0,650.0,655.0,660.0,665.0,670.0,675.0,680.0,685.0,690.0,695.0,700.0,705.0,710.0,715.0,720.0],\"y\":[22821.0,1506.0,488.0,72684.0,12298.0,10083.0,10038.0,8360.0,9993.0,37606.0,32521.0,29836.0,20895.0,85139.0,24243.0,36551.0,26012.0,56622.0,23829.0,33532.0,17942.0,60632.0,35338.0,56527.0,18032.0,30316.0,30396.0,50209.0,61207.0,37026.0,50770.0,45185.0,65071.0,159070.0,53484.0,60967.0,57744.0,129600.0,109020.0,2146.0,722.0,2169.0,1340.0,133922.0,1021.0,600.0,6250.0,3915.0,98360.0,2251.0,1611.0,1133.0,1853.0,233517.0,2456.0,2804.0,2161.0,1495.0,209334.0,3899.0,5856.0,2493.0,4623.0,351448.0,6703.0,3386.0,3971.0,9834.0,239268.0,11716.0,7837.0,10534.0,13891.0,346649.0,5110.0,6728.0,4857.0,6349.0,241408.0,7327.0,17883.0,5797.0,10619.0,343956.0,7276.0,10860.0,24680.0,6971.0,285228.0,34212.0,8126.0,18856.0,12456.0,396584.0,12257.0,13430.0,15293.0,8502.0,355884.0,28496.0,8962.0,18364.0,10199.0,387739.0,19228.0,26884.0,38312.0,18468.0,317318.0,17398.0,52484.0,43708.0,20780.0,837400.0,30090.0,68012.0,59031.0,37417.0,479691.0,36668.0,72792.0,6570.0,54367.0,33032.0,413051.0,52289.0,72313.0,5688.0,86823.0,85569.0,384574.0,99860.0,47672.0,2956.0,48813.0,60772.0,573979.0,58836.0,87094.0,7284.0,83241.0,86451.0,325378.0,54454.0,82792.0,8865.0,74976.0,58801.0,554627.0,78622.0,134847.0,9534.0,84599.0,98230.0,388402.0,79630.0,78821.0,16208.0,103767.0,85884.0,579060.0,84556.0,94083.0,9933.0,84010.0,107284.0,419216.0,104896.0,157843.0,13630.0,140469.0,116466.0,580880.0,103277.0,140617.0,419.0,135349.0,135063.0,464252.0,155421.0,151442.0,264.0,132704.0,86808.0,540118.0,70502.0,95487.0,464.0,47076.0,58790.0,216515.0,45784.0,43140.0,36199.0,24123.0,227538.0,41618.0,39258.0,24366.0,25858.0,149346.0,33728.0,20640.0,22863.0,13496.0,256224.0,17288.0,18526.0,13245.0,9592.0,78595.0,6223.0,10567.0,6595.0,4966.0,102532.0,7202.0,4953.0,14529.0,11969.0,59821.0,11719.0,3194.0,5977.0,5599.0,149694.0,6120.0,79019.0,83626.0,66910.0,100439.0,58070.0,82737.0,45110.0,49113.0,40460.0,101677.0,57058.0,41655.0,32809.0,32979.0,22414.0,52753.0,8495.0,8062.0,7546.0,82029.0,10335.0,6059.0,10055.0,3992.0,10612.0,12064.0,5544.0,1155.0,2855.0,11228.0,40848.0,72462.0,16886.0,38843.0,5235.0,4188.0,3506.0,2461.0,2047.0,24945.0,478.0,1511.0,981.0,102823.0],\"type\":\"bar\",\"width\":0.98},{\"marker\":{\"color\":\"red\"},\"name\":\"Total Open Interest\",\"x\":[],\"y\":[],\"type\":\"bar\",\"width\":0.98}], {\"template\":{\"data\":{\"histogram2dcontour\":[{\"type\":\"histogram2dcontour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"choropleth\":[{\"type\":\"choropleth\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"histogram2d\":[{\"type\":\"histogram2d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmap\":[{\"type\":\"heatmap\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"heatmapgl\":[{\"type\":\"heatmapgl\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"contourcarpet\":[{\"type\":\"contourcarpet\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"contour\":[{\"type\":\"contour\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"surface\":[{\"type\":\"surface\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]}],\"mesh3d\":[{\"type\":\"mesh3d\",\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}],\"scatter\":[{\"fillpattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2},\"type\":\"scatter\"}],\"parcoords\":[{\"type\":\"parcoords\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolargl\":[{\"type\":\"scatterpolargl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"scattergeo\":[{\"type\":\"scattergeo\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterpolar\":[{\"type\":\"scatterpolar\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"scattergl\":[{\"type\":\"scattergl\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatter3d\":[{\"type\":\"scatter3d\",\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattermapbox\":[{\"type\":\"scattermapbox\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scatterternary\":[{\"type\":\"scatterternary\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"scattercarpet\":[{\"type\":\"scattercarpet\",\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}}}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}]},\"layout\":{\"autotypenumbers\":\"strict\",\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"hovermode\":\"closest\",\"hoverlabel\":{\"align\":\"left\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"bgcolor\":\"#E5ECF6\",\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"ternary\":{\"bgcolor\":\"#E5ECF6\",\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]]},\"xaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"yaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"automargin\":true,\"zerolinewidth\":2},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\",\"gridwidth\":2}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"geo\":{\"bgcolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"subunitcolor\":\"white\",\"showland\":true,\"showlakes\":true,\"lakecolor\":\"white\"},\"title\":{\"x\":0.05},\"mapbox\":{\"style\":\"light\"}}},\"xaxis\":{\"type\":\"category\",\"tickfont\":{\"size\":11},\"showgrid\":false,\"autorange\":true,\"tickangle\":90},\"title\":{\"font\":{\"size\":20},\"text\":\"AAPL Total Open Interest\",\"xanchor\":\"center\",\"x\":0.5},\"yaxis\":{\"tickfont\":{\"size\":14},\"ticklen\":0,\"showgrid\":true},\"showlegend\":false,\"width\":1400,\"height\":600,\"barmode\":\"overlay\",\"bargap\":0,\"bargroupgap\":0}, {\"responsive\": true} ).then(function(){\n",
" \n",
"var gd = document.getElementById('bd364da0-3ff3-405a-a34f-67ffc2e881f9');\n",
"var x = new MutationObserver(function (mutations, observer) {{\n",
" var display = window.getComputedStyle(gd).display;\n",
" if (!display || display === 'none') {{\n",
" console.log([gd, 'removed!']);\n",
" Plotly.purge(gd);\n",
" observer.disconnect();\n",
" }}\n",
"}});\n",
"\n",
"// Listen for the removal of the full notebook cells\n",
"var notebookContainer = gd.closest('#notebook-container');\n",
"if (notebookContainer) {{\n",
" x.observe(notebookContainer, {childList: true});\n",
"}}\n",
"\n",
"// Listen for the clearing of the current output cell\n",
"var outputEl = gd.closest('.output');\n",
"if (outputEl) {{\n",
" x.observe(outputEl, {childList: true});\n",
"}}\n",
"\n",
" }) }; </script> </div>\n",
"</body>\n",
"</html>"
]
},
"metadata": {}
}
]
}
]
}