{"slug":"what-skew-means-in-markets","qid":"skew_by_year","label":"skew_by_year","post_title":"what-skew-means-in-markets","post_url":"/blog/lang/fr/what-skew-means-in-markets#q-skew_by_year","columns":["annee","seances_count","skewness","pire_seance_pct","meilleure_seance_pct"],"rows":[{"annee":"2016","seances_count":252,"skewness":-0.43,"pire_seance_pct":-3.71,"meilleure_seance_pct":2.41},{"annee":"2017","seances_count":251,"skewness":-0.43,"pire_seance_pct":-1.79,"meilleure_seance_pct":1.39},{"annee":"2018","seances_count":251,"skewness":-0.48,"pire_seance_pct":-4.27,"meilleure_seance_pct":4.93},{"annee":"2019","seances_count":252,"skewness":-0.64,"pire_seance_pct":-3.05,"meilleure_seance_pct":3.29},{"annee":"2020","seances_count":253,"skewness":-0.88,"pire_seance_pct":-11.59,"meilleure_seance_pct":8.67},{"annee":"2021","seances_count":252,"skewness":-0.37,"pire_seance_pct":-2.47,"meilleure_seance_pct":2.4},{"annee":"2022","seances_count":251,"skewness":0,"pire_seance_pct":-4.45,"meilleure_seance_pct":5.35},{"annee":"2023","seances_count":250,"skewness":-0.06,"pire_seance_pct":-2.03,"meilleure_seance_pct":2.27},{"annee":"2024","seances_count":252,"skewness":-0.55,"pire_seance_pct":-3.03,"meilleure_seance_pct":2.46},{"annee":"2025","seances_count":250,"skewness":1.1,"pire_seance_pct":-6.03,"meilleure_seance_pct":9.99},{"annee":"2016 à 2025","seances_count":2514,"skewness":-0.6,"pire_seance_pct":-11.59,"meilleure_seance_pct":9.99}],"shape":"table","sql":"WITH rets AS\n(\n    SELECT\n        date,\n        log(close_px / prev_px) AS r\n    FROM\n    (\n        SELECT\n            date,\n            close_px,\n            lagInFrame(close_px, 1) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px\n        FROM\n        (\n            SELECT\n                date,\n                toFloat64(any(close)) AS close_px\n            FROM global_markets.stocks_daily_aggs\n            WHERE ticker = 'SPY'\n              AND date BETWEEN toDate('2015-12-31') AND toDate('2025-12-31')\n            GROUP BY date\n        )\n    )\n    WHERE prev_px > 0\n      AND toYear(date) >= 2016\n)\nSELECT\n    annee,\n    seances_count,\n    skewness,\n    pire_seance_pct,\n    meilleure_seance_pct\nFROM\n(\n    SELECT\n        toString(toYear(date))  AS annee,\n        toYear(date)            AS sort_key,\n        count()                 AS seances_count,\n        round(skewSamp(r), 2)   AS skewness,\n        round(min(r) * 100, 2)  AS pire_seance_pct,\n        round(max(r) * 100, 2)  AS meilleure_seance_pct\n    FROM rets\n    GROUP BY annee, sort_key\n    UNION ALL\n    SELECT\n        '2016 à 2025'           AS annee,\n        9999                    AS sort_key,\n        count()                 AS seances_count,\n        round(skewSamp(r), 2)   AS skewness,\n        round(min(r) * 100, 2)  AS pire_seance_pct,\n        round(max(r) * 100, 2)  AS meilleure_seance_pct\n    FROM rets\n)\nORDER BY sort_key","computed_at":"2026-09-11T14:53:59.398497+00:00","elapsed":0.0067973}