{"slug":"buffer-etfs-defined-outcome","qid":"cumulative_drag","label":"Compounding the index against the buffered payoff, net of a 0.79% fee","post_title":"How Buffer ETFs Work: Caps and Resets","post_url":"/blog/buffer-etfs-defined-outcome#q-cumulative_drag","columns":["outcome_year","index_cum_pct","fund_net_cum_pct"],"rows":[{"outcome_year":"2014","index_cum_pct":12.4,"fund_net_cum_pct":11.5},{"outcome_year":"2015","index_cum_pct":11.5,"fund_net_cum_pct":10.6},{"outcome_year":"2016","index_cum_pct":24,"fund_net_cum_pct":22},{"outcome_year":"2017","index_cum_pct":46.9,"fund_net_cum_pct":39.2},{"outcome_year":"2018","index_cum_pct":36.6,"fund_net_cum_pct":38.1},{"outcome_year":"2019","index_cum_pct":75.9,"fund_net_cum_pct":57.6},{"outcome_year":"2020","index_cum_pct":102.4,"fund_net_cum_pct":79.8},{"outcome_year":"2021","index_cum_pct":160.7,"fund_net_cum_pct":105.2},{"outcome_year":"2022","index_cum_pct":108.8,"fund_net_cum_pct":81.4},{"outcome_year":"2023","index_cum_pct":160.6,"fund_net_cum_pct":106.9},{"outcome_year":"2024","index_cum_pct":223.2,"fund_net_cum_pct":136.1},{"outcome_year":"2025","index_cum_pct":276.8,"fund_net_cum_pct":169.3}],"shape":"ranking","sql":"WITH yearly AS\n(\n    SELECT\n        toString(toYear(date)) AS outcome_year,\n        round((toFloat64(argMax(close, date)) / toFloat64(argMin(close, date)) - 1) * 100, 1) AS index_return_pct\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n      AND date >= '2014-01-01'\n      AND date <  '2026-01-01'\n    GROUP BY toYear(date)\n),\noutcomes AS\n(\n    SELECT\n        outcome_year,\n        1.0 + (index_return_pct / 100) AS index_growth,\n        (1.0 + (multiIf(index_return_pct >  15.0, 15.0,\n                        index_return_pct >=  0.0, index_return_pct,\n                        index_return_pct >= -9.0, 0.0,\n                        index_return_pct + 9.0) / 100)) * (1.0 - 0.0079) AS fund_growth\n    FROM yearly\n)\nSELECT\n    outcome_year,\n    round((exp(sum(log(index_growth)) OVER (ORDER BY outcome_year ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) - 1) * 100, 1) AS index_cum_pct,\n    round((exp(sum(log(fund_growth))  OVER (ORDER BY outcome_year ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) - 1) * 100, 1) AS fund_net_cum_pct\nFROM outcomes\nORDER BY outcome_year","computed_at":"2026-08-12T15:42:18.414953+00:00","elapsed":0.003247657}