{"slug":"open-source-trading-terminal-for-python","qid":"resolution","label":"resolution","post_title":"open-source-trading-terminal-for-python","post_url":"/blog/open-source-trading-terminal-for-python#q-resolution","columns":["session_date","session_label","daily_range_bps","widest_minute_bps"],"rows":[{"session_date":"2026-06-01","session_label":"Jun 1","daily_range_bps":193.3,"widest_minute_bps":52.9},{"session_date":"2026-06-02","session_label":"Jun 2","daily_range_bps":278.1,"widest_minute_bps":58.2},{"session_date":"2026-06-03","session_label":"Jun 3","daily_range_bps":260.7,"widest_minute_bps":42.2},{"session_date":"2026-06-04","session_label":"Jun 4","daily_range_bps":125,"widest_minute_bps":72.9},{"session_date":"2026-06-05","session_label":"Jun 5","daily_range_bps":260.9,"widest_minute_bps":53.8},{"session_date":"2026-06-08","session_label":"Jun 8","daily_range_bps":538.2,"widest_minute_bps":151.6},{"session_date":"2026-06-09","session_label":"Jun 9","daily_range_bps":446.4,"widest_minute_bps":67.8},{"session_date":"2026-06-10","session_label":"Jun 10","daily_range_bps":252.8,"widest_minute_bps":56.8},{"session_date":"2026-06-11","session_label":"Jun 11","daily_range_bps":250.7,"widest_minute_bps":71.4},{"session_date":"2026-06-12","session_label":"Jun 12","daily_range_bps":258.3,"widest_minute_bps":60.7},{"session_date":"2026-06-15","session_label":"Jun 15","daily_range_bps":205.1,"widest_minute_bps":76.6},{"session_date":"2026-06-16","session_label":"Jun 16","daily_range_bps":217.6,"widest_minute_bps":40.4},{"session_date":"2026-06-17","session_label":"Jun 17","daily_range_bps":260.5,"widest_minute_bps":59.8},{"session_date":"2026-06-18","session_label":"Jun 18","daily_range_bps":166.1,"widest_minute_bps":57.6},{"session_date":"2026-06-22","session_label":"Jun 22","daily_range_bps":190.6,"widest_minute_bps":85.2},{"session_date":"2026-06-23","session_label":"Jun 23","daily_range_bps":253.5,"widest_minute_bps":105.9},{"session_date":"2026-06-24","session_label":"Jun 24","daily_range_bps":230.7,"widest_minute_bps":73.8},{"session_date":"2026-06-25","session_label":"Jun 25","daily_range_bps":547,"widest_minute_bps":140.9},{"session_date":"2026-06-26","session_label":"Jun 26","daily_range_bps":413.7,"widest_minute_bps":132.9},{"session_date":"2026-06-29","session_label":"Jun 29","daily_range_bps":302.4,"widest_minute_bps":89.7},{"session_date":"2026-06-30","session_label":"Jun 30","daily_range_bps":319.5,"widest_minute_bps":84.3}],"shape":"series","sql":"SELECT\n    toString(bars.session)                AS session_date,\n    formatDateTime(bars.session, '%b %e') AS session_label,\n    round((toFloat64(bars.high) - toFloat64(bars.low)) / toFloat64(bars.close) * 10000, 1) AS daily_range_bps,\n    round(mins.widest_minute_bps, 1)      AS widest_minute_bps\nFROM\n(\n    SELECT date AS session, high, low, close\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'AAPL'\n      AND date >= '2026-06-01'\n      AND date <  '2026-07-01'\n) AS bars\nINNER JOIN\n(\n    SELECT\n        toDate(toTimeZone(window_start, 'America/New_York')) AS session,\n        max((toFloat64(high) - toFloat64(low)) / toFloat64(close) * 10000) AS widest_minute_bps\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'AAPL'\n      AND window_start >= '2026-06-01 04:00:00'\n      AND window_start <  '2026-07-01 04:00:00'\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960\n    GROUP BY session\n) AS mins ON mins.session = bars.session\nORDER BY bars.session","computed_at":"2026-10-03T16:02:47.932292+00:00","elapsed":0.004859586}