Created
November 19, 2025 16:16
-
-
Save danwagnerco/989a56c38de9a6d96be3463676391bda to your computer and use it in GitHub Desktop.
Quick tutorial on importing and filtering Flow Alerts data (via CSV file)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "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>"8abd0f25-938e-40c6-b0c1-3a83c1…</td><td>"a0979b52-28e4-4585-8f22-881faa…</td><td>"RepeatedHitsAscendingFill"</td><td>"2025-09-03T13:30:04.501828Z"</td><td>1756844226343</td><td>1756844226343</td><td>"SPXW250904C06440000"</td><td>"SPXW"</td><td>"2025-09-04"</td><td>"call"</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>"81f5eda2-425e-43cc-8617-b8911d…</td><td>"e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>"RepeatedHits"</td><td>"2025-09-03T13:30:09.513947Z"</td><td>1756906201976</td><td>1756906202055</td><td>"BIDU251121C00105000"</td><td>"BIDU"</td><td>"2025-11-21"</td><td>"call"</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>"2025-11-20"</td><td>"unknown"</td><td>"Communication Services"</td><td>2.4121e10</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>"88a1eaa2-25f5-4204-b091-2f4162…</td><td>"a0979b52-28e4-4585-8f22-881faa…</td><td>"RepeatedHitsAscendingFill"</td><td>"2025-09-03T13:30:09.513947Z"</td><td>1756906202315</td><td>1756906202360</td><td>"U250926P00033000"</td><td>"U"</td><td>"2025-09-26"</td><td>"put"</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>"2025-11-06"</td><td>"unknown"</td><td>"Technology"</td><td>1.8211e10</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>"74c70808-3628-48b1-baeb-776a9f…</td><td>"5ce5ec11-087c-4c00-b164-08106b…</td><td>"RepeatedHitsDescendingFill"</td><td>"2025-09-03T13:30:09.513947Z"</td><td>1756906202044</td><td>1756906202045</td><td>"COMP250919P00008000"</td><td>"COMP"</td><td>"2025-09-19"</td><td>"put"</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>"2025-10-29"</td><td>"unknown"</td><td>"Technology"</td><td>4.8327e9</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>"53259d82-28fe-4b1a-af34-2979d8…</td><td>"e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>"RepeatedHits"</td><td>"2025-09-03T13:30:09.513947Z"</td><td>1756906203852</td><td>1756906203987</td><td>"JD260116C00035000"</td><td>"JD"</td><td>"2026-01-16"</td><td>"call"</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>"2025-11-13"</td><td>"unknown"</td><td>"Consumer Cyclical"</td><td>4.2582e10</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>"a1a67bd2-8fca-4ad6-a6cc-edc462…</td><td>"e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>"RepeatedHits"</td><td>"2025-09-03T19:59:55.919759Z"</td><td>1756929588846</td><td>1756929588852</td><td>"PLTR250905P00155000"</td><td>"PLTR"</td><td>"2025-09-05"</td><td>"put"</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>"2025-11-03"</td><td>"unknown"</td><td>"Technology"</td><td>3.7921e11</td><td>0</td><td>0</td><td>0</td><td>1</td><td>0</td></tr><tr><td>"f719d5a9-ef33-4f86-99f4-01b850…</td><td>"e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>"RepeatedHits"</td><td>"2025-09-03T19:59:55.919759Z"</td><td>1756929589277</td><td>1756929589341</td><td>"JOYY251121C00060000"</td><td>"JOYY"</td><td>"2025-11-21"</td><td>"call"</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>"2025-11-25"</td><td>"unknown"</td><td>"Communication Services"</td><td>1.4900e9</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>"1b761391-6234-4b0f-bfb6-059590…</td><td>"e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>"RepeatedHits"</td><td>"2025-09-03T19:59:55.919759Z"</td><td>1756929588568</td><td>1756929588570</td><td>"GLD250912P00327000"</td><td>"GLD"</td><td>"2025-09-12"</td><td>"put"</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>"0df23092-fdc7-41a8-bd76-1883ab…</td><td>"e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>"RepeatedHits"</td><td>"2025-09-03T19:59:57.731410Z"</td><td>1756929591650</td><td>1756929591651</td><td>"AEO251121C00014000"</td><td>"AEO"</td><td>"2025-11-21"</td><td>"call"</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>"2025-12-03"</td><td>"unknown"</td><td>"Consumer Cyclical"</td><td>3.2598e9</td><td>0</td><td>0</td><td>0</td><td>1</td><td>1</td></tr><tr><td>"50fbd31f-f24a-4414-a2e3-17944f…</td><td>"e6b9f0b6-fcd9-44fe-9d1c-f53521…</td><td>"RepeatedHits"</td><td>"2025-09-03T19:59:59.134049Z"</td><td>1756929593162</td><td>1756929593163</td><td>"CIFR251017C00008000"</td><td>"CIFR"</td><td>"2025-10-17"</td><td>"call"</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>"2025-10-30"</td><td>"unknown"</td><td>"Financial Services"</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>"RepeatedHitsAscendingFill"</td><td>"SPXW"</td><td>6440.0</td><td>"call"</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>"RepeatedHits"</td><td>"BIDU"</td><td>105.0</td><td>"call"</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>"RepeatedHitsAscendingFill"</td><td>"U"</td><td>33.0</td><td>"put"</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>"RepeatedHitsDescendingFill"</td><td>"COMP"</td><td>8.0</td><td>"put"</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>"RepeatedHits"</td><td>"JD"</td><td>35.0</td><td>"call"</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>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td><td>…</td></tr><tr><td>2025-09-03 15:59:55.919759 EDT</td><td>"RepeatedHits"</td><td>"PLTR"</td><td>155.0</td><td>"put"</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>"RepeatedHits"</td><td>"JOYY"</td><td>60.0</td><td>"call"</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>"RepeatedHits"</td><td>"GLD"</td><td>327.0</td><td>"put"</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>"RepeatedHits"</td><td>"AEO"</td><td>14.0</td><td>"call"</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>"RepeatedHits"</td><td>"CIFR"</td><td>8.0</td><td>"call"</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>"RepeatedHits"</td><td>"IWM"</td><td>240.0</td><td>"call"</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>"RepeatedHitsDescendingFill"</td><td>"LCID"</td><td>18.0</td><td>"call"</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>"RepeatedHits"</td><td>"MSTR"</td><td>375.0</td><td>"call"</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>"RepeatedHits"</td><td>"GS"</td><td>740.0</td><td>"call"</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>"RepeatedHitsDescendingFill"</td><td>"AEO"</td><td>19.0</td><td>"call"</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