Skip to content

Instantly share code, notes, and snippets.

@danwagnerco
Created November 19, 2025 16:16
Show Gist options
  • Select an option

  • Save danwagnerco/989a56c38de9a6d96be3463676391bda to your computer and use it in GitHub Desktop.

Select an option

Save danwagnerco/989a56c38de9a6d96be3463676391bda to your computer and use it in GitHub Desktop.
Quick tutorial on importing and filtering Flow Alerts data (via CSV file)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "b76ccf52",
"metadata": {},
"source": [
"# Filtering a Flow Alerts CSV\n",
"\n",
"Quick demo for importing all Flow Alerts from a single CSV file (would compile all CSVs into a single database for a larger project) then filtering for conditions similar to what is published in the Unusual Whales Options Screener \"Unusually Bullish\" page:\n",
"\n",
"- [https://unusualwhales.com/options-screener](https://unusualwhales.com/options-screener) (click the \"Unusually Bullish\" button)\n",
"- Since these are Flow Alerts I will focus on `RepeatedHits`, `RepeatedHitsAscendingFill`, and `RepeatedHitsDescendingFill`\n",
"- Single-leg ask-side OTM Calls only\n",
"- 183 DTE at most\n",
"- At least $250K in premium\n",
"- Must be an opening trade (total size > open interest)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "115103ed",
"metadata": {},
"outputs": [],
"source": [
"import polars as pl\n",
"from pathlib import Path\n",
"\n",
"this_dir = Path(\n",
" \"/home/danwagnerco/github/dans-magic-house/client/jing-flow-alert-analysis\"\n",
")\n",
"flow_alerts_fp = this_dir / \"2025-09-03_flow_alerts.csv\""
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ca4f34f1",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (9_440, 35)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>id</th><th>rule_id</th><th>alert_rule</th><th>created_at</th><th>start_time</th><th>end_time</th><th>option_chain</th><th>ticker</th><th>expiry</th><th>type</th><th>strike</th><th>total_size</th><th>volume</th><th>open_interest</th><th>volume_oi_ratio</th><th>total_premium</th><th>total_ask_side_prem</th><th>total_bid_side_prem</th><th>price</th><th>ask</th><th>bid</th><th>underlying_price</th><th>iv_start</th><th>iv_end</th><th>trade_count</th><th>expiry_count</th><th>next_earnings_date</th><th>er_time</th><th>sector</th><th>marketcap</th><th>all_opening_trades</th><th>has_floor</th><th>has_multileg</th><th>has_singleleg</th><th>has_sweep</th></tr><tr><td>str</td><td>str</td><td>str</td><td>str</td><td>i64</td><td>i64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>i64</td><td>i64</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>i64</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>&quot;8abd0f25-938e-40c6-b0c1-3a83c1…</td><td>&quot;a0979b52-28e4-4585-8f22-881faa…</td><td>&quot;RepeatedHitsAscendingFill&quot;</td><td>&quot;2025-09-03T13:30:04.501828Z&quot;</td><td>1756844226343</td><td>1756844226343</td><td>&quot;SPXW250904C06440000&quot;</td><td>&quot;SPXW&quot;</td><td>&quot;2025-09-04&quot;</td><td>&quot;call&quot;</td><td>6440.0</td><td>81</td><td>638</td><td>114</td><td>5.596491</td><td>153450.0</td><td>153450.0</td><td>0.0</td><td>18.94</td><td>19.2</td><td>18.5</td><td>6415.54</td><td>0.155496</td><td>0.155496</td><td>7</td><td>1</td><td>null</td><td>null</td><td>null</td><td>-1.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>&quot;81f5eda2-425e-43cc-8617-b8911d…</td><td>&quot;e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>&quot;RepeatedHits&quot;</td><td>&quot;2025-09-03T13:30:09.513947Z&quot;</td><td>1756906201976</td><td>1756906202055</td><td>&quot;BIDU251121C00105000&quot;</td><td>&quot;BIDU&quot;</td><td>&quot;2025-11-21&quot;</td><td>&quot;call&quot;</td><td>105.0</td><td>27</td><td>27</td><td>354</td><td>0.076271</td><td>12420.0</td><td>11960.0</td><td>460.0</td><td>4.6</td><td>5.875</td><td>4.05</td><td>96.61</td><td>0.433883</td><td>0.433883</td><td>6</td><td>1</td><td>&quot;2025-11-20&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Communication Services&quot;</td><td>2.4121e10</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>&quot;88a1eaa2-25f5-4204-b091-2f4162…</td><td>&quot;a0979b52-28e4-4585-8f22-881faa…</td><td>&quot;RepeatedHitsAscendingFill&quot;</td><td>&quot;2025-09-03T13:30:09.513947Z&quot;</td><td>1756906202315</td><td>1756906202360</td><td>&quot;U250926P00033000&quot;</td><td>&quot;U&quot;</td><td>&quot;2025-09-26&quot;</td><td>&quot;put&quot;</td><td>33.0</td><td>1121</td><td>1246</td><td>1778</td><td>0.700787</td><td>39533.0</td><td>0.0</td><td>24098.0</td><td>0.35</td><td>0.85</td><td>0.35</td><td>39.55</td><td>0.626035</td><td>0.631392</td><td>13</td><td>1</td><td>&quot;2025-11-06&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Technology&quot;</td><td>1.8211e10</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>&quot;74c70808-3628-48b1-baeb-776a9f…</td><td>&quot;5ce5ec11-087c-4c00-b164-08106b…</td><td>&quot;RepeatedHitsDescendingFill&quot;</td><td>&quot;2025-09-03T13:30:09.513947Z&quot;</td><td>1756906202044</td><td>1756906202045</td><td>&quot;COMP250919P00008000&quot;</td><td>&quot;COMP&quot;</td><td>&quot;2025-09-19&quot;</td><td>&quot;put&quot;</td><td>8.0</td><td>2020</td><td>3030</td><td>10606</td><td>0.285687</td><td>45450.0</td><td>0.0</td><td>45450.0</td><td>0.23</td><td>0.3</td><td>0.2</td><td>8.8611</td><td>0.828492</td><td>0.741872</td><td>6</td><td>1</td><td>&quot;2025-10-29&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Technology&quot;</td><td>4.8327e9</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>&quot;53259d82-28fe-4b1a-af34-2979d8…</td><td>&quot;e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>&quot;RepeatedHits&quot;</td><td>&quot;2025-09-03T13:30:09.513947Z&quot;</td><td>1756906203852</td><td>1756906203987</td><td>&quot;JD260116C00035000&quot;</td><td>&quot;JD&quot;</td><td>&quot;2026-01-16&quot;</td><td>&quot;call&quot;</td><td>35.0</td><td>100</td><td>185</td><td>32483</td><td>0.005695</td><td>20000.0</td><td>15000.0</td><td>0.0</td><td>2.0</td><td>2.0</td><td>1.91</td><td>30.96</td><td>0.459898</td><td>0.459898</td><td>12</td><td>1</td><td>&quot;2025-11-13&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Consumer Cyclical&quot;</td><td>4.2582e10</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>&quot;a1a67bd2-8fca-4ad6-a6cc-edc462…</td><td>&quot;e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>&quot;RepeatedHits&quot;</td><td>&quot;2025-09-03T19:59:55.919759Z&quot;</td><td>1756929588846</td><td>1756929588852</td><td>&quot;PLTR250905P00155000&quot;</td><td>&quot;PLTR&quot;</td><td>&quot;2025-09-05&quot;</td><td>&quot;put&quot;</td><td>155.0</td><td>250</td><td>46835</td><td>10993</td><td>4.260438</td><td>63500.0</td><td>0.0</td><td>63500.0</td><td>2.54</td><td>2.56</td><td>2.54</td><td>154.87</td><td>0.54097</td><td>0.54097</td><td>13</td><td>1</td><td>&quot;2025-11-03&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Technology&quot;</td><td>3.7921e11</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>&quot;f719d5a9-ef33-4f86-99f4-01b850…</td><td>&quot;e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>&quot;RepeatedHits&quot;</td><td>&quot;2025-09-03T19:59:55.919759Z&quot;</td><td>1756929589277</td><td>1756929589341</td><td>&quot;JOYY251121C00060000&quot;</td><td>&quot;JOYY&quot;</td><td>&quot;2025-11-21&quot;</td><td>&quot;call&quot;</td><td>60.0</td><td>95</td><td>208</td><td>724</td><td>0.287293</td><td>37049.0</td><td>35489.0</td><td>1560.0</td><td>3.9</td><td>4.0</td><td>3.3</td><td>59.87</td><td>0.355735</td><td>0.355735</td><td>18</td><td>1</td><td>&quot;2025-11-25&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Communication Services&quot;</td><td>1.4900e9</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>&quot;1b761391-6234-4b0f-bfb6-059590…</td><td>&quot;e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>&quot;RepeatedHits&quot;</td><td>&quot;2025-09-03T19:59:55.919759Z&quot;</td><td>1756929588568</td><td>1756929588570</td><td>&quot;GLD250912P00327000&quot;</td><td>&quot;GLD&quot;</td><td>&quot;2025-09-12&quot;</td><td>&quot;put&quot;</td><td>327.0</td><td>34</td><td>802</td><td>13</td><td>61.692308</td><td>11390.0</td><td>0.0</td><td>11390.0</td><td>3.35</td><td>3.4</td><td>3.35</td><td>328.06</td><td>0.188199</td><td>0.188199</td><td>9</td><td>1</td><td>null</td><td>null</td><td>null</td><td>335.983309</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>&quot;0df23092-fdc7-41a8-bd76-1883ab…</td><td>&quot;e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>&quot;RepeatedHits&quot;</td><td>&quot;2025-09-03T19:59:57.731410Z&quot;</td><td>1756929591650</td><td>1756929591651</td><td>&quot;AEO251121C00014000&quot;</td><td>&quot;AEO&quot;</td><td>&quot;2025-11-21&quot;</td><td>&quot;call&quot;</td><td>14.0</td><td>200</td><td>747</td><td>2240</td><td>0.333482</td><td>31000.0</td><td>31000.0</td><td>0.0</td><td>1.55</td><td>1.55</td><td>1.45</td><td>13.625</td><td>0.677111</td><td>0.677111</td><td>7</td><td>1</td><td>&quot;2025-12-03&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Consumer Cyclical&quot;</td><td>3.2598e9</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>&quot;50fbd31f-f24a-4414-a2e3-17944f…</td><td>&quot;e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>&quot;RepeatedHits&quot;</td><td>&quot;2025-09-03T19:59:59.134049Z&quot;</td><td>1756929593162</td><td>1756929593163</td><td>&quot;CIFR251017C00008000&quot;</td><td>&quot;CIFR&quot;</td><td>&quot;2025-10-17&quot;</td><td>&quot;call&quot;</td><td>8.0</td><td>200</td><td>1937</td><td>7386</td><td>0.262253</td><td>28200.0</td><td>0.0</td><td>28200.0</td><td>1.41</td><td>1.45</td><td>1.41</td><td>8.1</td><td>1.227683</td><td>1.227683</td><td>10</td><td>1</td><td>&quot;2025-10-30&quot;</td><td>&quot;unknown&quot;</td><td>&quot;Financial Services&quot;</td><td>4.0311e9</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (9_440, 35)\n",
"┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n",
"│ id ┆ rule_id ┆ alert_rul ┆ created_a ┆ … ┆ has_floor ┆ has_multi ┆ has_singl ┆ has_swee │\n",
"│ --- ┆ --- ┆ e ┆ t ┆ ┆ --- ┆ leg ┆ eleg ┆ p │\n",
"│ str ┆ str ┆ --- ┆ --- ┆ ┆ i64 ┆ --- ┆ --- ┆ --- │\n",
"│ ┆ ┆ str ┆ str ┆ ┆ ┆ i64 ┆ i64 ┆ i64 │\n",
"╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n",
"│ 8abd0f25- ┆ a0979b52- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 938e-40c6 ┆ 28e4-4585 ┆ itsAscend ┆ 3T13:30:0 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -b0c1-3a8 ┆ -8f22-881 ┆ ingFill ┆ 4.501828Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 3c1… ┆ faa… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 81f5eda2- ┆ e6b9f0b6- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 425e-43cc ┆ fcd9-44fe ┆ its ┆ 3T13:30:0 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -8617-b89 ┆ -9d1c-f53 ┆ ┆ 9.513947Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 11d… ┆ 521… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 88a1eaa2- ┆ a0979b52- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 25f5-4204 ┆ 28e4-4585 ┆ itsAscend ┆ 3T13:30:0 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -b091-2f4 ┆ -8f22-881 ┆ ingFill ┆ 9.513947Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 162… ┆ faa… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 74c70808- ┆ 5ce5ec11- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 3628-48b1 ┆ 087c-4c00 ┆ itsDescen ┆ 3T13:30:0 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -baeb-776 ┆ -b164-081 ┆ dingFill ┆ 9.513947Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ a9f… ┆ 06b… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 53259d82- ┆ e6b9f0b6- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ 28fe-4b1a ┆ fcd9-44fe ┆ its ┆ 3T13:30:0 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -af34-297 ┆ -9d1c-f53 ┆ ┆ 9.513947Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 9d8… ┆ 521… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n",
"│ a1a67bd2- ┆ e6b9f0b6- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 8fca-4ad6 ┆ fcd9-44fe ┆ its ┆ 3T19:59:5 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -a6cc-edc ┆ -9d1c-f53 ┆ ┆ 5.919759Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 462… ┆ 521… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ f719d5a9- ┆ e6b9f0b6- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ ef33-4f86 ┆ fcd9-44fe ┆ its ┆ 3T19:59:5 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -99f4-01b ┆ -9d1c-f53 ┆ ┆ 5.919759Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 850… ┆ 521… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 1b761391- ┆ e6b9f0b6- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ 6234-4b0f ┆ fcd9-44fe ┆ its ┆ 3T19:59:5 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -bfb6-059 ┆ -9d1c-f53 ┆ ┆ 5.919759Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 590… ┆ 521… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 0df23092- ┆ e6b9f0b6- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ fdc7-41a8 ┆ fcd9-44fe ┆ its ┆ 3T19:59:5 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -bd76-188 ┆ -9d1c-f53 ┆ ┆ 7.731410Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 3ab… ┆ 521… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 50fbd31f- ┆ e6b9f0b6- ┆ RepeatedH ┆ 2025-09-0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ f24a-4414 ┆ fcd9-44fe ┆ its ┆ 3T19:59:5 ┆ ┆ ┆ ┆ ┆ │\n",
"│ -a2e3-179 ┆ -9d1c-f53 ┆ ┆ 9.134049Z ┆ ┆ ┆ ┆ ┆ │\n",
"│ 44f… ┆ 521… ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"raw_flow_alerts_df = pl.read_csv(flow_alerts_fp)\n",
"raw_flow_alerts_df"
]
},
{
"cell_type": "markdown",
"id": "84a9e1dd",
"metadata": {},
"source": [
"There are a **LOT** of columns here, for reference:\n",
"\n",
"```\n",
">>> raw_flow_alerts_df.columns\n",
"['id',\n",
" 'rule_id',\n",
" 'alert_rule',\n",
" 'created_at',\n",
" 'start_time',\n",
" 'end_time',\n",
" 'option_chain',\n",
" 'ticker',\n",
" 'expiry',\n",
" 'type',\n",
" 'strike',\n",
" 'total_size',\n",
" 'volume',\n",
" 'open_interest',\n",
" 'volume_oi_ratio',\n",
" 'total_premium',\n",
" 'total_ask_side_prem',\n",
" 'total_bid_side_prem',\n",
" 'price',\n",
" 'ask',\n",
" 'bid',\n",
" 'underlying_price',\n",
" 'iv_start',\n",
" 'iv_end',\n",
" 'trade_count',\n",
" 'expiry_count',\n",
" 'next_earnings_date',\n",
" 'er_time',\n",
" 'sector',\n",
" 'marketcap',\n",
" 'all_opening_trades',\n",
" 'has_floor',\n",
" 'has_multileg',\n",
" 'has_singleleg',\n",
" 'has_sweep']\n",
"```\n",
"\n",
"Let's clean them up a bit to make filtering easier:\n",
"\n",
"- Convert timestamps to eastern instead of UTC\n",
"- Calculate days til expiry (\"dte\"), percent out of the money (\"pct_otm\"), percent premium transacted on bid or ask (\"premium_pct_on_ask\" or \"premium_pct_on_bid\"), the ratio of size to open interest (\"size_oi_ratio\"), and changes to IV (\"iv_change_pct\" and \"iv_change_clicks\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "fe9635b3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (9_440, 28)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>created_at_eastern</th><th>alert_rule</th><th>ticker</th><th>strike</th><th>type</th><th>expiry</th><th>underlying_price</th><th>pct_otm</th><th>dte_days</th><th>bid</th><th>ask</th><th>price</th><th>total_premium</th><th>premium_pct_on_ask</th><th>premium_pct_on_bid</th><th>total_size</th><th>volume</th><th>open_interest</th><th>size_oi_ratio</th><th>volume_oi_ratio</th><th>iv_end</th><th>iv_change_clicks</th><th>iv_change_pct</th><th>all_opening_trades</th><th>has_floor</th><th>has_multileg</th><th>has_singleleg</th><th>has_sweep</th></tr><tr><td>datetime[μs, America/New_York]</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>date</td><td>f64</td><td>f64</td><td>i32</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>i64</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>2025-09-03 09:30:04.501828 EDT</td><td>&quot;RepeatedHitsAscendingFill&quot;</td><td>&quot;SPXW&quot;</td><td>6440.0</td><td>&quot;call&quot;</td><td>2025-09-04</td><td>6415.54</td><td>0.003813</td><td>1</td><td>18.5</td><td>19.2</td><td>18.94</td><td>153450.0</td><td>1.0</td><td>0.0</td><td>81</td><td>638</td><td>114</td><td>0.710526</td><td>5.596491</td><td>0.155496</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 09:30:09.513947 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;BIDU&quot;</td><td>105.0</td><td>&quot;call&quot;</td><td>2025-11-21</td><td>96.61</td><td>0.086844</td><td>79</td><td>4.05</td><td>5.875</td><td>4.6</td><td>12420.0</td><td>0.962963</td><td>0.037037</td><td>27</td><td>27</td><td>354</td><td>0.076271</td><td>0.076271</td><td>0.433883</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 09:30:09.513947 EDT</td><td>&quot;RepeatedHitsAscendingFill&quot;</td><td>&quot;U&quot;</td><td>33.0</td><td>&quot;put&quot;</td><td>2025-09-26</td><td>39.55</td><td>-0.165613</td><td>23</td><td>0.35</td><td>0.85</td><td>0.35</td><td>39533.0</td><td>0.0</td><td>0.609567</td><td>1121</td><td>1246</td><td>1778</td><td>0.630484</td><td>0.700787</td><td>0.631392</td><td>0.005357</td><td>0.008557</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 09:30:09.513947 EDT</td><td>&quot;RepeatedHitsDescendingFill&quot;</td><td>&quot;COMP&quot;</td><td>8.0</td><td>&quot;put&quot;</td><td>2025-09-19</td><td>8.8611</td><td>-0.097178</td><td>16</td><td>0.2</td><td>0.3</td><td>0.23</td><td>45450.0</td><td>0.0</td><td>1.0</td><td>2020</td><td>3030</td><td>10606</td><td>0.190458</td><td>0.285687</td><td>0.741872</td><td>-0.086621</td><td>-0.104552</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 09:30:09.513947 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;JD&quot;</td><td>35.0</td><td>&quot;call&quot;</td><td>2026-01-16</td><td>30.96</td><td>0.130491</td><td>135</td><td>1.91</td><td>2.0</td><td>2.0</td><td>20000.0</td><td>0.75</td><td>0.0</td><td>100</td><td>185</td><td>32483</td><td>0.003079</td><td>0.005695</td><td>0.459898</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2025-09-03 15:59:55.919759 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;PLTR&quot;</td><td>155.0</td><td>&quot;put&quot;</td><td>2025-09-05</td><td>154.87</td><td>0.000839</td><td>2</td><td>2.54</td><td>2.56</td><td>2.54</td><td>63500.0</td><td>0.0</td><td>1.0</td><td>250</td><td>46835</td><td>10993</td><td>0.022742</td><td>4.260438</td><td>0.54097</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 15:59:55.919759 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;JOYY&quot;</td><td>60.0</td><td>&quot;call&quot;</td><td>2025-11-21</td><td>59.87</td><td>0.002171</td><td>79</td><td>3.3</td><td>4.0</td><td>3.9</td><td>37049.0</td><td>0.957894</td><td>0.042106</td><td>95</td><td>208</td><td>724</td><td>0.131215</td><td>0.287293</td><td>0.355735</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>2025-09-03 15:59:55.919759 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;GLD&quot;</td><td>327.0</td><td>&quot;put&quot;</td><td>2025-09-12</td><td>328.06</td><td>-0.003231</td><td>9</td><td>3.35</td><td>3.4</td><td>3.35</td><td>11390.0</td><td>0.0</td><td>1.0</td><td>34</td><td>802</td><td>13</td><td>2.615385</td><td>61.692308</td><td>0.188199</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>2025-09-03 15:59:57.731410 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;AEO&quot;</td><td>14.0</td><td>&quot;call&quot;</td><td>2025-11-21</td><td>13.625</td><td>0.027523</td><td>79</td><td>1.45</td><td>1.55</td><td>1.55</td><td>31000.0</td><td>1.0</td><td>0.0</td><td>200</td><td>747</td><td>2240</td><td>0.089286</td><td>0.333482</td><td>0.677111</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>2025-09-03 15:59:59.134049 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;CIFR&quot;</td><td>8.0</td><td>&quot;call&quot;</td><td>2025-10-17</td><td>8.1</td><td>-0.012346</td><td>44</td><td>1.41</td><td>1.45</td><td>1.41</td><td>28200.0</td><td>0.0</td><td>1.0</td><td>200</td><td>1937</td><td>7386</td><td>0.027078</td><td>0.262253</td><td>1.227683</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (9_440, 28)\n",
"┌─────────────┬────────────┬────────┬────────┬───┬───────────┬────────────┬────────────┬───────────┐\n",
"│ created_at_ ┆ alert_rule ┆ ticker ┆ strike ┆ … ┆ has_floor ┆ has_multil ┆ has_single ┆ has_sweep │\n",
"│ eastern ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ eg ┆ leg ┆ --- │\n",
"│ --- ┆ str ┆ str ┆ f64 ┆ ┆ i64 ┆ --- ┆ --- ┆ i64 │\n",
"│ datetime[μs ┆ ┆ ┆ ┆ ┆ ┆ i64 ┆ i64 ┆ │\n",
"│ , America/N ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ ew_York] ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"╞═════════════╪════════════╪════════╪════════╪═══╪═══════════╪════════════╪════════════╪═══════════╡\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ SPXW ┆ 6440.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 09:30:04.50 ┆ tsAscendin ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 1828 EDT ┆ gFill ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ BIDU ┆ 105.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 09:30:09.51 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 3947 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ U ┆ 33.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 09:30:09.51 ┆ tsAscendin ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 3947 EDT ┆ gFill ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ COMP ┆ 8.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 09:30:09.51 ┆ tsDescendi ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 3947 EDT ┆ ngFill ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ JD ┆ 35.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ 09:30:09.51 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 3947 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ PLTR ┆ 155.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 15:59:55.91 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 9759 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ JOYY ┆ 60.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ 15:59:55.91 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 9759 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ GLD ┆ 327.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ 15:59:55.91 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 9759 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ AEO ┆ 14.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ 15:59:57.73 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 1410 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ CIFR ┆ 8.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 15:59:59.13 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 4049 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"└─────────────┴────────────┴────────┴────────┴───┴───────────┴────────────┴────────────┴───────────┘"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"all_flow_alerts_df = (\n",
" raw_flow_alerts_df.with_columns(\n",
" pl.col(\"created_at\").cast(pl.Datetime),\n",
" pl.col(\"expiry\").cast(pl.Date),\n",
" )\n",
" .with_columns(\n",
" pl.col(\"created_at\")\n",
" .dt.convert_time_zone(\"America/New_York\")\n",
" .alias(\"created_at_eastern\")\n",
" )\n",
" .with_columns(\n",
" pl.col(\"created_at_eastern\").dt.date().alias(\"created_at_eastern_date\")\n",
" )\n",
" .with_columns((pl.col(\"expiry\") - pl.col(\"created_at_eastern_date\")).alias(\"dte\"))\n",
" .with_columns(\n",
" (pl.col(\"dte\").dt.total_milliseconds() / 86_400_000).alias(\"dte_days\")\n",
" )\n",
" .with_columns(pl.col(\"dte_days\").cast(pl.Int32))\n",
" .with_columns(\n",
" (\n",
" (pl.col(\"strike\") - pl.col(\"underlying_price\")) / pl.col(\"underlying_price\")\n",
" ).alias(\"pct_otm\")\n",
" )\n",
" .with_columns(\n",
" (pl.col(\"total_ask_side_prem\") / pl.col(\"total_premium\")).alias(\n",
" \"premium_pct_on_ask\"\n",
" ),\n",
" (pl.col(\"total_bid_side_prem\") / pl.col(\"total_premium\")).alias(\n",
" \"premium_pct_on_bid\"\n",
" ),\n",
" (pl.col(\"total_size\") / pl.col(\"open_interest\")).alias(\"size_oi_ratio\"),\n",
" ((pl.col(\"iv_end\") - pl.col(\"iv_start\")) / pl.col(\"iv_start\")).alias(\n",
" \"iv_change_pct\"\n",
" ),\n",
" (pl.col(\"iv_end\") - pl.col(\"iv_start\")).alias(\"iv_change_clicks\"),\n",
" )\n",
" .select(\n",
" [\n",
" \"created_at_eastern\",\n",
" \"alert_rule\",\n",
" \"ticker\",\n",
" \"strike\",\n",
" \"type\",\n",
" \"expiry\",\n",
" \"underlying_price\",\n",
" \"pct_otm\",\n",
" \"dte_days\",\n",
" \"bid\",\n",
" \"ask\",\n",
" \"price\",\n",
" \"total_premium\",\n",
" \"premium_pct_on_ask\",\n",
" \"premium_pct_on_bid\",\n",
" \"total_size\",\n",
" \"volume\",\n",
" \"open_interest\",\n",
" \"size_oi_ratio\",\n",
" \"volume_oi_ratio\",\n",
" \"iv_end\",\n",
" \"iv_change_clicks\",\n",
" \"iv_change_pct\",\n",
" \"all_opening_trades\",\n",
" \"has_floor\",\n",
" \"has_multileg\",\n",
" \"has_singleleg\",\n",
" \"has_sweep\",\n",
" ]\n",
" )\n",
")\n",
"all_flow_alerts_df"
]
},
{
"cell_type": "markdown",
"id": "8bf935ac",
"metadata": {},
"source": [
"Now we can apply the \"Unusually Bullish\" filters:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "1b91b593",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><style>\n",
".dataframe > thead > tr,\n",
".dataframe > tbody > tr {\n",
" text-align: right;\n",
" white-space: pre-wrap;\n",
"}\n",
"</style>\n",
"<small>shape: (5, 28)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>created_at_eastern</th><th>alert_rule</th><th>ticker</th><th>strike</th><th>type</th><th>expiry</th><th>underlying_price</th><th>pct_otm</th><th>dte_days</th><th>bid</th><th>ask</th><th>price</th><th>total_premium</th><th>premium_pct_on_ask</th><th>premium_pct_on_bid</th><th>total_size</th><th>volume</th><th>open_interest</th><th>size_oi_ratio</th><th>volume_oi_ratio</th><th>iv_end</th><th>iv_change_clicks</th><th>iv_change_pct</th><th>all_opening_trades</th><th>has_floor</th><th>has_multileg</th><th>has_singleleg</th><th>has_sweep</th></tr><tr><td>datetime[μs, America/New_York]</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>date</td><td>f64</td><td>f64</td><td>i32</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>i64</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>2025-09-03 09:52:08.688341 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;IWM&quot;</td><td>240.0</td><td>&quot;call&quot;</td><td>2025-09-05</td><td>234.74</td><td>0.022408</td><td>2</td><td>0.39</td><td>0.42</td><td>0.41</td><td>307582.0</td><td>1.0</td><td>0.0</td><td>7500</td><td>8245</td><td>4809</td><td>1.559576</td><td>1.714494</td><td>0.294997</td><td>0.002397</td><td>0.008192</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 10:13:15.881942 EDT</td><td>&quot;RepeatedHitsDescendingFill&quot;</td><td>&quot;LCID&quot;</td><td>18.0</td><td>&quot;call&quot;</td><td>2025-11-21</td><td>17.94</td><td>0.003344</td><td>79</td><td>3.0</td><td>3.1</td><td>3.1</td><td>264360.0</td><td>1.0</td><td>0.0</td><td>853</td><td>3380</td><td>0</td><td>inf</td><td>0.0</td><td>0.945039</td><td>0.0</td><td>0.0</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 10:27:59.916844 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;MSTR&quot;</td><td>375.0</td><td>&quot;call&quot;</td><td>2025-09-12</td><td>342.13</td><td>0.096075</td><td>9</td><td>3.3</td><td>3.5</td><td>3.5</td><td>468638.0</td><td>1.0</td><td>0.0</td><td>1339</td><td>1408</td><td>1036</td><td>1.292471</td><td>1.359073</td><td>0.637952</td><td>-0.001837</td><td>-0.002871</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 11:08:45.380013 EDT</td><td>&quot;RepeatedHits&quot;</td><td>&quot;GS&quot;</td><td>740.0</td><td>&quot;call&quot;</td><td>2025-09-12</td><td>731.17</td><td>0.012077</td><td>9</td><td>8.15</td><td>8.85</td><td>8.65</td><td>307944.0</td><td>0.994366</td><td>0.005634</td><td>356</td><td>420</td><td>73</td><td>4.876712</td><td>5.753425</td><td>0.273851</td><td>0.001128</td><td>0.004138</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>2025-09-03 13:05:15.076439 EDT</td><td>&quot;RepeatedHitsDescendingFill&quot;</td><td>&quot;AEO&quot;</td><td>19.0</td><td>&quot;call&quot;</td><td>2026-02-20</td><td>13.78</td><td>0.37881</td><td>170</td><td>0.85</td><td>0.95</td><td>0.94</td><td>254740.0</td><td>0.999301</td><td>0.000699</td><td>2700</td><td>3301</td><td>6</td><td>450.0</td><td>550.166667</td><td>0.624442</td><td>-0.020202</td><td>-0.031339</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr></tbody></table></div>"
],
"text/plain": [
"shape: (5, 28)\n",
"┌─────────────┬────────────┬────────┬────────┬───┬───────────┬────────────┬────────────┬───────────┐\n",
"│ created_at_ ┆ alert_rule ┆ ticker ┆ strike ┆ … ┆ has_floor ┆ has_multil ┆ has_single ┆ has_sweep │\n",
"│ eastern ┆ --- ┆ --- ┆ --- ┆ ┆ --- ┆ eg ┆ leg ┆ --- │\n",
"│ --- ┆ str ┆ str ┆ f64 ┆ ┆ i64 ┆ --- ┆ --- ┆ i64 │\n",
"│ datetime[μs ┆ ┆ ┆ ┆ ┆ ┆ i64 ┆ i64 ┆ │\n",
"│ , America/N ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ ew_York] ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"╞═════════════╪════════════╪════════╪════════╪═══╪═══════════╪════════════╪════════════╪═══════════╡\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ IWM ┆ 240.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 09:52:08.68 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 8341 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ LCID ┆ 18.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 10:13:15.88 ┆ tsDescendi ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 1942 EDT ┆ ngFill ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ MSTR ┆ 375.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 10:27:59.91 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 6844 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ GS ┆ 740.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 0 │\n",
"│ 11:08:45.38 ┆ ts ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 0013 EDT ┆ ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 2025-09-03 ┆ RepeatedHi ┆ AEO ┆ 19.0 ┆ … ┆ 0 ┆ 0 ┆ 1 ┆ 1 │\n",
"│ 13:05:15.07 ┆ tsDescendi ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"│ 6439 EDT ┆ ngFill ┆ ┆ ┆ ┆ ┆ ┆ ┆ │\n",
"└─────────────┴────────────┴────────┴────────┴───┴───────────┴────────────┴────────────┴───────────┘"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"target_alert_rules = [\n",
" \"RepeatedHits\",\n",
" \"RepeatedHitsAscendingFill\",\n",
" \"RepeatedHitsDescendingFill\",\n",
"]\n",
"unusually_bullish_df = all_flow_alerts_df.filter(\n",
" (pl.col(\"alert_rule\").is_in(target_alert_rules))\n",
" & (pl.col(\"type\") == \"call\")\n",
" & (pl.col(\"premium_pct_on_ask\") >= 0.80)\n",
" & (pl.col(\"pct_otm\") > 0)\n",
" & (pl.col(\"size_oi_ratio\") > 1)\n",
" & (pl.col(\"total_premium\") > 250_000)\n",
" & (pl.col(\"dte_days\") <= 183)\n",
" & (pl.col(\"has_multileg\") == 0)\n",
")\n",
"unusually_bullish_df"
]
},
{
"cell_type": "markdown",
"id": "b6e1d505",
"metadata": {},
"source": [
"The next step from here would be taking these individual option contracts and examining their performance over time by compiling the \"Option States\" data for that ticker then querying for results."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "dans-magic-house",
"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.11.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment