← Back to blog index · 2026-05-10

I Backtested 5.5 Years of Bitfinex Funding — Real Numbers Across 58 OOS Windows

Complete walk-forward backtest from 2020-11 to 2026-04. 58 OOS 90-day windows, realistic fill model, prepayment hazard. Median ~16% net APY, p5–p95 6.7–27.3%.

I Backtested 5.5 Years of Bitfinex Funding — Real Numbers Across 58 OOS Windows

“What’s the average Bitfinex Funding APY?” — there’s no single answer. Rates change daily, regimes shift yearly, and different strategies produce vastly different results.

I ran a walk-forward backtest using Bitfinex’s 5.5 years of public candle data — to find out what the same strategy would have produced across all that history.

This post is the full results: median APY, p5/p95, regime breakdown. All numbers are net (after Bitfinex’s 15% fee), produced by scripts/realistic_backtest.py against data/history/.

TL;DR

  • fUSD balanced median net APY: 15.7% (p5–p95: 6.7%–27.3%, Sharpe 3.9)
  • fUST balanced median net APY: 16.0% (p5–p95: 9.9%–22.9%, Sharpe 6.1)
  • 58 OOS rolling 90-day windows across calm / bull / bear / storm regimes
  • Includes realistic fill model (queue rank · time decay · depth gate · spike filter) + prepayment hazard
  • Marketing pages quote a deliberately lower band (fUSD 12-15%, fUST 11-13%) — see “conservative estimate” section below

Why Walk-Forward Instead of Single Backtest

99% of “I earn X% APY” claims use a single backtest:

  1. Grab a slice of history (e.g., all of 2024)
  2. Run strategy
  3. Report final return

The problem: massive overfit. If you tune parameters to perform best in 2024, 2025 will likely crash.

Walk-forward instead:

  1. Split data into “train + test” windows (180d train / 90d test)
  2. Calibrate parameters on training window
  3. Evaluate on the unseen test window
  4. Roll the test window forward by 30 days, repeat
  5. Final result: 58 independent OOS evaluations

Each OOS result represents the strategy “not knowing the future” — the realistic condition. The median + distribution of 58 results = real expected performance.

One Chart — Result Distribution

58 OOS net-APY values for fUSD vs fUST balanced preset (λ=1.0 calibrated baseline):

Walk-forward backtest distribution — 58 OOS windows

Observations:

  • Both medians cluster near 16% with overlapping distributions
  • fUSD has wider dispersion — more upside tail (>25% APY) and more downside tail (<8% APY)
  • fUST is tighter — narrower band, higher Sharpe, fewer extreme months
  • The “stablecoin yield = 5%” intuition is far below the median; the “>30% APY” headlines are real but rare (>p95)

Full Preset Comparison

SymbolPresetMedian APYp5p95Sharpe
fUSDsafe14.3%4.2%21.1%4.4
fUSDbalanced15.7%6.7%27.3%3.9
fUSDaggressive15.3%6.8%26.4%3.5
fUSTsafe17.8%6.5%34.5%5.7
fUSTbalanced16.0%9.9%22.9%6.1
fUSTaggressive16.8%9.6%24.4%6.1

(Sharpe = mean / std × √N. Higher Sharpe = same return, less month-to-month noise.)

Two unexpected findings:

  1. fUSD aggressive does not beat balanced (15.3% vs 15.7%). The more aggressive floors push too far out of the actual fill zone — you wait for spikes that don’t arrive often enough.
  2. fUST safe has higher median than balanced (17.8% vs 16.0%) but with a much wider p5/p95 band. The safer floors fill faster and rarely miss; the trade-off is more variance.

Production currently ships balanced for both symbols.

Prepayment-Hazard Sensitivity Band

The model has one key uncertain parameter — borrower prepayment intensity (λ₀). We grid it across 0.5×, 1×, 2×, 4× the calibrated baseline:

