Last active
September 29, 2024 20:39
-
-
Save danwagnerco/3241dff02261d50774c1088f623273c4 to your computer and use it in GitHub Desktop.
Visualize daily option flow by strike across all expiries
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"5Zt7mu\"></div>\n", | |
" <script type=\"text/javascript\" data-lets-plot-script=\"library\">\n", | |
" if(!window.letsPlotCallQueue) {\n", | |
" window.letsPlotCallQueue = [];\n", | |
" }; \n", | |
" window.letsPlotCall = function(f) {\n", | |
" window.letsPlotCallQueue.push(f);\n", | |
" };\n", | |
" (function() {\n", | |
" var script = document.createElement(\"script\");\n", | |
" script.type = \"text/javascript\";\n", | |
" script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/[email protected]/js-package/distr/lets-plot.min.js\";\n", | |
" script.onload = function() {\n", | |
" window.letsPlotCall = function(f) {f();};\n", | |
" window.letsPlotCallQueue.forEach(function(f) {f();});\n", | |
" window.letsPlotCallQueue = [];\n", | |
" \n", | |
" };\n", | |
" script.onerror = function(event) {\n", | |
" window.letsPlotCall = function(f) {}; // noop\n", | |
" window.letsPlotCallQueue = [];\n", | |
" var div = document.createElement(\"div\");\n", | |
" div.style.color = 'darkred';\n", | |
" div.textContent = 'Error loading Lets-Plot JS';\n", | |
" document.getElementById(\"5Zt7mu\").appendChild(div);\n", | |
" };\n", | |
" var e = document.getElementById(\"5Zt7mu\");\n", | |
" e.appendChild(script);\n", | |
" })()\n", | |
" </script>\n", | |
" " | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import os\n", | |
"import requests\n", | |
"import polars as pl\n", | |
"from lets_plot import *\n", | |
"LetsPlot.setup_html()\n", | |
"\n", | |
"uw_token = os.environ['UW_TOKEN']\n", | |
"headers = {'Accept': 'application/json, text/plain', 'Authorization': uw_token}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def theme_dark():\n", | |
" darkest_black = '#0d1117'\n", | |
" darker_black = '#161b22'\n", | |
" dark_black = '#21262d'\n", | |
" darkest_gray = '#89929b'\n", | |
" darker_gray = '#c6cdd5'\n", | |
" dark_gray = '#ecf2f8'\n", | |
" white = '#ffffff'\n", | |
" red = '#fa7970'\n", | |
" orange = '#faa356'\n", | |
" green = '#7ce38b'\n", | |
" sky_blue = 'a2d2fb'\n", | |
" blue = '#77bdfb'\n", | |
" purple = '#cea5fb'\n", | |
" return theme_none() + theme(\n", | |
" line=element_line(color=dark_gray, size=1),\n", | |
" rect=element_rect(color=darkest_gray, fill=darkest_black, size=2),\n", | |
" text=element_text(color=darker_gray),\n", | |
" axis_ontop=True,\n", | |
" axis_ticks=element_line(color=darker_gray),\n", | |
" legend_background=element_rect(size=2, fill=darker_black),\n", | |
" legend_position='bottom',\n", | |
" panel_grid_major=element_line(color=darker_gray, size=1, linetype='dashed'),\n", | |
" panel_grid_minor=element_blank(),\n", | |
" plot_background=element_rect(fill=darkest_black),\n", | |
" plot_title=element_text(hjust=0.5, color=dark_gray),\n", | |
" tooltip=element_rect(fill=darkest_black, color=dark_gray),\n", | |
" axis_tooltip=element_rect(color=darker_gray)\n", | |
" )\n", | |
"\n", | |
"\n", | |
"def theme_light():\n", | |
" darkest_black = '#0d1117'\n", | |
" darker_black = '#161b22'\n", | |
" dark_black = '#21262d'\n", | |
" darkest_gray = '#89929b'\n", | |
" darker_gray = '#c6cdd5'\n", | |
" dark_gray = '#ecf2f8'\n", | |
" white = '#ffffff'\n", | |
" red = '#fa7970'\n", | |
" orange = '#faa356'\n", | |
" green = '#7ce38b'\n", | |
" sky_blue = 'a2d2fb'\n", | |
" blue = '#77bdfb'\n", | |
" purple = '#cea5fb'\n", | |
" return theme_none() + theme(\n", | |
" line=element_line(color=darkest_black, size=1),\n", | |
" rect=element_rect(color=darkest_black, fill=white, size=2),\n", | |
" text=element_text(color=darkest_black),\n", | |
" axis_ontop=True,\n", | |
" axis_ticks=element_line(color=darker_black),\n", | |
" legend_background=element_rect(size=2),\n", | |
" legend_position='bottom',\n", | |
" panel_grid_major=element_line(color=dark_black, size=1, linetype='dashed'),\n", | |
" panel_grid_minor=element_blank(),\n", | |
" # plot_background=element_rect(fill=dark_gray),\n", | |
" plot_title=element_text(hjust=0.5, color=darkest_black),\n", | |
" tooltip=element_rect(color=dark_black),\n", | |
" axis_tooltip=element_rect(color=darker_black)\n", | |
" )\n", | |
"\n", | |
"\n", | |
"dark_theme = {\n", | |
" 'darkest_black': '#0d1117',\n", | |
" 'darker_black': '#161b22',\n", | |
" 'dark_black': '#21262d',\n", | |
" 'darkest_gray': '#89929b',\n", | |
" 'darker_gray': '#c6cdd5',\n", | |
" 'dark_gray': '#ecf2f8',\n", | |
" 'white': '#ffffff',\n", | |
" 'red': '#fa7970',\n", | |
" 'orange': '#faa356',\n", | |
" 'green': '#7ce38b',\n", | |
" 'sky_blue': '#a2d2fb',\n", | |
" 'blue': '#77bdfb',\n", | |
" 'purple': '#cea5fb'\n", | |
"}\n", | |
"\n", | |
"\n", | |
"def create_uw_option_df(ticker: str,\n", | |
" dates_to_exclude: list[str] = [],\n", | |
" dates_to_include: list[str] = []) -> pl.DataFrame:\n", | |
" \"\"\"\n", | |
" Return a Polars DataFrame containing option transaction data\n", | |
" by strike for the entire montage for the passed-in ticker.\n", | |
" \"\"\"\n", | |
" # Collect json data from the Unusual Whales API\n", | |
" base_url = ('https://api.unusualwhales.com/api/stock/'\n", | |
" '{}/option-contracts')\n", | |
" full_url = base_url.format(ticker)\n", | |
" r = requests.get(full_url, headers=headers)\n", | |
"\n", | |
" # Create DataFrame then format columns andcalculate strike price\n", | |
" # before returning to DataFrame the caller\n", | |
" df = pl.DataFrame(r.json()['data'])\n", | |
" df = (\n", | |
" df\n", | |
" .with_columns(\n", | |
" [\n", | |
" pl.col('high_price').cast(pl.Float64),\n", | |
" pl.col('implied_volatility').cast(pl.Float64),\n", | |
" pl.col('last_price').cast(pl.Float64),\n", | |
" pl.col('low_price').cast(pl.Float64),\n", | |
" pl.col('nbbo_ask').cast(pl.Float64),\n", | |
" pl.col('nbbo_bid').cast(pl.Float64),\n", | |
" pl.col('total_premium').cast(pl.Float64)\n", | |
" ]\n", | |
" )\n", | |
" .with_columns(\n", | |
" [\n", | |
" (\n", | |
" pl.col('option_symbol').str.slice(-9, 1).alias('option_type')\n", | |
" ),\n", | |
" (\n", | |
" pl.col('option_symbol').str.slice(-8).cast(pl.Float64) / 1000\n", | |
" ).alias('strike_price'),\n", | |
" ]\n", | |
" )\n", | |
" .with_columns(\n", | |
" pl.col('strike_price').cast(pl.Utf8).alias('strike_price_str')\n", | |
" )\n", | |
" .with_columns(\n", | |
" pl.concat_str(\n", | |
" [pl.col('strike_price').cast(pl.Utf8), pl.col('option_type')], separator=''\n", | |
" ).alias('strike')\n", | |
" )\n", | |
" .with_columns(\n", | |
" pl.concat_str(\n", | |
" [\n", | |
" (pl.lit('20') + pl.col('option_symbol').str.slice(len(ticker), 2)),\n", | |
" pl.col('option_symbol').str.slice(len(ticker) + 2, 2),\n", | |
" pl.col('option_symbol').str.slice(len(ticker) + 4, 2)\n", | |
" ],\n", | |
" separator='-'\n", | |
" ).alias('expiration_date_str')\n", | |
" )\n", | |
" )\n", | |
"\n", | |
" # Filter out any dates that are in the dates_to_ignore list\n", | |
" # (if not empty) and return the final results\n", | |
" if dates_to_exclude:\n", | |
" df = df.filter(~pl.col('expiration_date_str').is_in(dates_to_exclude))\n", | |
" elif dates_to_include:\n", | |
" df = df.filter(pl.col('expiration_date_str').is_in(dates_to_include))\n", | |
" return df\n", | |
"\n", | |
"\n", | |
"def aggregate_uw_option_df_by_strike_price(df: pl.DataFrame) -> pl.DataFrame:\n", | |
" \"\"\"\n", | |
" Aggregate volume and open interest by strike price across\n", | |
" the option montage included in the passed-in DataFrame.\n", | |
" \"\"\"\n", | |
" new_df = (\n", | |
" df\n", | |
" .group_by('strike')\n", | |
" .agg(\n", | |
" [\n", | |
" pl.sum('ask_volume').alias('total_ask_volume'),\n", | |
" pl.sum('bid_volume').alias('total_bid_volume'),\n", | |
" pl.sum('mid_volume').alias('total_mid_volume'),\n", | |
" pl.sum('no_side_volume').alias('total_no_side_volume'),\n", | |
" pl.sum('open_interest').alias('total_open_interest'),\n", | |
" pl.sum('volume').alias('total_volume'),\n", | |
" pl.min('strike_price'),\n", | |
" pl.min('strike_price_str'),\n", | |
" pl.min('option_type')\n", | |
" ]\n", | |
" )\n", | |
" )\n", | |
" return new_df.sort('strike_price', descending=False)\n", | |
"\n", | |
"\n", | |
"def configure_agg_df_for_plotting(df: pl.DataFrame) -> pl.DataFrame:\n", | |
" \"\"\"\n", | |
" Create a \"vertical\" DataFrame that plots much more easily\n", | |
" with Lets-Plot than the \"horizontal\" condensed DataFrame\n", | |
" \"\"\"\n", | |
" # Create an ask-specific DataFrame\n", | |
" ask_side_columns = [\n", | |
" 'strike',\n", | |
" 'strike_price',\n", | |
" 'strike_price_str',\n", | |
" 'option_type',\n", | |
" 'total_ask_volume',\n", | |
" ]\n", | |
" ask_side_df = df.select(ask_side_columns)\n", | |
" ask_side_df = ask_side_df.rename({'total_ask_volume': 'volume'})\n", | |
" ask_side_df = (\n", | |
" ask_side_df\n", | |
" .with_columns(\n", | |
" pl.lit('ask').alias('side')\n", | |
" )\n", | |
" .with_columns(\n", | |
" pl.when(pl.col('option_type') == 'P')\n", | |
" .then(pl.col('volume') * -1)\n", | |
" .otherwise(pl.col('volume'))\n", | |
" )\n", | |
" )\n", | |
"\n", | |
" # Create a bid-specific DataFrame\n", | |
" bid_side_columns = [\n", | |
" 'strike',\n", | |
" 'strike_price',\n", | |
" 'strike_price_str',\n", | |
" 'option_type',\n", | |
" 'total_bid_volume',\n", | |
" ]\n", | |
" bid_side_df = df.select(bid_side_columns)\n", | |
" bid_side_df = bid_side_df.rename({'total_bid_volume': 'volume'})\n", | |
" bid_side_df = (\n", | |
" bid_side_df\n", | |
" .with_columns(\n", | |
" pl.lit('bid').alias('side')\n", | |
" )\n", | |
" .with_columns(\n", | |
" pl.when(pl.col('option_type') == 'P')\n", | |
" .then(pl.col('volume') * -1)\n", | |
" .otherwise(pl.col('volume'))\n", | |
" )\n", | |
" )\n", | |
"\n", | |
" # Create a mid-specific DataFrame\n", | |
" mid_side_columns = [\n", | |
" 'strike',\n", | |
" 'strike_price',\n", | |
" 'strike_price_str',\n", | |
" 'option_type',\n", | |
" 'total_mid_volume',\n", | |
" ]\n", | |
" mid_side_df = df.select(mid_side_columns)\n", | |
" mid_side_df = mid_side_df.rename({'total_mid_volume': 'volume'})\n", | |
" mid_side_df = (\n", | |
" mid_side_df\n", | |
" .with_columns(\n", | |
" pl.lit('mid').alias('side')\n", | |
" )\n", | |
" .with_columns(\n", | |
" pl.when(pl.col('option_type') == 'P')\n", | |
" .then(pl.col('volume') * -1)\n", | |
" .otherwise(pl.col('volume'))\n", | |
" )\n", | |
" )\n", | |
"\n", | |
" # Create a no-side-specific DataFrame\n", | |
" no_side_columns = [\n", | |
" 'strike',\n", | |
" 'strike_price',\n", | |
" 'strike_price_str',\n", | |
" 'option_type',\n", | |
" 'total_no_side_volume',\n", | |
" ]\n", | |
" no_side_df = df.select(no_side_columns)\n", | |
" no_side_df = no_side_df.rename({'total_no_side_volume': 'volume'})\n", | |
" no_side_df = (\n", | |
" no_side_df\n", | |
" .with_columns(\n", | |
" pl.lit('no_side').alias('side')\n", | |
" )\n", | |
" .with_columns(\n", | |
" pl.when(pl.col('option_type') == 'P')\n", | |
" .then(pl.col('volume') * -1)\n", | |
" .otherwise(pl.col('volume'))\n", | |
" )\n", | |
" )\n", | |
" return (\n", | |
" ask_side_df\n", | |
" .vstack(bid_side_df)\n", | |
" .vstack(mid_side_df)\n", | |
" .vstack(no_side_df)\n", | |
" )\n", | |
"\n", | |
"\n", | |
"def plot_option_volume_by_strike_price(ticker: str,\n", | |
" df: pl.DataFrame,\n", | |
" dark_color: bool = True) -> ggplot:\n", | |
" \"\"\"\n", | |
" Plot the volume of option contracts by strike price\n", | |
" \"\"\"\n", | |
" tooltip_content = layer_tooltips().line('@volume')\n", | |
" light_color_values = [\n", | |
" dark_theme['green'],\n", | |
" dark_theme['red'],\n", | |
" dark_theme['blue'],\n", | |
" dark_theme['darker_gray']\n", | |
" ]\n", | |
" if dark_color:\n", | |
" p = ggplot(df, aes(x='volume', y='strike_price_str')) + \\\n", | |
" geom_bar(aes(fill='side'), stat='identity', color='white', size=0.5, tooltips=tooltip_content) + \\\n", | |
" ggsize(800, 700) + \\\n", | |
" ggtitle(f'{ticker} Option Volume') + \\\n", | |
" theme_dark() + \\\n", | |
" scale_fill_manual(values=light_color_values)\n", | |
" else:\n", | |
" p = ggplot(df, aes(x='volume', y='strike_price_str')) + \\\n", | |
" geom_bar(aes(fill='side'), stat='identity', color='black', size=0.5, tooltips=tooltip_content) + \\\n", | |
" ggsize(800, 700) + \\\n", | |
" ggtitle(f'{ticker} Option Volume') + \\\n", | |
" theme_light() + \\\n", | |
" scale_fill_manual(values=light_color_values)\n", | |
" return p" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
" <div id=\"e0F0jh\"></div>\n", | |
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", | |
" (function() {\n", | |
" var plotSpec={\n", | |
"\"data\":{\n", | |
"\"strike_price_str\":[\"65.0\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"95.0\",\"95.0\",\"100.0\",\"100.0\",\"105.0\",\"110.0\",\"115.0\",\"120.0\",\"125.0\",\"128.0\",\"130.0\",\"130.0\",\"133.0\",\"135.0\",\"135.0\",\"136.0\",\"137.0\",\"138.0\",\"139.0\",\"140.0\",\"140.0\",\"141.0\",\"142.0\",\"142.0\",\"143.0\",\"144.0\",\"145.0\",\"145.0\",\"146.0\",\"146.0\",\"147.0\",\"147.0\",\"148.0\",\"148.0\",\"149.0\",\"149.0\",\"150.0\",\"150.0\",\"152.5\",\"152.5\",\"155.0\",\"155.0\",\"157.5\",\"157.5\",\"160.0\",\"160.0\",\"162.5\",\"162.5\",\"165.0\",\"165.0\",\"167.5\",\"167.5\",\"170.0\",\"170.0\",\"172.5\",\"175.0\",\"175.0\",\"177.5\",\"180.0\",\"180.0\",\"182.5\",\"185.0\",\"185.0\",\"190.0\",\"190.0\",\"195.0\",\"195.0\",\"200.0\",\"200.0\",\"205.0\",\"210.0\",\"210.0\",\"215.0\",\"220.0\",\"225.0\",\"230.0\",\"230.0\",\"235.0\",\"240.0\",\"250.0\",\"255.0\",\"260.0\",\"260.0\",\"265.0\",\"270.0\",\"275.0\",\"280.0\",\"285.0\",\"290.0\",\"295.0\",\"300.0\",\"310.0\",\"320.0\",\"350.0\",\"360.0\",\"390.0\",\"65.0\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"95.0\",\"95.0\",\"100.0\",\"100.0\",\"105.0\",\"110.0\",\"115.0\",\"120.0\",\"125.0\",\"128.0\",\"130.0\",\"130.0\",\"133.0\",\"135.0\",\"135.0\",\"136.0\",\"137.0\",\"138.0\",\"139.0\",\"140.0\",\"140.0\",\"141.0\",\"142.0\",\"142.0\",\"143.0\",\"144.0\",\"145.0\",\"145.0\",\"146.0\",\"146.0\",\"147.0\",\"147.0\",\"148.0\",\"148.0\",\"149.0\",\"149.0\",\"150.0\",\"150.0\",\"152.5\",\"152.5\",\"155.0\",\"155.0\",\"157.5\",\"157.5\",\"160.0\",\"160.0\",\"162.5\",\"162.5\",\"165.0\",\"165.0\",\"167.5\",\"167.5\",\"170.0\",\"170.0\",\"172.5\",\"175.0\",\"175.0\",\"177.5\",\"180.0\",\"180.0\",\"182.5\",\"185.0\",\"185.0\",\"190.0\",\"190.0\",\"195.0\",\"195.0\",\"200.0\",\"200.0\",\"205.0\",\"210.0\",\"210.0\",\"215.0\",\"220.0\",\"225.0\",\"230.0\",\"230.0\",\"235.0\",\"240.0\",\"250.0\",\"255.0\",\"260.0\",\"260.0\",\"265.0\",\"270.0\",\"275.0\",\"280.0\",\"285.0\",\"290.0\",\"295.0\",\"300.0\",\"310.0\",\"320.0\",\"350.0\",\"360.0\",\"390.0\",\"65.0\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"95.0\",\"95.0\",\"100.0\",\"100.0\",\"105.0\",\"110.0\",\"115.0\",\"120.0\",\"125.0\",\"128.0\",\"130.0\",\"130.0\",\"133.0\",\"135.0\",\"135.0\",\"136.0\",\"137.0\",\"138.0\",\"139.0\",\"140.0\",\"140.0\",\"141.0\",\"142.0\",\"142.0\",\"143.0\",\"144.0\",\"145.0\",\"145.0\",\"146.0\",\"146.0\",\"147.0\",\"147.0\",\"148.0\",\"148.0\",\"149.0\",\"149.0\",\"150.0\",\"150.0\",\"152.5\",\"152.5\",\"155.0\",\"155.0\",\"157.5\",\"157.5\",\"160.0\",\"160.0\",\"162.5\",\"162.5\",\"165.0\",\"165.0\",\"167.5\",\"167.5\",\"170.0\",\"170.0\",\"172.5\",\"175.0\",\"175.0\",\"177.5\",\"180.0\",\"180.0\",\"182.5\",\"185.0\",\"185.0\",\"190.0\",\"190.0\",\"195.0\",\"195.0\",\"200.0\",\"200.0\",\"205.0\",\"210.0\",\"210.0\",\"215.0\",\"220.0\",\"225.0\",\"230.0\",\"230.0\",\"235.0\",\"240.0\",\"250.0\",\"255.0\",\"260.0\",\"260.0\",\"265.0\",\"270.0\",\"275.0\",\"280.0\",\"285.0\",\"290.0\",\"295.0\",\"300.0\",\"310.0\",\"320.0\",\"350.0\",\"360.0\",\"390.0\",\"65.0\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"95.0\",\"95.0\",\"100.0\",\"100.0\",\"105.0\",\"110.0\",\"115.0\",\"120.0\",\"125.0\",\"128.0\",\"130.0\",\"130.0\",\"133.0\",\"135.0\",\"135.0\",\"136.0\",\"137.0\",\"138.0\",\"139.0\",\"140.0\",\"140.0\",\"141.0\",\"142.0\",\"142.0\",\"143.0\",\"144.0\",\"145.0\",\"145.0\",\"146.0\",\"146.0\",\"147.0\",\"147.0\",\"148.0\",\"148.0\",\"149.0\",\"149.0\",\"150.0\",\"150.0\",\"152.5\",\"152.5\",\"155.0\",\"155.0\",\"157.5\",\"157.5\",\"160.0\",\"160.0\",\"162.5\",\"162.5\",\"165.0\",\"165.0\",\"167.5\",\"167.5\",\"170.0\",\"170.0\",\"172.5\",\"175.0\",\"175.0\",\"177.5\",\"180.0\",\"180.0\",\"182.5\",\"185.0\",\"185.0\",\"190.0\",\"190.0\",\"195.0\",\"195.0\",\"200.0\",\"200.0\",\"205.0\",\"210.0\",\"210.0\",\"215.0\",\"220.0\",\"225.0\",\"230.0\",\"230.0\",\"235.0\",\"240.0\",\"250.0\",\"255.0\",\"260.0\",\"260.0\",\"265.0\",\"270.0\",\"275.0\",\"280.0\",\"285.0\",\"290.0\",\"295.0\",\"300.0\",\"310.0\",\"320.0\",\"350.0\",\"360.0\",\"390.0\"],\n", | |
"\"volume\":[-30.0,-147.0,3.0,-5.0,0.0,10.0,0.0,-76.0,0.0,-21.0,-48.0,-34.0,-175.0,-138.0,-5.0,-1025.0,34.0,-1.0,17.0,-127.0,-20.0,0.0,-63.0,-3.0,-541.0,59.0,-5.0,-337.0,0.0,-392.0,-497.0,-1688.0,35.0,0.0,-152.0,-139.0,10.0,-108.0,1.0,-153.0,2.0,930.0,-1210.0,207.0,-366.0,1704.0,-2345.0,1269.0,-874.0,-685.0,4200.0,-31.0,793.0,2473.0,-100.0,329.0,-4.0,9269.0,-258.0,130.0,-167.0,875.0,12.0,-39.0,3659.0,123.0,328.0,-33.0,-81.0,547.0,138.0,-17.0,1357.0,-49.0,64.0,-10.0,38.0,4.0,128.0,21.0,33.0,0.0,5.0,12.0,492.0,6.0,91.0,0.0,10.0,71.0,7.0,75.0,2.0,1.0,0.0,39.0,1.0,1.0,351.0,4.0,0.0,-230.0,-336.0,23.0,0.0,-16.0,1.0,-13.0,-28.0,6.0,-164.0,-44.0,-41.0,-204.0,-112.0,0.0,-346.0,30.0,0.0,1.0,-266.0,-19.0,-47.0,-60.0,-7.0,-1051.0,34.0,-8.0,-26.0,10.0,-76.0,-108.0,-1285.0,32.0,38.0,-23.0,-88.0,0.0,-119.0,16.0,-152.0,4.0,296.0,-941.0,210.0,-388.0,1815.0,-1943.0,1145.0,-751.0,-597.0,4430.0,-67.0,542.0,2182.0,-179.0,157.0,-2.0,2938.0,-212.0,114.0,-295.0,1354.0,235.0,-54.0,8311.0,3.0,283.0,-28.0,0.0,463.0,162.0,-2.0,277.0,0.0,66.0,0.0,72.0,20.0,99.0,47.0,40.0,0.0,13.0,7.0,523.0,5.0,122.0,0.0,0.0,34.0,3.0,131.0,4.0,9.0,4.0,7.0,21.0,14.0,2.0,1.0,63.0,0.0,-16.0,0.0,0.0,0.0,0.0,-1.0,-30.0,0.0,0.0,0.0,-13.0,-81.0,-128.0,0.0,-31.0,4.0,-9.0,0.0,-24.0,0.0,-1.0,-8.0,-1.0,-338.0,0.0,0.0,-4.0,0.0,-213.0,-18.0,-149.0,6.0,2.0,-27.0,-38.0,0.0,-41.0,0.0,-64.0,0.0,25.0,-241.0,17.0,-65.0,236.0,-231.0,315.0,-70.0,-61.0,815.0,-8.0,172.0,429.0,-8.0,59.0,0.0,621.0,-17.0,18.0,-35.0,412.0,5.0,-6.0,616.0,0.0,74.0,-10.0,0.0,98.0,35.0,0.0,67.0,0.0,3.0,0.0,10.0,5.0,10.0,10.0,7.0,0.0,0.0,6.0,39.0,0.0,0.0,0.0,5.0,20.0,4.0,9.0,0.0,0.0,0.0,0.0,0.0,0.0,55.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-19.0,0.0,0.0,0.0,0.0,0.0,-19.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", | |
"\"side\":[\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\"]\n", | |
"},\n", | |
"\"mapping\":{\n", | |
"\"x\":\"volume\",\n", | |
"\"y\":\"strike_price_str\"\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"ggsize\":{\n", | |
"\"width\":800.0,\n", | |
"\"height\":700.0\n", | |
"},\n", | |
"\"ggtitle\":{\n", | |
"\"text\":\"BA Option Volume\"\n", | |
"},\n", | |
"\"theme\":{\n", | |
"\"name\":\"none\",\n", | |
"\"line\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":1.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"rect\":{\n", | |
"\"fill\":\"#ffffff\",\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"text\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_ontop\":true,\n", | |
"\"axis_ticks\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_background\":{\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_position\":\"bottom\",\n", | |
"\"panel_grid_major\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"size\":1.0,\n", | |
"\"linetype\":\"dashed\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"panel_grid_minor\":{\n", | |
"\"blank\":true\n", | |
"},\n", | |
"\"plot_title\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"hjust\":0.5,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_tooltip\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"tooltip\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"blank\":false\n", | |
"}\n", | |
"},\n", | |
"\"kind\":\"plot\",\n", | |
"\"scales\":[{\n", | |
"\"aesthetic\":\"fill\",\n", | |
"\"values\":[\"#7ce38b\",\"#fa7970\",\"#77bdfb\",\"#c6cdd5\"]\n", | |
"}],\n", | |
"\"layers\":[{\n", | |
"\"geom\":\"bar\",\n", | |
"\"stat\":\"identity\",\n", | |
"\"mapping\":{\n", | |
"\"fill\":\"side\"\n", | |
"},\n", | |
"\"tooltips\":{\n", | |
"\"formats\":[],\n", | |
"\"lines\":[\"@volume\"]\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"color\":\"black\",\n", | |
"\"size\":0.5,\n", | |
"\"orientation\":\"y\",\n", | |
"\"data\":{\n", | |
"}\n", | |
"}],\n", | |
"\"metainfo_list\":[]\n", | |
"};\n", | |
" var plotContainer = document.getElementById(\"e0F0jh\");\n", | |
" window.letsPlotCall(function() {{\n", | |
" LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", | |
" }});\n", | |
" })();\n", | |
" </script>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"ticker = 'BA'\n", | |
"expiry_dates_to_remove = ['2024-09-27']\n", | |
"raw_df = create_uw_option_df(ticker, dates_to_exclude=expiry_dates_to_remove)\n", | |
"agg_df = aggregate_uw_option_df_by_strike_price(raw_df)\n", | |
"plot_df = configure_agg_df_for_plotting(agg_df)\n", | |
"p = plot_option_volume_by_strike_price(ticker, plot_df, dark_color=False)\n", | |
"p.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**BA option volume chart (above)**\n", | |
"- I recently saw some interesting trades in BA (including 10_000x total volume (screen trades and `FLOOR` broker-executed) Nov24 185C marked closer to the bid) so I want to keep tabs on any new developments in BA options\n", | |
"- Removed 0dte transactions since this is something I am studying longer-term\n", | |
"- **BIG** volume (12_000 up) on the 170C/180C strikes, leads me to believe a call spread buyer has stepped in as well\n", | |
"- Quick investigation reveals that yes, a Nov24 170C/180C position traded about 4650x via `FLOOR` broker at 09:59:36 Chicago time, very interesting" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
" <div id=\"eGex5z\"></div>\n", | |
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", | |
" (function() {\n", | |
" var plotSpec={\n", | |
"\"data\":{\n", | |
"\"strike_price_str\":[\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"40.0\",\"40.0\",\"42.5\",\"42.5\",\"45.0\",\"45.0\",\"47.5\",\"47.5\",\"50.0\",\"50.0\",\"52.5\",\"52.5\",\"55.0\",\"55.0\",\"57.5\",\"57.5\",\"60.0\",\"60.0\",\"62.5\",\"62.5\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"85.0\",\"100.0\",\"105.0\",\"110.0\",\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"40.0\",\"40.0\",\"42.5\",\"42.5\",\"45.0\",\"45.0\",\"47.5\",\"47.5\",\"50.0\",\"50.0\",\"52.5\",\"52.5\",\"55.0\",\"55.0\",\"57.5\",\"57.5\",\"60.0\",\"60.0\",\"62.5\",\"62.5\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"85.0\",\"100.0\",\"105.0\",\"110.0\",\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"40.0\",\"40.0\",\"42.5\",\"42.5\",\"45.0\",\"45.0\",\"47.5\",\"47.5\",\"50.0\",\"50.0\",\"52.5\",\"52.5\",\"55.0\",\"55.0\",\"57.5\",\"57.5\",\"60.0\",\"60.0\",\"62.5\",\"62.5\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"85.0\",\"100.0\",\"105.0\",\"110.0\",\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"40.0\",\"40.0\",\"42.5\",\"42.5\",\"45.0\",\"45.0\",\"47.5\",\"47.5\",\"50.0\",\"50.0\",\"52.5\",\"52.5\",\"55.0\",\"55.0\",\"57.5\",\"57.5\",\"60.0\",\"60.0\",\"62.5\",\"62.5\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"85.0\",\"100.0\",\"105.0\",\"110.0\"],\n", | |
"\"volume\":[2.0,-150.0,0.0,0.0,-1.0,1.0,0.0,-1.0,21.0,-14.0,-15.0,0.0,-145.0,16.0,-9.0,4.0,-109.0,382.0,490.0,-43.0,-10.0,1671.0,133.0,0.0,-2.0,849.0,262.0,-35.0,553.0,38.0,0.0,0.0,1186.0,0.0,561.0,83.0,0.0,0.0,400.0,0.0,43.0,0.0,0.0,0.0,-15.0,0.0,0.0,0.0,0.0,2.0,-1.0,46.0,-40.0,-41.0,2.0,-173.0,10.0,-270.0,16.0,-273.0,200.0,1439.0,-126.0,-49.0,1081.0,199.0,-14.0,-3.0,752.0,24.0,-137.0,76.0,17.0,0.0,-1.0,309.0,0.0,198.0,292.0,0.0,200.0,159.0,0.0,11.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,-10.0,0.0,-6.0,0.0,-49.0,1.0,-19.0,397.0,184.0,-30.0,0.0,181.0,55.0,0.0,0.0,173.0,34.0,0.0,20.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,16.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1200.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1238.0,-1140.0,0.0,-75.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", | |
"\"side\":[\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\"]\n", | |
"},\n", | |
"\"mapping\":{\n", | |
"\"x\":\"volume\",\n", | |
"\"y\":\"strike_price_str\"\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"ggsize\":{\n", | |
"\"width\":800.0,\n", | |
"\"height\":700.0\n", | |
"},\n", | |
"\"ggtitle\":{\n", | |
"\"text\":\"OXY Option Volume\"\n", | |
"},\n", | |
"\"theme\":{\n", | |
"\"name\":\"none\",\n", | |
"\"line\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":1.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"rect\":{\n", | |
"\"fill\":\"#ffffff\",\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"text\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_ontop\":true,\n", | |
"\"axis_ticks\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_background\":{\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_position\":\"bottom\",\n", | |
"\"panel_grid_major\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"size\":1.0,\n", | |
"\"linetype\":\"dashed\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"panel_grid_minor\":{\n", | |
"\"blank\":true\n", | |
"},\n", | |
"\"plot_title\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"hjust\":0.5,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_tooltip\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"tooltip\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"blank\":false\n", | |
"}\n", | |
"},\n", | |
"\"kind\":\"plot\",\n", | |
"\"scales\":[{\n", | |
"\"aesthetic\":\"fill\",\n", | |
"\"values\":[\"#7ce38b\",\"#fa7970\",\"#77bdfb\",\"#c6cdd5\"]\n", | |
"}],\n", | |
"\"layers\":[{\n", | |
"\"geom\":\"bar\",\n", | |
"\"stat\":\"identity\",\n", | |
"\"mapping\":{\n", | |
"\"fill\":\"side\"\n", | |
"},\n", | |
"\"tooltips\":{\n", | |
"\"formats\":[],\n", | |
"\"lines\":[\"@volume\"]\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"color\":\"black\",\n", | |
"\"size\":0.5,\n", | |
"\"orientation\":\"y\",\n", | |
"\"data\":{\n", | |
"}\n", | |
"}],\n", | |
"\"metainfo_list\":[]\n", | |
"};\n", | |
" var plotContainer = document.getElementById(\"eGex5z\");\n", | |
" window.letsPlotCall(function() {{\n", | |
" LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", | |
" }});\n", | |
" })();\n", | |
" </script>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"ticker = 'OXY'\n", | |
"expiry_dates_to_include = ['2025-01-17', '2025-02-21', '2025-03-21']\n", | |
"raw_df = create_uw_option_df(ticker, dates_to_include=expiry_dates_to_include)\n", | |
"agg_df = aggregate_uw_option_df_by_strike_price(raw_df)\n", | |
"plot_df = configure_agg_df_for_plotting(agg_df)\n", | |
"p = plot_option_volume_by_strike_price(ticker, plot_df, dark_color=False)\n", | |
"p.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**OXY option volume chart (above)**\n", | |
"- An avid Buffett fan let me know that OXY was trading well below Warren's latest add in June at $59.62\n", | |
"- He was forecasting a +10% to +25% move up in OXY price due to a number of oil-specific factors that went way over my head lol\n", | |
"- I adjusted the expiries on this one to only look at Jan'25, Feb'25, and Mar'25 since that was his predicted time needed for the rally\n", | |
"- Certainly some longer-dated trading going on, but OXY is heavily traded and nothing really jumped out at me so in the next graph I decided to get rid of the filters and take a wider look" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
" <div id=\"LmwK7G\"></div>\n", | |
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", | |
" (function() {\n", | |
" var plotSpec={\n", | |
"\"data\":{\n", | |
"\"strike_price_str\":[\"27.5\",\"27.5\",\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"38.5\",\"39.0\",\"40.0\",\"40.0\",\"41.0\",\"42.0\",\"42.5\",\"42.5\",\"43.0\",\"43.5\",\"44.0\",\"44.0\",\"45.0\",\"45.0\",\"45.5\",\"46.0\",\"46.0\",\"46.5\",\"46.5\",\"47.0\",\"47.0\",\"47.5\",\"47.5\",\"48.0\",\"48.0\",\"48.5\",\"48.5\",\"49.0\",\"49.0\",\"49.5\",\"49.5\",\"50.0\",\"50.0\",\"51.0\",\"51.0\",\"52.0\",\"52.0\",\"52.5\",\"52.5\",\"53.0\",\"53.0\",\"54.0\",\"54.0\",\"55.0\",\"55.0\",\"56.0\",\"56.0\",\"57.0\",\"57.0\",\"57.5\",\"57.5\",\"58.0\",\"59.0\",\"60.0\",\"60.0\",\"61.0\",\"62.0\",\"62.5\",\"62.5\",\"64.0\",\"65.0\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"100.0\",\"105.0\",\"110.0\",\"27.5\",\"27.5\",\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"38.5\",\"39.0\",\"40.0\",\"40.0\",\"41.0\",\"42.0\",\"42.5\",\"42.5\",\"43.0\",\"43.5\",\"44.0\",\"44.0\",\"45.0\",\"45.0\",\"45.5\",\"46.0\",\"46.0\",\"46.5\",\"46.5\",\"47.0\",\"47.0\",\"47.5\",\"47.5\",\"48.0\",\"48.0\",\"48.5\",\"48.5\",\"49.0\",\"49.0\",\"49.5\",\"49.5\",\"50.0\",\"50.0\",\"51.0\",\"51.0\",\"52.0\",\"52.0\",\"52.5\",\"52.5\",\"53.0\",\"53.0\",\"54.0\",\"54.0\",\"55.0\",\"55.0\",\"56.0\",\"56.0\",\"57.0\",\"57.0\",\"57.5\",\"57.5\",\"58.0\",\"59.0\",\"60.0\",\"60.0\",\"61.0\",\"62.0\",\"62.5\",\"62.5\",\"64.0\",\"65.0\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"100.0\",\"105.0\",\"110.0\",\"27.5\",\"27.5\",\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"38.5\",\"39.0\",\"40.0\",\"40.0\",\"41.0\",\"42.0\",\"42.5\",\"42.5\",\"43.0\",\"43.5\",\"44.0\",\"44.0\",\"45.0\",\"45.0\",\"45.5\",\"46.0\",\"46.0\",\"46.5\",\"46.5\",\"47.0\",\"47.0\",\"47.5\",\"47.5\",\"48.0\",\"48.0\",\"48.5\",\"48.5\",\"49.0\",\"49.0\",\"49.5\",\"49.5\",\"50.0\",\"50.0\",\"51.0\",\"51.0\",\"52.0\",\"52.0\",\"52.5\",\"52.5\",\"53.0\",\"53.0\",\"54.0\",\"54.0\",\"55.0\",\"55.0\",\"56.0\",\"56.0\",\"57.0\",\"57.0\",\"57.5\",\"57.5\",\"58.0\",\"59.0\",\"60.0\",\"60.0\",\"61.0\",\"62.0\",\"62.5\",\"62.5\",\"64.0\",\"65.0\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"100.0\",\"105.0\",\"110.0\",\"27.5\",\"27.5\",\"30.0\",\"30.0\",\"32.5\",\"32.5\",\"35.0\",\"35.0\",\"37.5\",\"37.5\",\"38.5\",\"39.0\",\"40.0\",\"40.0\",\"41.0\",\"42.0\",\"42.5\",\"42.5\",\"43.0\",\"43.5\",\"44.0\",\"44.0\",\"45.0\",\"45.0\",\"45.5\",\"46.0\",\"46.0\",\"46.5\",\"46.5\",\"47.0\",\"47.0\",\"47.5\",\"47.5\",\"48.0\",\"48.0\",\"48.5\",\"48.5\",\"49.0\",\"49.0\",\"49.5\",\"49.5\",\"50.0\",\"50.0\",\"51.0\",\"51.0\",\"52.0\",\"52.0\",\"52.5\",\"52.5\",\"53.0\",\"53.0\",\"54.0\",\"54.0\",\"55.0\",\"55.0\",\"56.0\",\"56.0\",\"57.0\",\"57.0\",\"57.5\",\"57.5\",\"58.0\",\"59.0\",\"60.0\",\"60.0\",\"61.0\",\"62.0\",\"62.5\",\"62.5\",\"64.0\",\"65.0\",\"65.0\",\"67.5\",\"67.5\",\"70.0\",\"70.0\",\"72.5\",\"72.5\",\"75.0\",\"77.5\",\"77.5\",\"80.0\",\"80.0\",\"85.0\",\"90.0\",\"100.0\",\"105.0\",\"110.0\"],\n", | |
"\"volume\":[17.0,0.0,-160.0,12.0,-88.0,0.0,8.0,-9.0,-1.0,4.0,50.0,0.0,47.0,-210.0,-1.0,-4.0,1.0,-48.0,-6.0,0.0,0.0,-19.0,-3370.0,50.0,0.0,20.0,-68.0,0.0,-106.0,52.0,-125.0,53.0,-259.0,-355.0,35.0,-43.0,10.0,265.0,-625.0,108.0,-341.0,15125.0,-3165.0,5741.0,-655.0,-119.0,3065.0,-77.0,1964.0,-97.0,4632.0,2651.0,-16.0,13290.0,-590.0,103.0,-7.0,0.0,1199.0,-204.0,806.0,299.0,26.0,1736.0,-65.0,0.0,0.0,-46.0,373.0,0.0,1058.0,-2.0,71.0,0.0,-6.0,1385.0,0.0,566.0,273.0,10.0,0.0,436.0,0.0,18.0,0.0,99.0,0.0,0.0,120.0,-20.0,-15.0,3.0,-507.0,0.0,8.0,-17.0,-542.0,5.0,0.0,0.0,49.0,-617.0,0.0,-4.0,4.0,-77.0,-3.0,-30.0,1.0,-104.0,-1092.0,1065.0,0.0,0.0,-45.0,1.0,-13.0,3.0,-94.0,35.0,-654.0,-7508.0,78.0,-72.0,3.0,163.0,-269.0,82.0,-1096.0,5975.0,-2207.0,4181.0,-1135.0,-304.0,3315.0,-277.0,3177.0,-68.0,5305.0,1104.0,-11.0,6561.0,-396.0,80.0,-4.0,-5.0,145.0,-100.0,1344.0,58.0,420.0,2382.0,-90.0,1.0,218.0,-181.0,301.0,0.0,402.0,0.0,166.0,0.0,-1.0,690.0,0.0,200.0,413.0,233.0,0.0,170.0,0.0,3.0,46.0,94.0,0.0,1.0,0.0,0.0,0.0,10.0,0.0,1.0,0.0,0.0,-3.0,0.0,0.0,0.0,11.0,-123.0,0.0,-5.0,0.0,-33.0,-1.0,0.0,0.0,0.0,-255.0,528.0,0.0,0.0,-3.0,0.0,-3.0,1.0,-60.0,16.0,-219.0,-67.0,11.0,-31.0,0.0,6.0,-63.0,2.0,-97.0,2422.0,-391.0,904.0,-214.0,-23.0,559.0,-74.0,625.0,-11.0,124.0,109.0,-8.0,2466.0,-187.0,81.0,-1.0,0.0,314.0,-8.0,172.0,17.0,0.0,373.0,-26.0,0.0,0.0,-2.0,70.0,0.0,35.0,0.0,5.0,0.0,0.0,23.0,0.0,0.0,109.0,0.0,0.0,4.0,0.0,48.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1200.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1238.0,-1140.0,0.0,-75.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],\n", | |
"\"side\":[\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\"]\n", | |
"},\n", | |
"\"mapping\":{\n", | |
"\"x\":\"volume\",\n", | |
"\"y\":\"strike_price_str\"\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"ggsize\":{\n", | |
"\"width\":800.0,\n", | |
"\"height\":700.0\n", | |
"},\n", | |
"\"ggtitle\":{\n", | |
"\"text\":\"OXY Option Volume\"\n", | |
"},\n", | |
"\"theme\":{\n", | |
"\"name\":\"none\",\n", | |
"\"line\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":1.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"rect\":{\n", | |
"\"fill\":\"#ffffff\",\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"text\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_ontop\":true,\n", | |
"\"axis_ticks\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_background\":{\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_position\":\"bottom\",\n", | |
"\"panel_grid_major\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"size\":1.0,\n", | |
"\"linetype\":\"dashed\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"panel_grid_minor\":{\n", | |
"\"blank\":true\n", | |
"},\n", | |
"\"plot_title\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"hjust\":0.5,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_tooltip\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"tooltip\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"blank\":false\n", | |
"}\n", | |
"},\n", | |
"\"kind\":\"plot\",\n", | |
"\"scales\":[{\n", | |
"\"aesthetic\":\"fill\",\n", | |
"\"values\":[\"#7ce38b\",\"#fa7970\",\"#77bdfb\",\"#c6cdd5\"]\n", | |
"}],\n", | |
"\"layers\":[{\n", | |
"\"geom\":\"bar\",\n", | |
"\"stat\":\"identity\",\n", | |
"\"mapping\":{\n", | |
"\"fill\":\"side\"\n", | |
"},\n", | |
"\"tooltips\":{\n", | |
"\"formats\":[],\n", | |
"\"lines\":[\"@volume\"]\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"color\":\"black\",\n", | |
"\"size\":0.5,\n", | |
"\"orientation\":\"y\",\n", | |
"\"data\":{\n", | |
"}\n", | |
"}],\n", | |
"\"metainfo_list\":[]\n", | |
"};\n", | |
" var plotContainer = document.getElementById(\"LmwK7G\");\n", | |
" window.letsPlotCall(function() {{\n", | |
" LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", | |
" }});\n", | |
" })();\n", | |
" </script>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"ticker = 'OXY'\n", | |
"raw_df = create_uw_option_df(ticker)\n", | |
"agg_df = aggregate_uw_option_df_by_strike_price(raw_df)\n", | |
"plot_df = configure_agg_df_for_plotting(agg_df)\n", | |
"p = plot_option_volume_by_strike_price(ticker, plot_df, dark_color=False)\n", | |
"p.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**OXY option volume chart above (above but this time showing all expirations)**\n", | |
"- Now this looks a lot more interesting, the 50C and 55C both saw 20_000+ contracts trade\n", | |
"- Quick review at [https://unusualwhales.com/stock/OXY/overview?](https://unusualwhales.com/stock/OXY/overview?) and I see 14_000+ Nov'24 50Cs traded primarily on the ask (which aligns nicely with the chart), very interesting indeed" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
" <div id=\"EmL7D9\"></div>\n", | |
" <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n", | |
" (function() {\n", | |
" var plotSpec={\n", | |
"\"data\":{\n", | |
"\"strike_price_str\":[\"3000.0\",\"3400.0\",\"3600.0\",\"3750.0\",\"3800.0\",\"3900.0\",\"4000.0\",\"4100.0\",\"4200.0\",\"4300.0\",\"4350.0\",\"4400.0\",\"4475.0\",\"4500.0\",\"4550.0\",\"4600.0\",\"4650.0\",\"4700.0\",\"4710.0\",\"4725.0\",\"4750.0\",\"4775.0\",\"4800.0\",\"4845.0\",\"4850.0\",\"4875.0\",\"4900.0\",\"4950.0\",\"4975.0\",\"4985.0\",\"5000.0\",\"5010.0\",\"5025.0\",\"5050.0\",\"5100.0\",\"5115.0\",\"5125.0\",\"5150.0\",\"5170.0\",\"5175.0\",\"5190.0\",\"5200.0\",\"5210.0\",\"5220.0\",\"5230.0\",\"5240.0\",\"5250.0\",\"5265.0\",\"5270.0\",\"5275.0\",\"5290.0\",\"5300.0\",\"5305.0\",\"5310.0\",\"5325.0\",\"5340.0\",\"5350.0\",\"5375.0\",\"5380.0\",\"5390.0\",\"5395.0\",\"5400.0\",\"5425.0\",\"5440.0\",\"5450.0\",\"5455.0\",\"5460.0\",\"5470.0\",\"5475.0\",\"5485.0\",\"5490.0\",\"5500.0\",\"5510.0\",\"5515.0\",\"5520.0\",\"5525.0\",\"5530.0\",\"5540.0\",\"5545.0\",\"5550.0\",\"5555.0\",\"5560.0\",\"5565.0\",\"5570.0\",\"5575.0\",\"5580.0\",\"5585.0\",\"5590.0\",\"5595.0\",\"5600.0\",\"5605.0\",\"5610.0\",\"5615.0\",\"5620.0\",\"5625.0\",\"5630.0\",\"5635.0\",\"5640.0\",\"5645.0\",\"5650.0\",\"5655.0\",\"5660.0\",\"5665.0\",\"5670.0\",\"5675.0\",\"5680.0\",\"5685.0\",\"5690.0\",\"5695.0\",\"5700.0\",\"5705.0\",\"5710.0\",\"5715.0\",\"5720.0\",\"5725.0\",\"5725.0\",\"5730.0\",\"5730.0\",\"5735.0\",\"5735.0\",\"5740.0\",\"5740.0\",\"5745.0\",\"5745.0\",\"5750.0\",\"5750.0\",\"5755.0\",\"5755.0\",\"5760.0\",\"5760.0\",\"5765.0\",\"5765.0\",\"5770.0\",\"5770.0\",\"5775.0\",\"5775.0\",\"5780.0\",\"5780.0\",\"5785.0\",\"5790.0\",\"5795.0\",\"5800.0\",\"5800.0\",\"5805.0\",\"5810.0\",\"5810.0\",\"5815.0\",\"5820.0\",\"5820.0\",\"5825.0\",\"5830.0\",\"5835.0\",\"5840.0\",\"5845.0\",\"5850.0\",\"5855.0\",\"5860.0\",\"5865.0\",\"5870.0\",\"5875.0\",\"5880.0\",\"5885.0\",\"5890.0\",\"5900.0\",\"5910.0\",\"5915.0\",\"5920.0\",\"5925.0\",\"5950.0\",\"5975.0\",\"6000.0\",\"6100.0\",\"6110.0\",\"3000.0\",\"3400.0\",\"3600.0\",\"3750.0\",\"3800.0\",\"3900.0\",\"4000.0\",\"4100.0\",\"4200.0\",\"4300.0\",\"4350.0\",\"4400.0\",\"4475.0\",\"4500.0\",\"4550.0\",\"4600.0\",\"4650.0\",\"4700.0\",\"4710.0\",\"4725.0\",\"4750.0\",\"4775.0\",\"4800.0\",\"4845.0\",\"4850.0\",\"4875.0\",\"4900.0\",\"4950.0\",\"4975.0\",\"4985.0\",\"5000.0\",\"5010.0\",\"5025.0\",\"5050.0\",\"5100.0\",\"5115.0\",\"5125.0\",\"5150.0\",\"5170.0\",\"5175.0\",\"5190.0\",\"5200.0\",\"5210.0\",\"5220.0\",\"5230.0\",\"5240.0\",\"5250.0\",\"5265.0\",\"5270.0\",\"5275.0\",\"5290.0\",\"5300.0\",\"5305.0\",\"5310.0\",\"5325.0\",\"5340.0\",\"5350.0\",\"5375.0\",\"5380.0\",\"5390.0\",\"5395.0\",\"5400.0\",\"5425.0\",\"5440.0\",\"5450.0\",\"5455.0\",\"5460.0\",\"5470.0\",\"5475.0\",\"5485.0\",\"5490.0\",\"5500.0\",\"5510.0\",\"5515.0\",\"5520.0\",\"5525.0\",\"5530.0\",\"5540.0\",\"5545.0\",\"5550.0\",\"5555.0\",\"5560.0\",\"5565.0\",\"5570.0\",\"5575.0\",\"5580.0\",\"5585.0\",\"5590.0\",\"5595.0\",\"5600.0\",\"5605.0\",\"5610.0\",\"5615.0\",\"5620.0\",\"5625.0\",\"5630.0\",\"5635.0\",\"5640.0\",\"5645.0\",\"5650.0\",\"5655.0\",\"5660.0\",\"5665.0\",\"5670.0\",\"5675.0\",\"5680.0\",\"5685.0\",\"5690.0\",\"5695.0\",\"5700.0\",\"5705.0\",\"5710.0\",\"5715.0\",\"5720.0\",\"5725.0\",\"5725.0\",\"5730.0\",\"5730.0\",\"5735.0\",\"5735.0\",\"5740.0\",\"5740.0\",\"5745.0\",\"5745.0\",\"5750.0\",\"5750.0\",\"5755.0\",\"5755.0\",\"5760.0\",\"5760.0\",\"5765.0\",\"5765.0\",\"5770.0\",\"5770.0\",\"5775.0\",\"5775.0\",\"5780.0\",\"5780.0\",\"5785.0\",\"5790.0\",\"5795.0\",\"5800.0\",\"5800.0\",\"5805.0\",\"5810.0\",\"5810.0\",\"5815.0\",\"5820.0\",\"5820.0\",\"5825.0\",\"5830.0\",\"5835.0\",\"5840.0\",\"5845.0\",\"5850.0\",\"5855.0\",\"5860.0\",\"5865.0\",\"5870.0\",\"5875.0\",\"5880.0\",\"5885.0\",\"5890.0\",\"5900.0\",\"5910.0\",\"5915.0\",\"5920.0\",\"5925.0\",\"5950.0\",\"5975.0\",\"6000.0\",\"6100.0\",\"6110.0\",\"3000.0\",\"3400.0\",\"3600.0\",\"3750.0\",\"3800.0\",\"3900.0\",\"4000.0\",\"4100.0\",\"4200.0\",\"4300.0\",\"4350.0\",\"4400.0\",\"4475.0\",\"4500.0\",\"4550.0\",\"4600.0\",\"4650.0\",\"4700.0\",\"4710.0\",\"4725.0\",\"4750.0\",\"4775.0\",\"4800.0\",\"4845.0\",\"4850.0\",\"4875.0\",\"4900.0\",\"4950.0\",\"4975.0\",\"4985.0\",\"5000.0\",\"5010.0\",\"5025.0\",\"5050.0\",\"5100.0\",\"5115.0\",\"5125.0\",\"5150.0\",\"5170.0\",\"5175.0\",\"5190.0\",\"5200.0\",\"5210.0\",\"5220.0\",\"5230.0\",\"5240.0\",\"5250.0\",\"5265.0\",\"5270.0\",\"5275.0\",\"5290.0\",\"5300.0\",\"5305.0\",\"5310.0\",\"5325.0\",\"5340.0\",\"5350.0\",\"5375.0\",\"5380.0\",\"5390.0\",\"5395.0\",\"5400.0\",\"5425.0\",\"5440.0\",\"5450.0\",\"5455.0\",\"5460.0\",\"5470.0\",\"5475.0\",\"5485.0\",\"5490.0\",\"5500.0\",\"5510.0\",\"5515.0\",\"5520.0\",\"5525.0\",\"5530.0\",\"5540.0\",\"5545.0\",\"5550.0\",\"5555.0\",\"5560.0\",\"5565.0\",\"5570.0\",\"5575.0\",\"5580.0\",\"5585.0\",\"5590.0\",\"5595.0\",\"5600.0\",\"5605.0\",\"5610.0\",\"5615.0\",\"5620.0\",\"5625.0\",\"5630.0\",\"5635.0\",\"5640.0\",\"5645.0\",\"5650.0\",\"5655.0\",\"5660.0\",\"5665.0\",\"5670.0\",\"5675.0\",\"5680.0\",\"5685.0\",\"5690.0\",\"5695.0\",\"5700.0\",\"5705.0\",\"5710.0\",\"5715.0\",\"5720.0\",\"5725.0\",\"5725.0\",\"5730.0\",\"5730.0\",\"5735.0\",\"5735.0\",\"5740.0\",\"5740.0\",\"5745.0\",\"5745.0\",\"5750.0\",\"5750.0\",\"5755.0\",\"5755.0\",\"5760.0\",\"5760.0\",\"5765.0\",\"5765.0\",\"5770.0\",\"5770.0\",\"5775.0\",\"5775.0\",\"5780.0\",\"5780.0\",\"5785.0\",\"5790.0\",\"5795.0\",\"5800.0\",\"5800.0\",\"5805.0\",\"5810.0\",\"5810.0\",\"5815.0\",\"5820.0\",\"5820.0\",\"5825.0\",\"5830.0\",\"5835.0\",\"5840.0\",\"5845.0\",\"5850.0\",\"5855.0\",\"5860.0\",\"5865.0\",\"5870.0\",\"5875.0\",\"5880.0\",\"5885.0\",\"5890.0\",\"5900.0\",\"5910.0\",\"5915.0\",\"5920.0\",\"5925.0\",\"5950.0\",\"5975.0\",\"6000.0\",\"6100.0\",\"6110.0\",\"3000.0\",\"3400.0\",\"3600.0\",\"3750.0\",\"3800.0\",\"3900.0\",\"4000.0\",\"4100.0\",\"4200.0\",\"4300.0\",\"4350.0\",\"4400.0\",\"4475.0\",\"4500.0\",\"4550.0\",\"4600.0\",\"4650.0\",\"4700.0\",\"4710.0\",\"4725.0\",\"4750.0\",\"4775.0\",\"4800.0\",\"4845.0\",\"4850.0\",\"4875.0\",\"4900.0\",\"4950.0\",\"4975.0\",\"4985.0\",\"5000.0\",\"5010.0\",\"5025.0\",\"5050.0\",\"5100.0\",\"5115.0\",\"5125.0\",\"5150.0\",\"5170.0\",\"5175.0\",\"5190.0\",\"5200.0\",\"5210.0\",\"5220.0\",\"5230.0\",\"5240.0\",\"5250.0\",\"5265.0\",\"5270.0\",\"5275.0\",\"5290.0\",\"5300.0\",\"5305.0\",\"5310.0\",\"5325.0\",\"5340.0\",\"5350.0\",\"5375.0\",\"5380.0\",\"5390.0\",\"5395.0\",\"5400.0\",\"5425.0\",\"5440.0\",\"5450.0\",\"5455.0\",\"5460.0\",\"5470.0\",\"5475.0\",\"5485.0\",\"5490.0\",\"5500.0\",\"5510.0\",\"5515.0\",\"5520.0\",\"5525.0\",\"5530.0\",\"5540.0\",\"5545.0\",\"5550.0\",\"5555.0\",\"5560.0\",\"5565.0\",\"5570.0\",\"5575.0\",\"5580.0\",\"5585.0\",\"5590.0\",\"5595.0\",\"5600.0\",\"5605.0\",\"5610.0\",\"5615.0\",\"5620.0\",\"5625.0\",\"5630.0\",\"5635.0\",\"5640.0\",\"5645.0\",\"5650.0\",\"5655.0\",\"5660.0\",\"5665.0\",\"5670.0\",\"5675.0\",\"5680.0\",\"5685.0\",\"5690.0\",\"5695.0\",\"5700.0\",\"5705.0\",\"5710.0\",\"5715.0\",\"5720.0\",\"5725.0\",\"5725.0\",\"5730.0\",\"5730.0\",\"5735.0\",\"5735.0\",\"5740.0\",\"5740.0\",\"5745.0\",\"5745.0\",\"5750.0\",\"5750.0\",\"5755.0\",\"5755.0\",\"5760.0\",\"5760.0\",\"5765.0\",\"5765.0\",\"5770.0\",\"5770.0\",\"5775.0\",\"5775.0\",\"5780.0\",\"5780.0\",\"5785.0\",\"5790.0\",\"5795.0\",\"5800.0\",\"5800.0\",\"5805.0\",\"5810.0\",\"5810.0\",\"5815.0\",\"5820.0\",\"5820.0\",\"5825.0\",\"5830.0\",\"5835.0\",\"5840.0\",\"5845.0\",\"5850.0\",\"5855.0\",\"5860.0\",\"5865.0\",\"5870.0\",\"5875.0\",\"5880.0\",\"5885.0\",\"5890.0\",\"5900.0\",\"5910.0\",\"5915.0\",\"5920.0\",\"5925.0\",\"5950.0\",\"5975.0\",\"6000.0\",\"6100.0\",\"6110.0\"],\n", | |
"\"volume\":[-623.0,-341.0,-1313.0,-483.0,-4675.0,-219.0,-1384.0,-482.0,-2114.0,-951.0,-129.0,-344.0,-100.0,-3420.0,-178.0,-11895.0,-1189.0,-6156.0,-434.0,-4173.0,-4046.0,-120.0,-3078.0,0.0,-124.0,-2003.0,-13851.0,-1776.0,-892.0,-31.0,-6214.0,-417.0,-547.0,-937.0,-258.0,-141.0,-163.0,-23.0,-44.0,-248.0,-242.0,-1790.0,-316.0,-182.0,-355.0,-1809.0,-441.0,-380.0,-143.0,-4444.0,-8378.0,-2345.0,-81.0,-214.0,-212.0,-182.0,-200.0,-204.0,-2.0,-280.0,-34.0,-1355.0,-1012.0,-225.0,-722.0,-548.0,-80.0,-288.0,-127.0,-764.0,-7.0,-2870.0,-2273.0,-67.0,-205.0,-4276.0,-507.0,-112.0,-2055.0,-8420.0,-64.0,-542.0,-866.0,-249.0,-1419.0,-2070.0,-528.0,-1062.0,-524.0,-4501.0,-429.0,-206.0,-1444.0,-395.0,-3601.0,-444.0,-1202.0,-1428.0,-1179.0,-4469.0,-306.0,-1497.0,-1468.0,-1260.0,-2377.0,-3892.0,-1215.0,-2092.0,-934.0,-5777.0,-485.0,-891.0,-2064.0,-3783.0,800.0,-4390.0,895.0,-1823.0,944.0,-1385.0,5314.0,-4136.0,-2469.0,1858.0,6730.0,-5873.0,2807.0,-984.0,-970.0,2027.0,1181.0,-222.0,-1403.0,1767.0,2402.0,-237.0,2720.0,-1454.0,848.0,2210.0,1517.0,10883.0,-5294.0,2364.0,-169.0,1290.0,1094.0,-233.0,1438.0,3562.0,169.0,475.0,2274.0,692.0,1194.0,428.0,757.0,489.0,840.0,768.0,843.0,67.0,344.0,3419.0,301.0,570.0,200.0,4341.0,810.0,48.0,866.0,2817.0,159.0,-176.0,-251.0,-927.0,-154.0,-848.0,-112.0,-7265.0,-1364.0,-734.0,-12270.0,-10.0,-10.0,-374.0,-479.0,-204.0,-2330.0,-498.0,-4007.0,0.0,-4744.0,-7475.0,-696.0,-214.0,-500.0,-308.0,-84.0,-4255.0,-888.0,-479.0,-241.0,-2094.0,-110.0,-192.0,-192.0,-185.0,-96.0,-107.0,-194.0,-87.0,-42.0,-375.0,-5874.0,-619.0,-1036.0,-134.0,-121.0,-319.0,-395.0,-289.0,-80.0,-231.0,-6625.0,-112.0,-203.0,-124.0,-267.0,-357.0,-5311.0,-601.0,-9186.0,-512.0,-1959.0,-67.0,-366.0,-611.0,-119.0,-186.0,-146.0,-1273.0,-27.0,-3066.0,-2223.0,-374.0,-340.0,-450.0,-4513.0,-263.0,-635.0,-153.0,-3263.0,-482.0,-461.0,-125.0,-408.0,-3333.0,-919.0,-404.0,-1339.0,-421.0,-5424.0,-570.0,-6050.0,-2990.0,-551.0,-6913.0,-1353.0,-3940.0,-1860.0,-1277.0,-5144.0,-698.0,-1415.0,-1152.0,-2491.0,-3455.0,-2683.0,-996.0,-4411.0,-727.0,-8257.0,-544.0,-1415.0,-1202.0,-1414.0,1660.0,-3462.0,696.0,-3309.0,947.0,-1318.0,5374.0,-3336.0,-2079.0,2344.0,6776.0,-4664.0,1827.0,-830.0,-622.0,1611.0,1459.0,-306.0,-449.0,2565.0,2588.0,-182.0,4641.0,-185.0,2007.0,2102.0,1599.0,9184.0,-3900.0,2653.0,-353.0,2003.0,1398.0,-426.0,3731.0,4618.0,1062.0,4407.0,6835.0,3386.0,3368.0,753.0,793.0,82.0,1026.0,2363.0,641.0,490.0,496.0,4957.0,1977.0,59.0,173.0,6405.0,160.0,368.0,160.0,676.0,472.0,-408.0,-218.0,-398.0,-917.0,-222.0,-79.0,-5137.0,-797.0,-710.0,-3701.0,-269.0,-96.0,-562.0,-453.0,-55.0,-912.0,-494.0,-898.0,-64.0,-100.0,-2185.0,-34.0,-407.0,-1.0,-568.0,0.0,-490.0,-222.0,-814.0,-152.0,-884.0,-15.0,-539.0,-1129.0,-119.0,-467.0,-143.0,-183.0,-264.0,-105.0,-242.0,-2107.0,-140.0,-627.0,-116.0,-22.0,-893.0,-195.0,-115.0,-430.0,-805.0,-1278.0,-224.0,-48.0,-68.0,-106.0,-2236.0,-179.0,-2.0,-8.0,-338.0,-976.0,-92.0,-554.0,-54.0,-52.0,-187.0,-85.0,-844.0,0.0,-53.0,-1237.0,-1236.0,-41.0,-380.0,-4222.0,-156.0,-63.0,-67.0,-1038.0,-138.0,-344.0,-193.0,-165.0,-699.0,-115.0,-522.0,-965.0,-352.0,-2315.0,-348.0,-697.0,-2352.0,-201.0,-1256.0,-371.0,-1446.0,-582.0,-608.0,-1612.0,-370.0,-1054.0,-860.0,-827.0,-1717.0,-2424.0,-793.0,-1790.0,-925.0,-4107.0,-792.0,-1463.0,-1067.0,-1193.0,679.0,-3123.0,270.0,-2228.0,629.0,-1332.0,2054.0,-2328.0,-1470.0,1526.0,4366.0,-2311.0,2118.0,-812.0,-571.0,2012.0,1538.0,-135.0,-518.0,2292.0,2236.0,-163.0,2712.0,-41.0,1669.0,1478.0,1376.0,4239.0,-40.0,1889.0,-20.0,902.0,682.0,0.0,1382.0,2156.0,250.0,1189.0,1266.0,255.0,1621.0,658.0,386.0,33.0,664.0,614.0,474.0,281.0,116.0,2288.0,888.0,510.0,137.0,303.0,9.0,29.0,132.0,4.0,92.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1000.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-500.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,-1000.0,0.0,0.0,0.0,-1000.0,0.0,0.0,0.0,0.0,-1000.0,0.0,0.0,0.0,0.0,-1000.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2500.0,-1350.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,500.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,365.0,0.0,0.0,0.0,500.0,700.0,0.0,0.0,0.0,0.0],\n", | |
"\"side\":[\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"ask\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"bid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"mid\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\",\"no_side\"]\n", | |
"},\n", | |
"\"mapping\":{\n", | |
"\"x\":\"volume\",\n", | |
"\"y\":\"strike_price_str\"\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"ggsize\":{\n", | |
"\"width\":800.0,\n", | |
"\"height\":700.0\n", | |
"},\n", | |
"\"ggtitle\":{\n", | |
"\"text\":\"SPXW Option Volume\"\n", | |
"},\n", | |
"\"theme\":{\n", | |
"\"name\":\"none\",\n", | |
"\"line\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":1.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"rect\":{\n", | |
"\"fill\":\"#ffffff\",\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"text\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_ontop\":true,\n", | |
"\"axis_ticks\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_background\":{\n", | |
"\"size\":2.0,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"legend_position\":\"bottom\",\n", | |
"\"panel_grid_major\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"size\":1.0,\n", | |
"\"linetype\":\"dashed\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"panel_grid_minor\":{\n", | |
"\"blank\":true\n", | |
"},\n", | |
"\"plot_title\":{\n", | |
"\"color\":\"#0d1117\",\n", | |
"\"hjust\":0.5,\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"axis_tooltip\":{\n", | |
"\"color\":\"#161b22\",\n", | |
"\"blank\":false\n", | |
"},\n", | |
"\"tooltip\":{\n", | |
"\"color\":\"#21262d\",\n", | |
"\"blank\":false\n", | |
"}\n", | |
"},\n", | |
"\"kind\":\"plot\",\n", | |
"\"scales\":[{\n", | |
"\"aesthetic\":\"fill\",\n", | |
"\"values\":[\"#7ce38b\",\"#fa7970\",\"#77bdfb\",\"#c6cdd5\"]\n", | |
"}],\n", | |
"\"layers\":[{\n", | |
"\"geom\":\"bar\",\n", | |
"\"stat\":\"identity\",\n", | |
"\"mapping\":{\n", | |
"\"fill\":\"side\"\n", | |
"},\n", | |
"\"tooltips\":{\n", | |
"\"formats\":[],\n", | |
"\"lines\":[\"@volume\"]\n", | |
"},\n", | |
"\"data_meta\":{\n", | |
"},\n", | |
"\"color\":\"black\",\n", | |
"\"size\":0.5,\n", | |
"\"orientation\":\"y\",\n", | |
"\"data\":{\n", | |
"}\n", | |
"}],\n", | |
"\"metainfo_list\":[]\n", | |
"};\n", | |
" var plotContainer = document.getElementById(\"EmL7D9\");\n", | |
" window.letsPlotCall(function() {{\n", | |
" LetsPlot.buildPlotFromProcessedSpecs(plotSpec, -1, -1, plotContainer);\n", | |
" }});\n", | |
" })();\n", | |
" </script>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"ticker = 'SPXW'\n", | |
"expiry_dates_to_remove = ['2024-09-27']\n", | |
"raw_df = create_uw_option_df(ticker, dates_to_exclude=expiry_dates_to_remove)\n", | |
"agg_df = aggregate_uw_option_df_by_strike_price(raw_df)\n", | |
"plot_df = configure_agg_df_for_plotting(agg_df)\n", | |
"p = plot_option_volume_by_strike_price(ticker, plot_df, dark_color=False)\n", | |
"p.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"**SPXW option volume chart above**\n", | |
"- Remove 0dte trades since the volumes are enormous and will obscure longer-dated positions\n", | |
"- Looks very much like \"twin\" 10_000 bars at 5900C/5925C, could be a call spread worth looking for\n", | |
"- Big (13_000+) ask-side activity on the 4900P, yeesh that's quite a ways down from here I will add that one to my list for investigation over the weekend too" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "dans-magic-house-uvW-KuUb-py3.10", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.10.12" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment