{"slug":"what-is-the-ttm-squeeze","qid":"preset_disagreement","label":"Squeeze sessions found by each parameter set, KO, three years","post_title":"What Is the TTM Squeeze? Formula and Limits","post_url":"/blog/what-is-the-ttm-squeeze#q-preset_disagreement","columns":["label","squeeze_count","squeeze_share_pct"],"rows":[{"label":"KC ATR20 x2.0","squeeze_count":377,"squeeze_share_pct":50.2},{"label":"BB 1.5 sigma, KC ATR20 x1.5","squeeze_count":377,"squeeze_share_pct":50.2},{"label":"KC ATR14 x1.5","squeeze_count":135,"squeeze_share_pct":18},{"label":"KC ATR10 x1.5","squeeze_count":133,"squeeze_share_pct":17.7},{"label":"KC ATR20 x1.5 (squeeze default)","squeeze_count":126,"squeeze_share_pct":16.8},{"label":"KC ATR20 x1.0","squeeze_count":13,"squeeze_share_pct":1.7}],"shape":"ranking","sql":"WITH\npx AS\n(\n    SELECT\n        date,\n        toFloat64(any(close)) AS c,\n        toFloat64(any(high))  AS h,\n        toFloat64(any(low))   AS l\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'KO'\n      AND date >= '2023-07-01'\n      AND date <  '2026-09-01'\n    GROUP BY date\n),\ntr AS\n(\n    SELECT\n        date,\n        c,\n        h,\n        l,\n        lagInFrame(c) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_c\n    FROM px\n),\nstat AS\n(\n    SELECT\n        date,\n        stddevPop(c) OVER (ORDER BY date ROWS BETWEEN 19 PRECEDING AND CURRENT ROW) AS sd,\n        count()      OVER (ORDER BY date ROWS BETWEEN 19 PRECEDING AND CURRENT ROW) AS bars,\n        avg(if(prev_c > 0, greatest(h - l, abs(h - prev_c), abs(l - prev_c)), h - l))\n                     OVER (ORDER BY date ROWS BETWEEN  9 PRECEDING AND CURRENT ROW) AS atr10,\n        avg(if(prev_c > 0, greatest(h - l, abs(h - prev_c), abs(l - prev_c)), h - l))\n                     OVER (ORDER BY date ROWS BETWEEN 13 PRECEDING AND CURRENT ROW) AS atr14,\n        avg(if(prev_c > 0, greatest(h - l, abs(h - prev_c), abs(l - prev_c)), h - l))\n                     OVER (ORDER BY date ROWS BETWEEN 19 PRECEDING AND CURRENT ROW) AS atr20\n    FROM tr\n),\ngraded AS\n(\n    SELECT\n        label,\n        2 * sd_mult * sd AS bb_span,\n        2 * atr_mult * multiIf(atr_len = 10, atr10, atr_len = 14, atr14, atr20) AS kc_span\n    FROM stat\n    ARRAY JOIN\n        ['KC ATR20 x1.5 (squeeze default)', 'KC ATR20 x1.0', 'KC ATR20 x2.0',\n         'KC ATR14 x1.5', 'KC ATR10 x1.5', 'BB 1.5 sigma, KC ATR20 x1.5'] AS label,\n        [2.0, 2.0, 2.0, 2.0, 2.0, 1.5]  AS sd_mult,\n        [20, 20, 20, 14, 10, 20]        AS atr_len,\n        [1.5, 1.0, 2.0, 1.5, 1.5, 1.5]  AS atr_mult\n    WHERE bars = 20\n      AND date >= '2023-09-01'\n)\nSELECT\n    label,\n    countIf(bb_span < kc_span)                           AS squeeze_count,\n    round(100 * countIf(bb_span < kc_span) / count(), 1) AS squeeze_share_pct\nFROM graded\nGROUP BY label\nORDER BY squeeze_count DESC","computed_at":"2026-09-27T16:13:37.614727+00:00","elapsed":0.012225947}