{"slug":"bullish-vs-bearish-meaning","qid":"yearly","label":"yearly","post_title":"bullish-vs-bearish-meaning","post_url":"/blog/lang/pcm/bullish-vs-bearish-meaning#q-yearly","columns":["year","up_day_pct","down_day_pct","year_move_pct"],"rows":[{"year":2008,"up_day_pct":49.8,"down_day_pct":50.2,"year_move_pct":-38.3},{"year":2022,"up_day_pct":43,"down_day_pct":56.6,"year_move_pct":-19.5},{"year":2018,"up_day_pct":52.6,"down_day_pct":46.6,"year_move_pct":-6.3},{"year":2015,"up_day_pct":48,"down_day_pct":52,"year_move_pct":-0.8},{"year":2011,"up_day_pct":52.8,"down_day_pct":47.2,"year_move_pct":-0.2},{"year":2005,"up_day_pct":54,"down_day_pct":44.8,"year_move_pct":3},{"year":2007,"up_day_pct":54.6,"down_day_pct":45,"year_move_pct":3.2},{"year":2004,"up_day_pct":55.6,"down_day_pct":43.3,"year_move_pct":8.6},{"year":2003,"up_day_pct":60.3,"down_day_pct":39.7,"year_move_pct":9.1},{"year":2016,"up_day_pct":54,"down_day_pct":45.6,"year_move_pct":9.6},{"year":2014,"up_day_pct":58.3,"down_day_pct":41.7,"year_move_pct":11.3},{"year":2026,"up_day_pct":51.4,"down_day_pct":48.6,"year_move_pct":11.7},{"year":2010,"up_day_pct":56.3,"down_day_pct":43.7,"year_move_pct":12.8},{"year":2012,"up_day_pct":55.2,"down_day_pct":44.4,"year_move_pct":13.5},{"year":2006,"up_day_pct":54.6,"down_day_pct":45.4,"year_move_pct":13.7},{"year":2020,"up_day_pct":57.7,"down_day_pct":42.3,"year_move_pct":16.2},{"year":2025,"up_day_pct":56.8,"down_day_pct":43.2,"year_move_pct":16.4},{"year":2017,"up_day_pct":56.2,"down_day_pct":43.4,"year_move_pct":19.4},{"year":2024,"up_day_pct":58.7,"down_day_pct":41.3,"year_move_pct":23.3},{"year":2009,"up_day_pct":54.8,"down_day_pct":45.2,"year_move_pct":23.5},{"year":2023,"up_day_pct":56,"down_day_pct":43.6,"year_move_pct":24.3},{"year":2021,"up_day_pct":57.9,"down_day_pct":42.1,"year_move_pct":27},{"year":2019,"up_day_pct":59.1,"down_day_pct":40.9,"year_move_pct":28.8},{"year":2013,"up_day_pct":57.5,"down_day_pct":41.7,"year_move_pct":29.7}],"shape":"ranking","sql":"WITH bars AS\n(\n    SELECT\n        date,\n        toFloat64(any(close)) AS close_price\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n      AND close > 0\n    GROUP BY date\n),\nmoves AS\n(\n    SELECT\n        date,\n        close_price,\n        lagInFrame(close_price, 1) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS prev_close\n    FROM bars\n)\nSELECT\n    toYear(date)                                                                  AS year,\n    round(100 * countIf(close_price > prev_close) / count(), 1)                   AS up_day_pct,\n    round(100 * countIf(close_price < prev_close) / count(), 1)                   AS down_day_pct,\n    round(100 * (argMax(close_price, date) / argMin(prev_close, date) - 1), 1)    AS year_move_pct\nFROM moves\nWHERE prev_close > 0\nGROUP BY year\nORDER BY year_move_pct ASC","computed_at":"2026-09-20T15:27:30.453742+00:00","elapsed":0.003444529}