STRASMORE/EXPLORE 3,127 QUERIES

quality_screen

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-10-06, from high-dividend-us-stocks-for-indian-investors.

as of ranking 11×4read in context →
quality_screen — 11 rows by 4 columns, computed from US exchange, SIP and OPRA data.
tickerpayout_pctworst_yoy_pctgrowth_pct
T44.3-35-46.6
IBM59.20.62.4
VZ901.97.9
KO63.12.421.4
CSCO49.62.510.9
CVX67.12.928.8
PG63.33.522.8
MO89.93.518.2
JNJ60.54.522.7
ABBV240.44.726.2
PEP75.85.532.4
Rows × columns
11 × 4
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 quality_screen, derived from the stored result.
ColumnTypeRangeNotes
ticker text 11 distinct values (ABBV, CSCO, CVX…)
payout_pct number 44.3 to 240.4 percent
worst_yoy_pct number -35 to 5.5 percent
growth_pct number -46.6 to 32.4 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
basket AS
(
    SELECT
        ticker,
        ex_dividend_date,
        max(toFloat64(cash_amount)) AS amt
    FROM global_markets.stocks_dividends
    WHERE ticker IN ('ABBV','CSCO','CVX','IBM','JNJ','KO','MO','PEP','PG','T','VZ','XOM')
      AND frequency IN (4, 12)
      AND ex_dividend_date >= toDate('2020-01-01')
    GROUP BY ticker, ex_dividend_date
),
annual AS
(
    SELECT
        ticker,
        toYear(ex_dividend_date) AS div_year,
        sum(amt)                 AS annual_div
    FROM basket
    WHERE ex_dividend_date < toStartOfYear(today())
    GROUP BY ticker, div_year
),
yoy AS
(
    SELECT
        ticker,
        div_year,
        annual_div,
        lagInFrame(annual_div) OVER (PARTITION BY ticker ORDER BY div_year
                                     ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_div
    FROM annual
),
ttm AS
(
    SELECT
        ticker,
        sum(amt) AS div_ttm
    FROM basket
    WHERE ex_dividend_date >= today() - 365
    GROUP BY ticker
),
eps AS
(
    SELECT
        ticker,
        argMax(toFloat64(earnings_per_share), date) AS eps_ttm
    FROM global_markets.stocks_ratios
    WHERE ticker IN ('ABBV','CSCO','CVX','IBM','JNJ','KO','MO','PEP','PG','T','VZ','XOM')
      AND date >= today() - 120
    GROUP BY ticker
)
SELECT
    h.ticker                                AS ticker,
    round(100 * t.div_ttm / e.eps_ttm, 1)   AS payout_pct,
    h.worst_yoy_pct                         AS worst_yoy_pct,
    h.growth_pct                            AS growth_pct
FROM
(
    SELECT
        ticker,
        round(min(100 * (annual_div / prev_div - 1)), 1) AS worst_yoy_pct,
        round(100 * (argMax(annual_div, div_year) / argMin(annual_div, div_year) - 1), 1) AS growth_pct
    FROM yoy
    WHERE prev_div > 0
    GROUP BY ticker
) AS h
INNER JOIN ttm AS t ON t.ticker = h.ticker
INNER JOIN eps AS e ON e.ticker = h.ticker
WHERE e.eps_ttm > 0
ORDER BY worst_yoy_pct ASC
⌘/Ctrl + Enter

Work with this data in your AI assistant

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