{"slug":"multi-agent-ai-trading-systems","qid":"year_by_year","label":"The window decides the answer: SPY calendar-year price return and intra-year high-to-low range, 2016-2025","post_title":"Multi-Agent AI Trading Systems: What Is Real","post_url":"/blog/multi-agent-ai-trading-systems#q-year_by_year","columns":["year","sessions","price_return_pct","high_low_range_pct"],"rows":[{"year":2016,"sessions":252,"price_return_pct":11.2,"high_low_range_pct":24.4},{"year":2017,"sessions":251,"price_return_pct":18.5,"high_low_range_pct":19.1},{"year":2018,"sessions":251,"price_return_pct":-6.9,"high_low_range_pct":25.3},{"year":2019,"sessions":252,"price_return_pct":28.6,"high_low_range_pct":32.3},{"year":2020,"sessions":253,"price_return_pct":15.1,"high_low_range_pct":68},{"year":2021,"sessions":252,"price_return_pct":28.7,"high_low_range_pct":29.4},{"year":2022,"sessions":251,"price_return_pct":-20,"high_low_range_pct":34},{"year":2023,"sessions":250,"price_return_pct":24.8,"high_low_range_pct":25.6},{"year":2024,"sessions":252,"price_return_pct":24,"high_low_range_pct":30.1},{"year":2025,"sessions":250,"price_return_pct":16.6,"high_low_range_pct":39}],"shape":"ranking","sql":"WITH daily AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,\n           argMax(close, window_start) AS close_px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY'\n      AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2016-01-01')\n      AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2025-12-31')\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY d\n),\nyr AS (\n    SELECT toYear(d) AS year,\n           argMin(close_px, d) AS first_close,\n           argMax(close_px, d) AS last_close,\n           max(close_px) AS high_close,\n           min(close_px) AS low_close,\n           count() AS sessions\n    FROM daily\n    GROUP BY year\n)\nSELECT year,\n       sessions,\n       round(100 * (toFloat64(last_close) / toFloat64(first_close) - 1), 1) AS price_return_pct,\n       round(100 * (toFloat64(high_close) / toFloat64(low_close) - 1), 1) AS high_low_range_pct\nFROM yr\nORDER BY year","computed_at":"2026-07-31T03:10:04.053670+00:00","elapsed":0.012716607}