STRASMORE/EXPLORE 3,293 QUERIES

skew_by_year

Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-09-11, from what-skew-means-in-markets.

as of table 11×5read in context →
skew_by_year — 11 rows by 5 columns, computed from US exchange, SIP and OPRA data.
anneeseances_countskewnesspire_seance_pctmeilleure_seance_pct
2016252-0.43-3.712.41
2017251-0.43-1.791.39
2018251-0.48-4.274.93
2019252-0.64-3.053.29
2020253-0.88-11.598.67
2021252-0.37-2.472.4
20222510-4.455.35
2023250-0.06-2.032.27
2024252-0.55-3.032.46
20252501.1-6.039.99
2016 à 20252514-0.6-11.599.99
Rows × columns
11 × 5
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for skew_by_year, derived from the stored result.
ColumnTypeRangeNotes
annee text 11 distinct values (2016, 2016 à 2025, 2017…)
seances_count number 250 to 2,514 count
skewness number -0.88 to 1.1
pire_seance_pct number -11.59 to -1.79 percent
meilleure_seance_pct number 1.39 to 9.99 percent

Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.

Run it yourself

This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.

WITH rets AS
(
    SELECT
        date,
        log(close_px / prev_px) AS r
    FROM
    (
        SELECT
            date,
            close_px,
            lagInFrame(close_px, 1) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
        FROM
        (
            SELECT
                date,
                toFloat64(any(close)) AS close_px
            FROM global_markets.stocks_daily_aggs
            WHERE ticker = 'SPY'
              AND date BETWEEN toDate('2015-12-31') AND toDate('2025-12-31')
            GROUP BY date
        )
    )
    WHERE prev_px > 0
      AND toYear(date) >= 2016
)
SELECT
    annee,
    seances_count,
    skewness,
    pire_seance_pct,
    meilleure_seance_pct
FROM
(
    SELECT
        toString(toYear(date))  AS annee,
        toYear(date)            AS sort_key,
        count()                 AS seances_count,
        round(skewSamp(r), 2)   AS skewness,
        round(min(r) * 100, 2)  AS pire_seance_pct,
        round(max(r) * 100, 2)  AS meilleure_seance_pct
    FROM rets
    GROUP BY annee, sort_key
    UNION ALL
    SELECT
        '2016 à 2025'           AS annee,
        9999                    AS sort_key,
        count()                 AS seances_count,
        round(skewSamp(r), 2)   AS skewness,
        round(min(r) * 100, 2)  AS pire_seance_pct,
        round(max(r) * 100, 2)  AS meilleure_seance_pct
    FROM rets
)
ORDER BY sort_key
⌘/Ctrl + Enter

Travaillez ces données dans votre assistant IA

S'ouvre prêt à interroger, avec les données de cette page. Gratuit, sans compte.