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.
| annee | seances_count | skewness | pire_seance_pct | meilleure_seance_pct |
|---|---|---|---|---|
| 2016 | 252 | -0.43 | -3.71 | 2.41 |
| 2017 | 251 | -0.43 | -1.79 | 1.39 |
| 2018 | 251 | -0.48 | -4.27 | 4.93 |
| 2019 | 252 | -0.64 | -3.05 | 3.29 |
| 2020 | 253 | -0.88 | -11.59 | 8.67 |
| 2021 | 252 | -0.37 | -2.47 | 2.4 |
| 2022 | 251 | 0 | -4.45 | 5.35 |
| 2023 | 250 | -0.06 | -2.03 | 2.27 |
| 2024 | 252 | -0.55 | -3.03 | 2.46 |
| 2025 | 250 | 1.1 | -6.03 | 9.99 |
| 2016 à 2025 | 2514 | -0.6 | -11.59 | 9.99 |
- Rows × columns
- 11 × 5
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
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
Travaillez ces données dans votre assistant IA
S'ouvre prêt à interroger, avec les données de cette page. Gratuit, sans compte.