STRASMORE/EXPLORE 2,749 QUERIES

confirmation_lag

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-09-28, from dow-theory-and-transport-confirmation.

as of ranking 5×3read in context →
confirmation_lag — 5 rows by 3 columns, computed from US exchange, SIP and OPRA data.
lag_bucketsignal_countshare_pct
0 ถึง 2 วัน40564.8
3 ถึง 5 วัน7411.8
6 ถึง 10 วัน579.1
11 ถึง 15 วัน477.5
16 ถึง 20 วัน426.7
Rows × columns
5 × 3
Computed
Completeness
No missing values
Source
US exchange, SIP and OPRA market data
Licence
Strasmore terms · free, no signup
Formats
JSON · CSV · the SQL below

What each column holds

Column definitions for confirmation_lag, derived from the stored result.
ColumnTypeRangeNotes
lag_bucket text 5 distinct values
signal_count number 42 to 405 count
share_pct number 6.7 to 64.8 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(max(close)) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('DIA', 'IYT')
    GROUP BY ticker, date
),
joint AS
(
    SELECT
        date,
        anyIf(close_px, ticker = 'DIA') AS dia,
        anyIf(close_px, ticker = 'IYT') AS iyt
    FROM px
    GROUP BY date
    HAVING countIf(ticker = 'DIA') = 1 AND countIf(ticker = 'IYT') = 1
),
rolled AS
(
    SELECT
        date,
        dia,
        iyt,
        row_number() OVER (ORDER BY date) AS i,
        count() OVER () AS n,
        max(dia) OVER (ORDER BY date ROWS BETWEEN 62 PRECEDING AND 1 PRECEDING) AS dia_prior_high,
        max(iyt) OVER (ORDER BY date ROWS BETWEEN 62 PRECEDING AND 1 PRECEDING) AS iyt_prior_high
    FROM joint
),
marked AS
(
    SELECT
        date,
        i,
        n,
        if(i > 62 AND dia > dia_prior_high, 1, 0) AS dia_signal,
        if(i > 62 AND iyt > iyt_prior_high, 1, 0) AS iyt_signal
    FROM rolled
),
scanned AS
(
    SELECT
        i,
        n,
        dia_signal,
        indexOf(groupArray(iyt_signal) OVER (ORDER BY date ROWS BETWEEN CURRENT ROW AND 20 FOLLOWING), 1) - 1 AS confirm_lag
    FROM marked
),
confirmed_signals AS
(
    SELECT
        confirm_lag,
        count() OVER () AS n_confirmed
    FROM scanned
    WHERE dia_signal = 1 AND i + 20 <= n AND confirm_lag >= 0
)
SELECT
    multiIf(confirm_lag <= 2, '0 ถึง 2 วัน',
            confirm_lag <= 5, '3 ถึง 5 วัน',
            confirm_lag <= 10, '6 ถึง 10 วัน',
            confirm_lag <= 15, '11 ถึง 15 วัน',
            '16 ถึง 20 วัน')                        AS lag_bucket,
    count()                                         AS signal_count,
    round(100 * count() / any(n_confirmed), 1)      AS share_pct
FROM confirmed_signals
GROUP BY lag_bucket
ORDER BY min(confirm_lag)
⌘/Ctrl + Enter

Work with this data in your AI assistant

Opens ready to query, with this page's data. Free, no account.