{"slug":"what-is-qqq-etf-for-russian-investors","qid":"bear_2022","label":"bear_2022","post_title":"what-is-qqq-etf-for-russian-investors","post_url":"/blog/lang/ru/what-is-qqq-etf-for-russian-investors#q-bear_2022","columns":["ticker","peak_on","peak_close","trough_on","trough_close","drawdown_pct","drop_length","recovered_on","recovery_length"],"rows":[{"ticker":"QQQ","peak_on":"19.11.2021","peak_close":403.99,"trough_on":"28.12.2022","trough_close":260.1,"drawdown_pct":35.6,"drop_length":277,"recovered_on":"15.12.2023","recovery_length":352},{"ticker":"SPY","peak_on":"03.01.2022","peak_close":477.71,"trough_on":"12.10.2022","trough_close":356.56,"drawdown_pct":25.4,"drop_length":195,"recovered_on":"19.01.2024","recovery_length":464}],"shape":"table","sql":"WITH px AS\n(\n    SELECT\n        ticker,\n        date,\n        toFloat64(any(close)) AS close_px\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('QQQ', 'SPY')\n      AND date BETWEEN '2021-11-01' AND '2024-06-30'\n    GROUP BY ticker, date\n),\nprice_path AS\n(\n    SELECT\n        ticker,\n        date,\n        close_px,\n        max(close_px)          OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak,\n        argMax(date, close_px) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS running_peak_on\n    FROM px\n),\ntrough AS\n(\n    SELECT\n        ticker,\n        argMin(running_peak_on, close_px / running_peak) AS peak_date,\n        argMin(running_peak,    close_px / running_peak) AS peak_close,\n        argMin(date,            close_px / running_peak) AS trough_date,\n        argMin(close_px,        close_px / running_peak) AS trough_close,\n        min(close_px / running_peak) - 1                 AS max_drawdown\n    FROM price_path\n    GROUP BY ticker\n)\nSELECT\n    t.ticker                                                  AS ticker,\n    formatDateTime(t.peak_date, '%d.%m.%Y')                   AS peak_on,\n    round(t.peak_close, 2)                                    AS peak_close,\n    formatDateTime(t.trough_date, '%d.%m.%Y')                 AS trough_on,\n    round(t.trough_close, 2)                                  AS trough_close,\n    round(abs(t.max_drawdown) * 100, 1)                       AS drawdown_pct,\n    countIf(p.date > t.peak_date AND p.date <= t.trough_date) AS drop_length,\n    formatDateTime(minIf(p.date, p.date > t.trough_date AND p.close_px >= t.peak_close), '%d.%m.%Y') AS recovered_on,\n    dateDiff('day', t.trough_date, minIf(p.date, p.date > t.trough_date AND p.close_px >= t.peak_close)) AS recovery_length\nFROM trough AS t\nINNER JOIN px AS p ON p.ticker = t.ticker\nGROUP BY t.ticker, t.peak_date, t.peak_close, t.trough_date, t.trough_close, t.max_drawdown\nORDER BY t.ticker","computed_at":"2026-11-01T01:50:15.661564+00:00","elapsed":0.509840615}