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

2,170 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.
Covered Call vs Cash-Secured Put
Both positions at four moments: entry, three weeks in, the SPY high, and the June diptable · 2026-07-31 · 4×5 What each strike paid on May 1, 2026: SPY June 18 calls and puts side by sideranking · 2026-07-31 · 8×3Preview: 8 ranked values, largest first. Covered call vs cash-secured put: profit and loss per share, same strike, same expiryseries · 2026-07-31 · 29×3Preview: a 16-point series, ending higher.
Covered Calls: Income on Your Shares
The same covered call at entry, the SPY peak, the dip, and the final sessiontable · 2026-07-16 · 4×5 Buy-and-hold SPY vs the covered call, per-share value over 7 weeksseries · 2026-07-16 · 31×3Preview: a 16-point series, ending higher. The $740 call you sold, daily value over its 7-week lifeseries · 2026-07-16 · 31×2Preview: a 16-point series, ending higher.
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
$