STRASMORE/EXPLORE 2,173 QUERIES 22Y EQUITIES · 12Y OPTIONS

2,173 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

Covered Call ETFs: the Real Tradeoff
Three years of total return, split into price change and distributions: July 2023 to June 2026table · 2026-08-01 · 8×7 Total return by calendar year: a Nasdaq index fund vs a Nasdaq covered call fundranking · 2026-08-01 · 4×3Preview: 4 ranked values, smallest first. Price path indexed to 100: two index funds and their covered call counterparts, month endsseries · 2026-08-01 · 36×5Preview: a 16-point series, roughly flat.
Three years of total return, split into price change and distributions: July 2023 to June 2026

Three years of total return, split into price change and distributions: July 2023 to June 2026

most recentas of table 8×7read in context →
Three years of total return, split into price change and distributions: July 2023 to June 2026 — 8 rows by 7 columns, computed from US exchange, SIP and OPRA data.
tickerstart_priceend_priceprice_return_pctdistribution_return_pcttotal_return_pctpayments
QQQ369.95735.7698.92.4101.213
SPY442.7746.3268.64.973.412
JEPQ48.0761.4527.834.762.635
SPYI49.7753.16.736.843.536
QYLD17.7618.433.736.139.836
XYLD41.0740.81-0.631.530.935
JEPI54.8156.493.123.726.835
RYLD17.9315.99-10.832.121.336
the exact SQL behind every number
WITH px AS (
    SELECT ticker,
           argMin(close, window_start) AS start_price,
           argMax(close, window_start) AS end_price
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('QYLD', 'XYLD', 'RYLD', 'JEPI', 'JEPQ', 'SPYI', 'QQQ', 'SPY')
      AND toDate(toTimeZone(window_start, 'America/New_York')) BETWEEN toDate('2023-07-03') AND toDate('2026-06-30')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker
),
dv AS (
    SELECT ticker,
           sum(cash_amount) AS distributions,
           count() AS payments
    FROM global_markets.stocks_dividends
    WHERE ticker IN ('QYLD', 'XYLD', 'RYLD', 'JEPI', 'JEPQ', 'SPYI', 'QQQ', 'SPY')
      AND ex_dividend_date BETWEEN toDate('2023-07-03') AND toDate('2026-06-30')
      AND cash_amount > 0
    GROUP BY ticker
)
SELECT px.ticker AS ticker,
       round(px.start_price, 2) AS start_price,
       round(px.end_price, 2) AS end_price,
       round((px.end_price - px.start_price) / px.start_price * 100, 1) AS price_return_pct,
       round(dv.distributions / px.start_price * 100, 1) AS distribution_return_pct,
       round(((px.end_price - px.start_price) + dv.distributions) / px.start_price * 100, 1) AS total_return_pct,
       dv.payments AS payments
FROM px
INNER JOIN dv ON px.ticker = dv.ticker
ORDER BY total_return_pct DESC
$