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.
| lag_bucket | signal_count | share_pct |
|---|---|---|
| 0 ถึง 2 วัน | 405 | 64.8 |
| 3 ถึง 5 วัน | 74 | 11.8 |
| 6 ถึง 10 วัน | 57 | 9.1 |
| 11 ถึง 15 วัน | 47 | 7.5 |
| 16 ถึง 20 วัน | 42 | 6.7 |
- Rows × columns
- 5 × 3
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
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)
ใช้ข้อมูลนี้ในผู้ช่วย AI ของคุณ
เปิดพร้อมคิวรีได้ทันที พร้อมข้อมูลของหน้านี้ ฟรี ไม่ต้องมีบัญชี