{"slug":"half-penny-tick-sizes","qid":"spread_ladder","label":"Share of the session spent at each quoted spread, three names","post_title":"Half-Penny Tick Sizes Under Rule 612","post_url":"/blog/half-penny-tick-sizes#q-spread_ladder","columns":["quoted_spread","aapl_pct","f_pct","gs_pct"],"rows":[{"quoted_spread":"1 cent","aapl_pct":68.9,"f_pct":99.8,"gs_pct":0.3},{"quoted_spread":"2 cents","aapl_pct":19,"f_pct":0.2,"gs_pct":0.2},{"quoted_spread":"3 cents","aapl_pct":7.8,"f_pct":0,"gs_pct":0.2},{"quoted_spread":"4 cents","aapl_pct":3.1,"f_pct":0,"gs_pct":0.3},{"quoted_spread":"5 cents or wider","aapl_pct":1.2,"f_pct":0,"gs_pct":98.9}],"shape":"ranking","sql":"WITH per_second AS\n(\n    SELECT\n        ticker,\n        toDateTime(sip_timestamp)  AS quote_second,\n        max(toFloat64(bid_price))  AS best_bid,\n        min(toFloat64(ask_price))  AS best_ask\n    FROM global_markets.cache_stocks_quotes\n    WHERE ticker IN ('AAPL', 'F', 'GS')\n      AND sip_timestamp >= '2026-08-05 13:30:00'\n      AND sip_timestamp <  '2026-08-05 20:00:00'\n      AND bid_price > 0\n      AND ask_price > 0\n    GROUP BY ticker, quote_second\n),\ngraded AS\n(\n    SELECT\n        ticker,\n        least(toUInt16(round((best_ask - best_bid) * 100)), 5) AS spread_cents\n    FROM per_second\n    WHERE best_ask > best_bid\n),\ntotals AS\n(\n    SELECT\n        ticker,\n        count() AS quoted_seconds\n    FROM graded\n    GROUP BY ticker\n),\nshares AS\n(\n    SELECT\n        g.ticker                        AS ticker,\n        g.spread_cents                  AS spread_cents,\n        count() / any(t.quoted_seconds) AS time_share\n    FROM graded AS g\n    INNER JOIN totals AS t ON t.ticker = g.ticker\n    GROUP BY g.ticker, g.spread_cents\n)\nSELECT\n    if(spread_cents >= 5,\n       '5 cents or wider',\n       concat(toString(spread_cents), if(spread_cents = 1, ' cent', ' cents'))) AS quoted_spread,\n    round(100 * sumIf(time_share, ticker = 'AAPL'), 1) AS aapl_pct,\n    round(100 * sumIf(time_share, ticker = 'F'), 1)    AS f_pct,\n    round(100 * sumIf(time_share, ticker = 'GS'), 1)   AS gs_pct\nFROM shares\nGROUP BY spread_cents\nORDER BY spread_cents ASC","computed_at":"2026-08-13T16:13:06.703707+00:00","elapsed":0.004340392}