← 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%.
“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:
- Grab a slice of history (e.g., all of 2024)
- Run strategy
- Report final return
The problem: massive overfit. If you tune parameters to perform best in 2024, 2025 will likely crash.
Walk-forward instead:
- Split data into “train + test” windows (180d train / 90d test)
- Calibrate parameters on training window
- Evaluate on the unseen test window
- Roll the test window forward by 30 days, repeat
- 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):

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
| Symbol | Preset | Median APY | p5 | p95 | Sharpe |
|---|---|---|---|---|---|
| fUSD | safe | 14.3% | 4.2% | 21.1% | 4.4 |
| fUSD | balanced | 15.7% | 6.7% | 27.3% | 3.9 |
| fUSD | aggressive | 15.3% | 6.8% | 26.4% | 3.5 |
| fUST | safe | 17.8% | 6.5% | 34.5% | 5.7 |
| fUST | balanced | 16.0% | 9.9% | 22.9% | 6.1 |
| fUST | aggressive | 16.8% | 9.6% | 24.4% | 6.1 |
(Sharpe = mean / std × √N. Higher Sharpe = same return, less month-to-month noise.)
Two unexpected findings:
- 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.
- 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:
| λ scale | fUSD median | fUST 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:
- Backtest ≠ reality: 5.5y history doesn’t guarantee future
- Survivorship bias remains: queue rank is approximated from
funding_statsdeltas, not real order-book replay - 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
| Regime | fUSD median APY | fUST median APY | n anchors |
|---|---|---|---|
| Calm | 17.3% | 17.3% | 34/38 |
| Bull | 15.6% | 15.8% | 49/52 |
| Bear | 13.4% | 18.2% | 48/49 |
| Storm | 8.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:
- 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.
- Fill model uses queue-rank proxy: queue position is estimated from
funding_statsborrowed-amount deltas, not real order-book history (Bitfinex doesn’t publish historical book snapshots). The proxy may over- or under-state competition. - Black swans: 5.5y of data has only 1 major event (2022 LUNA collapse) — too few samples to estimate tail risk.
- 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:
- 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.
- 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.
- 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 modellending_bot/backtest/prepayment_model.py— prepayment hazardlending_bot/backtest/engine.py— walk-forward orchestrationscripts/realistic_backtest.py— CLI entry
Will be reproducible after repo open-sources (currently private, 2026 Q3 roadmap).
Related Reading
- Multi-bucket vs single — why diversification wins
- Per-symbol floors — why fUSD ≠ fUST
- Prepayment hazard — the hidden cost of long periods
- Building Yieldsforge — the story
- Why Bitfinex Funding beats DeFi yields — the hub
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.