Leveraged ETFs: The Compounding Problem#

Billions Flowed Into New Leveraged ETFs Last Year. Now They’re in Free Fall. WSJ - March 20, 2025 Wall Street’s newest roller-coaster trade, the leveraged single-stock ETF, is plunging.

The Hidden Cost of Playing the Stock Market’s Slot Machine WSJ - Oct 3, 2025 Superpowered ETFs make money fast, but cost more than you know

How Booming Leveraged Funds Can Incinerate Your Money
WSJ - Dec 11, 2024 Variants soon might include long-short funds

How Index‑Fund Investing Turned Into an Extreme Sport
WSJ - July 11, 2025
Exchange-traded funds are becoming far more concentrated, amplifying risks.

import pandas as pd
import numpy as np
import datetime

import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = (8,4)
plt.rcParams['font.size'] = 12
plt.rcParams['legend.fontsize'] = 12

from cmds.portfolio import performanceMetrics, tailMetrics, maximumDrawdown, get_ols_metrics

The Math Behind the Problem#

Traditional Leverage vs. Leveraged ETFs#

Traditional leverage: Borrow money once, hold the position $\(r_{0,T}^{\text{Traditional}} = w \cdot [(1+r_1)(1+r_2)\cdots(1+r_T) - 1]\)$

Leveraged ETF: Rebalance the leverage daily
$\(r_{0,T}^{\text{LETF}} = (1+w \cdot r_1)(1+w \cdot r_2)\cdots(1+w \cdot r_T) - 1\)$

The Key Insight#

These are NOT the same!
Daily rebalancing creates compounding effects that can work against you, especially during volatile periods.

A Simple Example#

Let’s see this in action with 3x leverage over 2 days:

Traditional 3x leverage:
$\(3r_1 + 3r_2 + 3r_1r_2\)$

3x Leveraged ETF:
$\(3r_1 + 3r_2 + 9r_1r_2\)$

The difference: \(6r_1r_2\)

When returns have opposite signs (common in volatile markets), this difference hurts the LETF.

Illustration#

Suppose the following…

leverage = 3
r1 = .1
r2 = -.05
cumret = (1+r1)*(1+r2) - 1
leveraged_cumret = leverage * cumret
letf_cumret = (1+leverage*r1)*(1+leverage*r2) - 1
diff = -(leverage*(leverage-1)) * r1*r2

df = pd.DataFrame([leverage, r1, r2, cumret, leveraged_cumret, letf_cumret, diff], index=['Leverage', 'r1', 'r2', 'Cumulative Return', 'Levered Cumulative Return', 'LETF Cumulative Return', 'Difference'],columns=['illustration'])
display(df.style.format('{:.1%}'))
  illustration
Leverage 300.0%
r1 10.0%
r2 -5.0%
Cumulative Return 4.5%
Levered Cumulative Return 13.5%
LETF Cumulative Return 10.5%
Difference 3.0%

What just happened?

The LETF lost 3% due to daily rebalancing! This is the volatility drag effect.

The Bottom Line#

Leveraged ETFs are NOT long-term investments

  • Daily rebalancing creates compounding drag
  • Volatility amplifies the decay effect
  • Time works against you - the longer you hold, the worse it gets
  • Use case: Short-term tactical trades, not buy-and-hold

The math doesn’t lie: \((1+3r_1)(1+3r_2) \neq 1 + 3(r_1 + r_2)\) when \(r_1 \cdot r_2 \neq 0\)

Levered SPX#

Let’s examine actual leveraged ETFs to see this effect in practice.

ETFs we’re analyzing:

  • UPRO: 3x Long S&P 500

  • SPXU: 3x Inverse S&P 500

  • SPY: The underlying S&P 500 ETF

FREQ = 252

filepath_data = '../data/letf_data.xlsx'
info = pd.read_excel(filepath_data,sheet_name='descriptions')
info.set_index('ticker',inplace=True)
info.rename(columns={'trailingAnnualDividendYield':'dvd yield'},inplace=True)


rets = pd.read_excel(filepath_data,sheet_name='total returns')
rets.set_index('date',inplace=True)
rets.dropna(inplace=True)
info.loc[['SPY','UPRO','SPXU'],:].style.format({'volume':'{:.0e}','totalAssets':'{:.0e}','dvd yield':'{:.0%}'},na_rep='')
  shortName quoteType currency volume totalAssets longBusinessSummary
ticker            
SPY SPDR S&P 500 ETF USD 6e+07 6e+11 The trust seeks to achieve its investment objective by holding a portfolio of the common stocks that are included in the index, with the weight of each stock in the portfolio substantially corresponding to the weight of such stock in the index.
UPRO ProShares UltraPro S&P 500 ETF USD 4e+06 5e+09 The fund invests in financial instruments that ProShare Advisors believes, in combination, should produce daily returns consistent with the Daily Target. The index is designed to measure the performance of 500 of the largest companies listed and domiciled in the U.S. Under normal circumstances, the fund will obtain leveraged exposure to at least 80% of its total assets in components of the index or in instruments with similar economic characteristics. The fund is non-diversified.
SPXU ProShares UltraPro Short S&P500 ETF USD 2e+07 5e+08 The fund invests in financial instruments that ProShare Advisors believes, in combination, should produce daily returns consistent with the Daily Target. The index is designed to measure the performance of the 500 largest companies listed and domiciled in the U.S. Under normal circumstances, the fund will obtain inverse leveraged exposure to at least 80% of its total assets in components of the index or in instruments with similar economic characteristics. The fund is non-diversified.
spy = rets[['SPY','UPRO','SPXU']].copy()
spy['SPY 3x'] = 3 * spy['SPY']
spy['SPY -3x'] = -3 * spy['SPY']

