{"slug":"how-long-can-a-stock-trade-under-1-dollar","qid":"streaks","label":"streaks","post_title":"how-long-can-a-stock-trade-under-1-dollar","post_url":"/blog/how-long-can-a-stock-trade-under-1-dollar#q-streaks","columns":["threshold_label","names","share_pct"],"rows":[{"threshold_label":"1 or more","names":356,"share_pct":100},{"threshold_label":"30 or more","names":210,"share_pct":59},{"threshold_label":"90 or more","names":104,"share_pct":29.2},{"threshold_label":"180 or more","names":48,"share_pct":13.5}],"shape":"ranking","sql":"SELECT\n    threshold_label,\n    countIf(streak >= threshold)                             AS names,\n    round(100 * countIf(streak >= threshold) / count(), 1)   AS share_pct\nFROM\n(\n    SELECT\n        ticker,\n        arrayReverseSort(groupArray((date, px)))                                                    AS closes_desc,\n        arrayFirstIndex(x -> tupleElement(x, 2) >= 1, closes_desc)                                  AS first_at_or_above_1,\n        if(first_at_or_above_1 = 0, toInt32(length(closes_desc)), toInt32(first_at_or_above_1) - 1) AS streak\n    FROM\n    (\n        SELECT\n            ticker,\n            date,\n            argMax(toFloat64(close), _ingest_time) AS px\n        FROM global_markets.stocks_daily_aggs\n        WHERE date >= today() - 400\n          AND date <= (SELECT max(date) FROM global_markets.stocks_daily_aggs\n                       WHERE ticker = 'SPY' AND date >= today() - 14)\n          AND ifNull(otc, 0) = 0\n          AND length(ticker) <= 4\n          AND ticker NOT IN ('SPCX')\n          AND volume > 0\n          AND close > 0\n          AND ticker IN\n          (\n              SELECT ticker\n              FROM global_markets.stocks_daily_aggs\n              WHERE date = (SELECT max(date) FROM global_markets.stocks_daily_aggs\n                            WHERE ticker = 'SPY' AND date >= today() - 14)\n                AND volume > 0\n                AND close > 0\n                AND close < 1\n          )\n        GROUP BY ticker, date\n    ) AS daily\n    GROUP BY ticker\n) AS per_ticker\nARRAY JOIN\n    [1, 30, 90, 180]                                             AS threshold,\n    ['1 or more', '30 or more', '90 or more', '180 or more']     AS threshold_label\nGROUP BY threshold, threshold_label\nORDER BY threshold","computed_at":"2026-09-18T15:00:09.908999+00:00","elapsed":7.320764214}