Skip to content

Instantly share code, notes, and snippets.

@danwagnerco
Last active September 29, 2024 20:39
Show Gist options
  • Save danwagnerco/3241dff02261d50774c1088f623273c4 to your computer and use it in GitHub Desktop.
Save danwagnerco/3241dff02261d50774c1088f623273c4 to your computer and use it in GitHub Desktop.
Visualize daily option flow by strike across all expiries
Display the source blob
Display the rendered blob
Raw
{
"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