λ scalefUSD medianfUST median
0.5×15.7%16.3%
1.0× (calibrated)15.7%16.0%
2.0×15.4%16.3%
4.0×15.7%16.4%

The strategy is robust to prepayment uncertainty — even at 4× the calibrated rate, median APY moves <50 bps. (See Prepayment hazard — the hidden cost of long periods for why this matters.)

Why Marketing Shows a Lower Range

Our marketing pages quote “fUSD 12-15%”, “fUST 11-13%” — below the backtest medians above.

Why:

  1. Backtest ≠ reality: 5.5y history doesn’t guarantee future
  2. Survivorship bias remains: queue rank is approximated from funding_stats deltas, not real order-book replay
  3. Inverse over-promise: under-promise and over-deliver

If live performance hits the marketing range, we win. If it hits the backtest median, that’s a bonus.

Cross-Regime Performance — Storm Is Worst, Not Best

Walk-forward windows span 4 regimes (BTC 30d vol percentile):

  • Calm: vol < 25th percentile
  • Bull: vol 25-75pct, 30d return > 0
  • Bear: vol 25-75pct, 30d return ≤ 0
  • Storm: vol > 75th percentile
RegimefUSD median APYfUST median APYn anchors
Calm17.3%17.3%34/38
Bull15.6%15.8%49/52
Bear13.4%18.2%48/49
Storm8.0%9.6%26/32

This was the most surprising finding — and it inverts a common assumption.

The intuition (“storm = high vol = high funding rates = big yield”) is half-right: spike rates do appear. But spikes are short, and the prepayment hazard model shows borrowers deleverage during the storm, closing positions early. The bot grabs a 25% rate on day 1, the borrower returns on day 4 instead of holding 30 days, and the realised APY collapses.

Calm is where the work happens — steady fills, full hold periods, low cancellations. Stable rates the model can sit on.

Honest Caveats

A few things to be straight about:

  1. 5.5y data ≠ eternity: includes 2020-2021 bull market (funding rate avg 30%), inflating the historical mean. If next 5 years look like 2018-2019 (funding 1-3%), live results will severely underperform.
  2. Fill model uses queue-rank proxy: queue position is estimated from funding_stats borrowed-amount deltas, not real order-book history (Bitfinex doesn’t publish historical book snapshots). The proxy may over- or under-state competition.
  3. Black swans: 5.5y of data has only 1 major event (2022 LUNA collapse) — too few samples to estimate tail risk.
  4. Marketing band still beats Storm regime: if you’re starting in a high-vol week, expect yields below the marketing range until the regime calms.

Honest Caveats

A few things to be straight about:

  1. 5.5y data ≠ eternity: includes 2020-2021 bull market (funding rate avg 30%), inflating the historical mean. If next 5 years look like 2018-2019 (funding 1-3%), live results will severely underperform.
  2. Survivorship bias: I use Bitfinex’s filled candle rates, not “rates I could have grabbed”. Real queue competition may push fill rates below the model.
  3. Black swans: 5.5y of data has only 1 major event (2022 LUNA collapse) — too few samples to estimate tail risk.

Full methodology → docs/strategy_review.md (when repo public)

Where the Code Is

Full backtest code:

  • lending_bot/backtest/fill_model.py — fill model
  • lending_bot/backtest/prepayment_model.py — prepayment hazard
  • lending_bot/backtest/engine.py — walk-forward orchestration
  • scripts/realistic_backtest.py — CLI entry

Will be reproducible after repo open-sources (currently private, 2026 Q3 roadmap).

Try Yieldsforge free for 7 days →


Disclosure: I’m the developer of Yieldsforge. Backtest uses Bitfinex public candle data, 2020-11 to 2026-04. All APY numbers net of 15% Bitfinex fee. Not investment advice; past performance does not guarantee future results.

Want to put your USDT on autopilot?

7-day free trial. No credit card required.

Start free trial