Skip to content
BiVelio joins the NVIDIA Inception Program NVIDIA Inception Program BiVelio is part of the ElevenLabs Grants Program ElevenLabs Grants

Research

Methodology

The leveraged ETF articles and the Modeler come from the same engine (letf_lab): the same data, the same synthetic funds and the same protocol; the Hyperliquid article comes from its own line of work, with its own data. This page sums up how each piece works.

Data

We use public daily series, downloaded one at a time and stored in our own cache:

  • S&P 500 with dividends since 1928. The price index (^GSPC) with Robert Shiller's monthly dividends until 1988, and the total return index (^SP500TR) and SPY after that. Before 1957 it's the 90-stock index.
  • Nasdaq-100 with dividends since October 1985. The ^NDX with a constant dividend of 0.8% a year until 1999, and QQQ after that.
  • Interest rates. The 3-month Treasury bill (FRED: TB3MS and DTB3; NBER before 1934) and the cost of financing the leverage: call money until 1954 (NBER) and the federal funds rate after that (FEDFUNDS and DFF), with a one-month lag.
  • Real leveraged ETFs (UPRO, TQQQ and SOXL), to calibrate what leverage really costs.
  • Other sources used in the series. Semiconductors (^SOX and SOXX) and the VIX (^VIX) in article 1; the Kenneth R. French Data Library in article 2; Cboe and CFE VIX indexes and futures in article 4; stock borrow data (iBorrowDesk, from IBKR) in articles 4 and 6; the public Hyperliquid, Binance and Bybit APIs in article 5. The Modeler also uses the ECB's €STR and the New York Fed's SOFR.

Yahoo Finance closes are used to compute results and charts; they're not redistributed or offered for download.

Synthetic leveraged funds

A 3x ETF promises three times the index's daily return and rebalances every day. To study it before it existed, we rebuild it session by session:

Rfund  =  rT-bill  +  L (Rindex−rfunding)  −  ∣L∣ sswap+c252R_{\text{fund}} \;=\; r_{\text{T-bill}} \;+\; L\,\big(R_{\text{index}} - r_{\text{funding}}\big) \;-\; \frac{|L|\,s_{\text{swap}} + c}{252}
Each day, the fund earns interest on its cash, gains the leverage times what the index returns above the cost of financing, and pays its daily share of costs. Rfund is the fund's return that day, L the leverage (3 in a 3x), s the annual swap spread and c the ETF's annual expense ratio; the Rs are returns and the rs are interest rates.

Everything is daily: index is the day's total return (with dividends), T-bill and funding are that day's rates, and annual costs are spread over 252 sessions. The swap spread is calibrated so that the synthetic 3x tracks the real 3x (UPRO on the S&P 500, TQQQ on the Nasdaq-100); the expense ratio for each leverage is that of its real ETF. If the fund loses 100% in a day, it's gone: whoever held it loses that part.

Strategy protocol

  • Signal at the close, order at the next close. A rule sees today's close and trades at tomorrow's close: it never uses information it wouldn't have had.
  • Transaction costs per unit of portfolio traded (5 basis points by default).
  • Cash earns the T-bill rate. Out of the market, the money isn't sitting idle.
  • Gayed and Bilello's rule (LRS) computes its 200-session moving average on the index with dividends, as in their 2016 paper.

Under this protocol, the 3x LRS on the S&P 500 has returned 17.4% a year since 1938, with a maximum drawdown of −80.0%. The Modeler's tests check that its engine reproduces that figure with the synthetic 3x until UPRO's launch (2009) and the real ETF after that.

Simulated worlds

There's only one history. To find out how much of a result is luck, we rerun the strategies on thousands of alternative histories generated in several ways, each with its own assumptions:

Historical bootstrap
Chunks of real history (a year long on average), reshuffled. It keeps crashes, streaks and trends.
GJR-GARCH
Volatility that clusters and rises more after declines, with the index's own daily shocks.
Calm/crisis regimes
Two alternating states, estimated from history; how often crises happen is adjustable.
Diffusion with crashes
Normal days plus crashes of a chosen frequency, size and duration: stress tests.
Custom
Constant return and volatility, with normal days or fat tails.
Real crises
The path the market followed in 1929–32, 1973–74, 1987, 2000–02, 2008, 2020 or 2022, or over a chosen range of months. Replays end no later than the last month-end close that's at least a month old: the Modeler doesn't show the recent position of any rule.

You can try them all in the Modeler.

Accounting for the search

If you test many rules on the same history, some will look good by pure chance. That's why each family of variants is evaluated as a whole, with tests that correct for multiple comparisons (for example, Hansen's SPA test or the Romano–Wolf procedure, on a paired stationary block bootstrap), and the confirmatory studies (articles 4, 5 and 6) are preregistered before the confirmatory tests, declaring what had already been seen.

Limits

  • Before each ETF's launch, the fund is a reconstruction: faithful in its mechanics, not in every detail.
  • Taxes and each broker's fees aren't included.
  • Simulated worlds are models: each one captures some features of the market and leaves others out.
  • In the simulated worlds, ½ Kelly starts from the premium over all of real history and updates it with each simulated session: in a world very different from history, it adapts slowly.
  • Yahoo Finance prices are used for calculations; the Modeler doesn't return daily series (the real path is drawn with weekly or monthly closes, and chosen dates are rounded to whole months).
  • Past performance, actual or simulated, does not guarantee future results.

Code and reproducibility

Our engine (letf_lab) is written in Python. The Modeler uses that same engine, and its tests check that it reproduces the figures in Research's reports.

Our engine's code is on GitHub.