{"slug":"dow-theory-and-transport-confirmation","qid":"confirm_by_year","label":"confirm_by_year","post_title":"dow-theory-and-transport-confirmation","post_url":"/blog/lang/th/dow-theory-and-transport-confirmation#q-confirm_by_year","columns":["year","signal_count","confirmed_count","confirmed_pct"],"rows":[{"year":2004,"signal_count":22,"confirmed_count":19,"confirmed_pct":86.4},{"year":2005,"signal_count":15,"confirmed_count":15,"confirmed_pct":100},{"year":2006,"signal_count":53,"confirmed_count":38,"confirmed_pct":71.7},{"year":2007,"signal_count":38,"confirmed_count":32,"confirmed_pct":84.2},{"year":2008,"signal_count":6,"confirmed_count":6,"confirmed_pct":100},{"year":2009,"signal_count":43,"confirmed_count":40,"confirmed_pct":93},{"year":2010,"signal_count":44,"confirmed_count":41,"confirmed_pct":93.2},{"year":2011,"signal_count":34,"confirmed_count":31,"confirmed_pct":91.2},{"year":2012,"signal_count":39,"confirmed_count":10,"confirmed_pct":25.6},{"year":2013,"signal_count":64,"confirmed_count":59,"confirmed_pct":92.2},{"year":2014,"signal_count":39,"confirmed_count":39,"confirmed_pct":100},{"year":2015,"signal_count":12,"confirmed_count":4,"confirmed_pct":33.3},{"year":2016,"signal_count":33,"confirmed_count":21,"confirmed_pct":63.6},{"year":2017,"signal_count":70,"confirmed_count":53,"confirmed_pct":75.7},{"year":2018,"signal_count":30,"confirmed_count":19,"confirmed_pct":63.3},{"year":2019,"signal_count":37,"confirmed_count":17,"confirmed_pct":45.9},{"year":2020,"signal_count":30,"confirmed_count":27,"confirmed_pct":90},{"year":2021,"signal_count":47,"confirmed_count":35,"confirmed_pct":74.5},{"year":2022,"signal_count":11,"confirmed_count":7,"confirmed_pct":63.6},{"year":2023,"signal_count":29,"confirmed_count":27,"confirmed_pct":93.1},{"year":2024,"signal_count":50,"confirmed_count":40,"confirmed_pct":80},{"year":2025,"signal_count":29,"confirmed_count":22,"confirmed_pct":75.9},{"year":2026,"signal_count":26,"confirmed_count":23,"confirmed_pct":88.5}],"shape":"ranking","sql":"WITH\npx AS\n(\n    SELECT\n        ticker,\n        date,\n        toFloat64(max(close)) AS close_px\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker IN ('DIA', 'IYT')\n    GROUP BY ticker, date\n),\njoint AS\n(\n    SELECT\n        date,\n        anyIf(close_px, ticker = 'DIA') AS dia,\n        anyIf(close_px, ticker = 'IYT') AS iyt\n    FROM px\n    GROUP BY date\n    HAVING countIf(ticker = 'DIA') = 1 AND countIf(ticker = 'IYT') = 1\n),\nrolled AS\n(\n    SELECT\n        date,\n        dia,\n        iyt,\n        row_number() OVER (ORDER BY date) AS i,\n        count() OVER () AS n,\n        max(dia) OVER (ORDER BY date ROWS BETWEEN 62 PRECEDING AND 1 PRECEDING) AS dia_prior_high,\n        max(iyt) OVER (ORDER BY date ROWS BETWEEN 62 PRECEDING AND 1 PRECEDING) AS iyt_prior_high\n    FROM joint\n),\nmarked AS\n(\n    SELECT\n        date,\n        i,\n        n,\n        if(i > 62 AND dia > dia_prior_high, 1, 0) AS dia_signal,\n        if(i > 62 AND iyt > iyt_prior_high, 1, 0) AS iyt_signal\n    FROM rolled\n),\nscanned AS\n(\n    SELECT\n        date,\n        i,\n        n,\n        dia_signal,\n        indexOf(groupArray(iyt_signal) OVER (ORDER BY date ROWS BETWEEN CURRENT ROW AND 20 FOLLOWING), 1) - 1 AS confirm_lag\n    FROM marked\n)\nSELECT\n    toYear(date)                                        AS year,\n    count()                                             AS signal_count,\n    countIf(confirm_lag >= 0)                           AS confirmed_count,\n    round(100 * countIf(confirm_lag >= 0) / count(), 1) AS confirmed_pct\nFROM scanned\nWHERE dia_signal = 1 AND i + 20 <= n\nGROUP BY year\nORDER BY year","computed_at":"2026-09-28T15:33:30.324345+00:00","elapsed":0.088268289}