STRASMORE/EXPLORE 2,648 QUERIES

total_return_wedge

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-26, from what-stocks-are-in-the-dax.

as of ranking 10×4read in context →
total_return_wedge — 10 rows by 4 columns, computed from US exchange, SIP and OPRA data.
yearprice_return_pctdividend_pcttotal_return_pct
201612.041.6913.74
201730.21.5931.79
2018-11.421.47-9.95
201935.11.6936.79
2020-4.691.27-3.43
20218.411.7510.16
2022-27.021.84-25.18
202348.672.1550.82
202463.911.5965.5
2025-0.091.081
Rows × columns
10 × 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 total_return_wedge, derived from the stored result.
ColumnTypeRangeNotes
year text 10 distinct values (2016, 2017, 2018…)
price_return_pct number -27.02 to 63.91 percent
dividend_pct number 1.08 to 2.15 percent
total_return_pct number -25.18 to 65.5 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 yearly AS
(
    SELECT
        toYear(date)                   AS fiscal_y,
        argMin(toFloat64(close), date) AS first_close,
        argMax(toFloat64(close), date) AS last_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SAP'
      AND date >= '2016-01-01'
      AND date <  '2026-01-01'
    GROUP BY fiscal_y
),
cash AS
(
    SELECT
        toYear(ex_dividend_date)    AS fiscal_y,
        sum(toFloat64(cash_amount)) AS dividends
    FROM global_markets.stocks_dividends
    WHERE ticker = 'SAP'
      AND ex_dividend_date >= '2016-01-01'
      AND ex_dividend_date <  '2026-01-01'
    GROUP BY fiscal_y
)
SELECT
    toString(y.fiscal_y)                                                         AS year,
    round(100 * (y.last_close - y.first_close) / y.first_close, 2)               AS price_return_pct,
    round(100 * c.dividends / y.first_close, 2)                                  AS dividend_pct,
    round(100 * (y.last_close - y.first_close + c.dividends) / y.first_close, 2) AS total_return_pct
FROM yearly AS y
LEFT JOIN cash AS c ON c.fiscal_y = y.fiscal_y
ORDER BY year
⌘/Ctrl + Enter

Work with this data in your AI assistant

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

More from this analysiswhat-stocks-are-in-the-dax
dividend_cadence ranking 10×3 → cap_illustration ranking 8×4 → Top 25 weekly-options underlyings by distinct contracts traded, with expiration weekdays ranking 25×4 → Annualized volatility vs total return, 25 large caps, calmest to wildest (~2 years) ranking 25×3 → SPY options median spread by expiration date, near-the-money strikes only ranking 25×4 → In-sample rank versus out-of-sample Sharpe, same 24 cells ranking 24×4 → See all 2,648 queries →