spy_cumrets = ((spy+1).cumprod()-1)
spy_cumrets.plot(logy=False)
plt.show()
../_images/e896f3b9fde03280912f808b3d3195b3a997d987b5d933e93b3b63d7c4510c55.png

Key insight: Look at how the leveraged ETFs track against theoretical 3x performance.

cumrets = (1+spy).cumprod()
cumrets[['SPY 3x','UPRO']].plot(title='Positive Levered S&P')
plt.show()
../_images/7a26cd0d7a280f5eaefa5335c33c64c6f467b05f1426f213fd4b71e27b500662.png

What we’re seeing: The leveraged ETFs consistently underperform their theoretical targets during volatile periods.

cumrets[['SPY -3x','SPXU']].plot(title='Inverse Levered S&P')
plt.show()
../_images/5708d29a024e1043e52d944b7d2d980727f1d2cef0fabb5aaa5f0bd3be6e51a4.png

The decay effect: Over time, leveraged ETFs lose value relative to simple leveraged positions due to daily rebalancing.

Performance Breakdown#

cumrets_decay = pd.DataFrame((cumrets['UPRO'] / cumrets['SPY 3x']), columns=['+3x LETF-to-bench'])
cumrets_decay['-3x LETF-to-bench'] = (cumrets['SPXU'] / cumrets['SPY -3x'])

cumrets_decay.plot(title='Value of LETF divided by Levered SPY');
../_images/f75dafc6cecacaf4faadca42d801bedecf1084cf0f1b5fd523eeab5c08219744.png

Risk-Return Analysis#

performanceMetrics(spy,annualization=FREQ).style.format("{:.1%}")
  Mean Vol Sharpe Min Max
SPY 23.4% 17.3% 134.7% -5.9% 10.5%
UPRO 60.2% 50.1% 120.3% -17.4% 28.0%
SPXU -62.5% 50.1% -124.7% -28.0% 18.2%
SPY 3x 70.1% 52.0% 134.7% -17.6% 31.5%
SPY -3x -70.1% 52.0% -134.7% -31.5% 17.6%
maximumDrawdown(spy).style.format({'Max Drawdown': "{:.1%}","Peak": "{:%Y-%m-%d}",'Bottom': "{:%Y-%m-%d}",'Recover':"{:%Y-%m-%d}"},na_rep='')
  Max Drawdown Peak Bottom Recover Duration (to Recover)
SPY -19.0% 2025-02-19 2025-04-08 2025-06-27 128 days 00:00:00
UPRO -49.1% 2024-12-06 2025-04-08
SPXU -74.8% 2023-10-27 2025-06-27
SPY 3x -48.7% 2025-02-19 2025-04-08
SPY -3x -78.2% 2023-10-27 2025-06-27
get_ols_metrics(spy['SPY'],spy,annualization=12).drop(columns=['Treynor Ratio','Info Ratio']).style.format('{:.1%}')
  alpha SPY r-squared
SPY -0.0% 100.0% 100.0%
UPRO -0.3% 288.0% 99.5%
SPXU 0.2% -287.4% 98.9%
SPY 3x -0.0% 300.0% 100.0%
SPY -3x 0.0% -300.0% 100.0%

LETF for Single-Name Stock#

rets['NVDA 2x'] = 2 * rets['NVDA']
rets['NVDA -2x'] = -2 * rets['NVDA']

rets['SPY 2x'] = 2 * rets['SPY']
rets['SPY -2x'] = -2 * rets['SPY']
nvda = rets[['NVDA','NVDL','NVDQ','NVDA 2x','NVDA -2x']]
nvda_cumrets = ((nvda+1).cumprod()-1)
nvda_cumrets.plot(logy=False)
plt.show()
../_images/ccabd2a20f035b4e4cb825fd3cbb7fdd8eea4a9552627265f0755afc5e1f2bc6.png
nvda_cumrets_decay = pd.DataFrame((nvda_cumrets['NVDL'] / nvda_cumrets['NVDA 2x']), columns=['+2x'])
nvda_cumrets_decay['-2x'] = (nvda_cumrets['NVDQ'] / nvda_cumrets['NVDA -2x'])

nvda_cumrets_decay.plot(title='Value of LETF divided by Levered SPY');
../_images/993ecd18f75c6f1fe58589e805705e6e49a76fc39575bbe72bf94652bd90df0e.png
get_ols_metrics(nvda['NVDA'],nvda,annualization=FREQ).drop(columns=['Treynor Ratio','Info Ratio']).style.format('{:.1%}')
  alpha NVDA r-squared
NVDA -0.0% 100.0% 100.0%
NVDL -27.4% 195.9% 99.0%
NVDQ -2.7% -199.6% 99.2%
NVDA 2x -0.0% 200.0% 100.0%
NVDA -2x 0.0% -200.0% 100.0%