risk_stats
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-11-01, from what-is-qqq-etf-for-russian-investors.
| ticker | first_close_on | last_close_on | annualized_return_pct | realized_vol_pct | biggest_drop_pct | biggest_gain_pct |
|---|---|---|---|---|---|---|
| QQQ | 01.11.2021 | 30.10.2026 | 12.3 | 23.1 | -6.2 | 12 |
| SPY | 01.11.2021 | 30.10.2026 | 10.5 | 17.2 | -5.9 | 10.5 |
- Rows × columns
- 2 × 7
- 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 |
|---|---|---|---|
ticker |
text | 2 distinct values (QQQ, SPY) | |
first_close_on |
text | 1 distinct value (01.11.2021) | |
last_close_on |
text | 1 distinct value (30.10.2026) | |
annualized_return_pct |
number | 10.5 to 12.3 | percent |
realized_vol_pct |
number | 17.2 to 23.1 | percent |
biggest_drop_pct |
number | -6.2 to -5.9 | percent |
biggest_gain_pct |
number | 10.5 to 12 | 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 px AS
(
SELECT
ticker,
date,
toFloat64(any(close)) AS close_px
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('QQQ', 'SPY')
AND date >= subtractYears(today(), 5)
AND date < today()
GROUP BY ticker, date
),
daily AS
(
SELECT
ticker,
date,
close_px,
close_px / lagInFrame(close_px, 1, close_px)
OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - 1 AS daily_return
FROM px
)
SELECT
ticker,
formatDateTime(min(date), '%d.%m.%Y') AS first_close_on,
formatDateTime(max(date), '%d.%m.%Y') AS last_close_on,
round((pow(argMax(close_px, date) / argMin(close_px, date),
365.25 / dateDiff('day', min(date), max(date))) - 1) * 100, 1) AS annualized_return_pct,
round(stddevSamp(daily_return) * sqrt(252) * 100, 1) AS realized_vol_pct,
round(min(daily_return) * 100, 1) AS biggest_drop_pct,
round(max(daily_return) * 100, 1) AS biggest_gain_pct
FROM daily
GROUP BY ticker
ORDER BY ticker
Работайте с этими данными в своём ИИ-ассистенте
Открывается готовым к запросам, с данными этой страницы. Бесплатно, без аккаунта.