Historical Simulation
Daily resolution, on measured inputs — Phoenix funding, jitoSOL staking 4.94%, USDC lending 3.69%. The window ends on the last complete month and rolls forward with it.
What this is
A day-by-day replay of the two modes v1 actually has — normal basis and parked — over every day the venue has existed.
The window is short, and that is deliberate. Phoenix's SOL perp began quoting on 2025-11-18, and its funding is the only funding this strategy will ever collect. A longer window is available only by substituting a different venue's funding for Phoenix's, and that substitution does not survive contact with the data: over the 286 days both series cover, Phoenix averaged +1.58% APR while Binance averaged −0.11%, and the two disagree on sign for weeks at a time. Funding is the price of leverage on a particular book, set by which side of that book is crowded. So the honest choice is nine and a half months of the real thing rather than four years of a proxy.
Funding
Phoenix SOL perp, hourly, from inception — /v1/funding/SOL/rates
Staking
jitoSOL 4.94% — verified from the pool's on-chain redemption rate (2.08 bp/epoch × 231 epochs/yr), MEV included, net of commission and Jito's 4% fee
Lending
Kamino main-market USDC 3.69%, the seven-day median of supplyInterestAPY
The result
$100 compounded to $103.93 over the 286 days, and the worst peak-to-trough fall was −0.392%.
Max drawdown
−0.392%
Net APY
5.04% (5.37% gross)
$100 →
$103.93 over 286 days
Days hedged / parked
75.5% / 24.5%
Mode switches
6
Edge vs USDC lending
~135 bps
Worst day 2026-02-03, −0.190%. Worst month 2026-06, −0.103%. Month-end NAV, base 100:
100.23, 100.64, 101.07, 101.10, 101.26, 101.23, 102.46, 102.32, 102.69, 103.93 (2025-11 → 2026-08)
How NAV is allocated
Every figure on this page is run on the allocation the program actually uses — a three-way split, not the two-way margin-and-basis split the simulator defaults to. The 10% redemption buffer is real: its 2% instant tranche sits in raw USDC earning nothing, and the other 8% earns the Kamino lending rate. Margin is a fraction of deployed capital, not of NAV.
Per $100 of NAV in Normal mode:
jitoSOL basis
$81.8
4.94% staking
USDC perp margin
$8.2
0%
Buffer, lent
$8.0
3.69% Kamino
Buffer, raw
$2.0
0%
Every row below is on that allocation, so no correction has to be applied by the reader. Full derivation: whitepaper §V.
These are backtest figures. The "~0%" in the app's regime widget is a live funding snapshot, not a backtest APY.
What Phoenix has actually paid
The venue's whole funding record, aggregated from hourly prints. Mean +1.74% APR, median day +0.87%, positive on 59.3% of days — and it swings hard in both directions:
2025-11
+3.35%
+1.38%
72%
2025-12
+0.92%
0.00%
50%
2026-01
+1.48%
+0.66%
57%
2026-02
−14.06%
−13.90%
3%
2026-03
−3.46%
−3.03%
30%
2026-04
+0.41%
0.00%
43%
2026-05
+12.58%
+13.78%
84%
2026-06
+0.24%
0.00%
43%
2026-07
−0.06%
0.00%
38%
2026-08
+13.51%
+9.64%
88%
This is not a near-zero series and it is not a scaled version of anything. Two months paid better than the whole product's net APY; one month cost more than a year of staking. The drawdown number is what to read here — the vault carried a −14% funding month and February still closed positive, because the short is a hedge rather than the revenue. What it gave back over the window is its own trading: hold switching costs at zero and the worst fall is −0.127%, and the worst day and worst month are both mode changes rather than market days.
Where the yield comes from
Fully hedged, per $100 of NAV per year:
$81.8 of jitoSOL @ 4.94% staking
+$4.04
$8.2 of USDC margin at Phoenix @ 0%
$0.00
$8.0 of redemption buffer, lent @ 3.69%
+$0.30
$2.0 of buffer held raw for instant redemption
$0.00
Funding on the short, at the +4.31% its hedged days averaged
+$3.53
Perp fees, charged per day held
−$0.08
Hedged run rate
+$7.78
That is the rate while the position is on, not the published figure. Read the funding row against the venue table above: the vault collected +4.31% because it parks when funding turns, and the days it sat out averaged −6.83%. Two lines take the run rate to the gross — the vault is only hedged three days in four, and it pays to move:
Hedged run rate, 75.5% of days
+$5.87
Parked at 3.62% — lending, less the instant tranche — 24.5% of days
+$0.89
6 mode switches @ 20 bps
−$1.53
Compounding
+$0.14
Gross
+$5.37
Switching gives back 58% of the funding the vault actually collects — $1.53 against the $2.66 that +4.31% on 75.5% of days is worth blended. That single line is larger than the redemption buffer, the margin haircut and the perp fees put together, and it is the reason the two views of funding below do not contradict each other. The cleanest way to see which leg is the engine is to switch each one off. All three rows run with the hysteresis band disabled (HYST=0), because the band is defined against funding and a flat-zero series never clears the entry line:
Baseline, band off
3.95%
73.8%
Funding off entirely
4.23%
100%
Staking off — funding only
+0.99%
73.8%
Baseline, band on (published)
5.04%
75.5%
Read those in order and the product explains itself. Funding on its own is not a business: 0.99%, which does not cover the perp fees and the margin haircut, let alone beat lending. Staking on its own is very nearly the whole product — turning funding off raises the return, because Phoenix's negative episodes and the mode switching they provoke cost more than its positive months pay once you are reacting to every move.
So funding is a large gross line with a small marginal one. It pays $3.53 a year while the hedge is on, and removing it entirely costs the vault 81 bps (5.04% → 4.23%), because most of what it pays goes back out in the trading its own swings provoke. Staking is the opposite: nothing about it has to be traded.
Which makes the hysteresis band the largest of the modelling choices on this page — more than the hurdle's 77 bps or the buffer's 36 — and worth being exact about what it does. It is worth 109 bps (3.95% → 5.04%), and essentially all of that is switching it avoids rather than funding it holds onto: the band halves the switches from 12 to 6, which is 153 bps a year of cost against a 131 bps gain. Mode selection is fractionally worse with the band on; the cost line is what carries it.
That is why the yield risk that matters is staking-rate compression, not thin funding. Thin funding parks the vault at the lending rate, which is a floor. Staking has none.
Sensitivity
Each input moved alone, with the mode threshold re-derived wherever staking or lending changes.
Staking
The vault holds jitoSOL, so the input is the stake pool's rate, not Solana's network rate — and it is verified from the redemption rate rather than taken from a badge. The pool's total_lamports / pool_token_supply steps only at epoch boundaries, by a very stable increment:
Per-epoch step
2.09, 2.09, 2.08, 2.07 bp (4 consecutive epochs to 2026-09-04)
Epoch length
136,794 s = 1.5833 days — the mean over four epoch boundaries; slots are running ~316 ms, not the nominal 400 ms
Epochs per year
230.54
Implied APY
4.92% (4.89–4.94% across the step range)
4.94% is the top of that band, not its centre. The headline uses the pool's own published figure and our measurement puts it at the ceiling of what the redemption rate supports, so the number is generous by about 2 bp rather than conservative. That is disclosed rather than corrected: 2 bp does not survive the rounding in any figure downstream, and re-cutting the whole model for it would move nothing a reader can see.
Reproduce it with npm run rate:jito (one snapshot per epoch) and npm run rate:jito -- --apy, which reads the accumulated series in scripts/simulations/data/jitosol_redemption_rate.csv and refuses to annualize a span shorter than three epochs. Do not annualize by differencing calendar days: the snapshots are irregularly spaced and a 7-day window catches three or four epoch steps depending on where it lands, which makes naive daily differencing read anywhere from 3.9% to 4.7%.
Two other rates get quoted for jitoSOL, and neither is the one the vault earns:
4.99%
Jito's site, 2026-09-05
A trailing, MEV-inclusive estimator. It runs above the redemption rate: reaching it needs a step of 2.11 bp per epoch, above every one of the four on record. The vault earns the redemption rate.
5.30%
getInflationRate 3.666% ÷ 69.22% staked
Solana's network rate. Credits the vault with validator commission and Jito's 4% fee that it never receives.
The range worth sweeping is no longer a narrow one around today's rate. SIMD-0550 passed on 28 August 2026 (67.001% of participating stake, activating early 2027) and doubles Solana's disinflation from −15%/yr to −30%/yr, so the next three years take the staking rate down through the whole table below. The threshold is re-derived at every row as f* = 0.041594 − staking:
5.50%
−1.34%
5.77%
5.36%
76.2%
$0.31
+167 bps
4.94% (measured — headline)
−0.78%
5.37%
5.04%
75.5%
$0.25
+135 bps
4.60%
−0.44%
5.17%
4.88%
74.8%
$0.22
+119 bps
4.16% (staking alone stops justifying the hedge)
0.00%
5.39%
5.06%
53.5%
$0.25
+137 bps
4.05% (≈2027)
+0.11%
5.34%
5.02%
53.5%
$0.24
+133 bps
3.50%
+0.66%
5.07%
4.81%
52.4%
$0.20
+112 bps
2.80% (≈2028)
+1.36%
4.20%
4.11%
50.3%
$0.07
+42 bps
2.42% (hedging stops beating parking)
+1.74%
4.01%
3.96%
49.7%
$0.04
+27 bps
2.10% (≈2029)
+2.06%
3.94%
3.90%
48.3%
$0.03
+21 bps
2.00%
+2.16%
3.30%
3.28%
46.9%
$0.02
−41 bps
Two things to read off it:
Net APY degrades gracefully. Parking is a floor, so the vault holds roughly the lending rate all the way down and only crosses below it near 2.00%.
The performance fee does not. It falls from $0.25 per $100 to $0.03, because the hurdle ratchets at the lending rate and closes the fee's base from the top.
The rows below about 3% are mode-behaviour dominated — the vault parks about half the time and switches four times in 286 days — so they turn on a handful of decisions rather than a stable edge. Read them as direction, not forecast. Two other things bias the table toward being too harsh:
It scales jitoSOL proportionally with the network rate, when MEV is not inflation-linked and should survive the taper.
It holds the lending benchmark at 3.69% throughout, when rates have historically moved with staking.
The lending benchmark
The USDC lending rate is not an assumption we get to hold still. It falls out of utilisation on Kamino's main market, and it appears twice: parked mode earns it, and the fee hurdle ratchets at it.
3.61% (spot)
−0.87%
5.02%
75.9%
+141 bps
3.69% (7-day median — published)
−0.78%
5.04%
75.5%
+135 bps
4.19% (30-day median)
−0.23%
5.29%
74.5%
+110 bps
4.50%
+0.11%
5.86%
53.5%
+136 bps
5.00%
+0.66%
6.17%
52.4%
+117 bps
The published row is the seven-day median, not the spot print. The hurdle ratchets one way and this reserve throws utilisation spikes, so a spot read at the wrong moment would write a hurdle the strategy's gross could never clear, permanently. rates.ts takes the median for that reason and init-v1.ts writes what it returns.
Net APY rises with the benchmark here, which is not the reassurance it looks like: the vault simply parks more and collects the richer lending rate. The number to read is the last column, and it stays in a 110–141 bps band. A rising benchmark does not break the strategy, it makes it converge on the thing it is being compared to — and matching the benchmark is not a product.
The cost of a switch
Every mode change is charged 20 bps of NAV: 5 bps perp fee and 10 bps perp slippage to close or open the short, plus 5 bps of swap on the jitoSOL leg. It is the one headline input the venue's data cannot confirm — /v1/market/SOL/stats retains about a day, so there is no historical depth to size a fill against, and a fully hedged $500k vault is ~12% of today's open interest.
0 bps (costless rebalancing)
6.99%
6.34%
−0.127%
+265 bps
10 bps
6.18%
5.69%
−0.217%
+200 bps
20 bps (published)
5.37%
5.04%
−0.392%
+135 bps
30 bps
4.56%
4.40%
−0.630%
+71 bps
40 bps
3.76%
3.65%
−0.928%
−4 bps
60 bps
2.18%
2.07%
−1.669%
−162 bps
The switches stay at 6 down the whole sweep — the price of a decision does not change which decisions get made, only what they cost.
This is the input the headline is most exposed to, in both columns. The edge over lending is gone at 40 bps a switch, which is one bad fill per leg away from the published assumption. And the drawdown is mostly this number rather than the market: 12.7 bps of the published 39.2 is funding and price, and the rest is the vault paying to get out of the way. Both figures move on the same parameter, so a reader who doubts the slippage assumption should discount the drawdown by as much as the yield.
Two things bound it in the other direction: the jitoSOL side of the switch is measured, not assumed — a $1.3M swap fills flat, so the 5 bps charged there is about eight times too conservative — and 20 bps is charged against the whole NAV when only 81.8% of it is in the position.
Model choices
Published
5.37%
5.04%
−0.392%
75.5%
No redemption buffer
5.81%
5.40%
−0.405%
75.5%
No margin haircut (unreachable — margin is USDC-only)
5.97%
5.52%
−0.403%
75.5%
Hysteresis band 0.5pp
4.54%
4.39%
−0.479%
74.5%
Hysteresis band 0
4.06%
3.95%
−0.481%
73.8%
Flat 20% fee, no hurdle
5.37%
4.27%
−0.392%
75.5%
The last row is what the hurdle is worth to a holder: 77 bps.
Methodology
Window
2025-11-19 – 2026-08-31 (286 days), Phoenix SOL perp inception to last complete month
Funding
Phoenix's own hourly prints, unscaled (FUNDING_SOURCE=phoenix)
Staking
4.94% (STAKE_APY), jitoSOL's published pool APY
Lending
3.69% (LEND_APR) — parked mode earns it and the hurdle ratchets at it
Mode threshold
−0.78% (STD_THRESHOLD), the basis-vs-parked break-even at those rates, with a ±3% band
Margin haircut
Over-margined well inside the venue's 15× limit → 9.1% of deployed capital sits as USDC margin earning nothing, which is 8.2% of NAV
Costs
5 bps perp fee + 10 bps slippage per side; 20–40 bps per mode switch
Fees
0% management; 20% performance above the HWM and above the 3.69% lending-rate hurdle
Every cost is inside the gross return. The only step from gross to net is the performance fee, charged above the high-water mark and above the lending-rate hurdle. 5.04% is fully loaded, not a starting point to subtract from.
Where the −0.78% threshold comes from
Set the two modes equal on the allocation above. Parked, the whole $100 earns the lending rate except the $2 instant tranche. Hedged, $81.8 earns staking plus funding minus the amortized perp round-trip, the $8 lent buffer earns lending, and the $8.2 of margin earns nothing:
Staking still out-earns lending, so the short can cost a little and leave the vault ahead — but the headroom is thin. At a 7.00% staking rate the same arithmetic gives −2.84%, and that difference is the single largest correction on this page.
Both rates on the right are measured, so the threshold is not a constant: a richer lending market raises it and a faster staking rate lowers it. The keeper recomputes it each cycle from live rates. See Strategy & Modes.
Deploy setting. These figures assume an on-chain funding floor of −78, and the vault ships at −78 (
init-v1.ts). The floor has to be set at deploy, or amended afterwards, for the deployed vault to behave like this backtest — and it moves with both rates, so it is derived at deploy rather than carried from this page.
Reproduce
Those inputs are the script's defaults, so the command reproduces the figures above with no environment set. Each is overridable for sweeps:
FUNDING_SOURCE
phoenix — the venue itself, unscaled
STAKE_APY
0.0494 — jitoSOL published pool APY
STD_THRESHOLD
-0.0078 — break-even threshold
HYST
0.03 — hysteresis band
HURDLE_APR_BPS
369 — performance-fee hurdle, the live lending rate
LEND_APR
0.0369 — USDC lending rate; parked mode and the lent buffer earn it
FLOW_MONTHLY
0 — gross two-way holder flow per month, charged at FLOW_COST_BPS (20)
Holder flow, and what it costs
Two different redemptions matter, and they land very differently.
Getting out of jitoSOL is close to free. The vault exits its spot leg by swapping, not by queuing a stake-pool withdrawal, so what matters is the market. Quoted against the on-chain redemption rate of 1.299513895 SOL/jitoSOL:
100 jitoSOL
1.299437
−0.6 bp
0.000%
1,000
1.299437
−0.6 bp
0.000%
4,000
1.299437
−0.6 bp
0.000%
10,000 (~$1.3M)
1.299437
−0.6 bp
0.000%
Flat to $1.3M, well past the deposit cap. The model charges 5 bps of swap slippage per side, so on this book it is roughly eight times too conservative rather than too generous.
Moving the book is not free, and the program charges neither side for it. process_withdrawal applies a price-at-process haircut — it pays min(requested, current claim), which stops a redeemer collecting a stale high price — but there is no exit fee, so the cost of unwinding their slice falls on the holders who stay. Past the 2% instant tranche a redemption draws the buffer, and rebuilding the buffer means closing that slice of the short (5 bps fee + 10 bps slippage) and swapping that slice of jitoSOL back (5 bps). Deposits cost the same 20 bps in the other direction — swap into jitoSOL, open that slice of the short — and there is no entry fee either, so a new holder's build cost dilutes the ones already in. During a ramp that is the larger half.
The headline models no flow at all — a static $100 that nobody joins or leaves. That is a real flattery, so the drag is a knob rather than an assumption. The rows are gross two-way flow, deposits plus redemptions:
0% of NAV / month (headline)
5.37%
5.04%
—
2% / month
5.33%
5.01%
−3 bps
5% / month
5.27%
4.97%
−7 bps
10% / month
5.17%
4.89%
−15 bps
25% / month
4.88%
4.66%
−38 bps
Reproduce with FLOW_MONTHLY=0.05 npm run fund:backtest. Even heavy churn costs tens of basis points, which is why the headline is left at zero and the sensitivity published beside it rather than folded in. It scales with the same 20 bps as a mode switch, so a reader who marks that assumption up should mark this table up with it.
What the venue data cannot tell us
The funding series is real. Three things around it are not verifiable, and all three cut the same way:
The venue is gated.
/v1/view/exchange/statusreturns"gated": truetoday. Every day in this window is a day we could not have traded. The capability grant is agreed but not yet enabled, so this is a backtest of a book we have not been in.There is no historical order-book depth.
/v1/market/SOL/statsretains about one day, so open interest and volume cannot be reconstructed for any past date. The model assumes the hedge was placeable in full, every day, at no worse than the parametric slippage. Nothing in the venue's published data supports or refutes that.Funding is treated as exogenous, and at our size it isn't. Open interest today is 39,808 SOL ≈ $4.05M. A fully hedged $500k vault is a ~4,900 SOL short — ~12% of the book. Adding that to the short side pushes mark toward index and reduces the funding shorts receive. The backtest applies the historical rate as though the vault were not in the book. The capacity rule caps the vault at 15% of OI precisely because of this, but the yield figure does not carry the effect.
One descriptive fact worth knowing about the series: 14.0% of all hours printed exactly zero funding, ranging from 0.7% of hours in February 2026 to 33.2% in June. Those are hours where mark and index were close enough that nothing accrued.
The hysteresis band, and why we did not re-tune it
The mode threshold applies as a ±3-point band rather than a line: enter only when funding clears the threshold by the band, exit only when it falls below by the band, hold in between.
The width is a payback rule. A switch costs 20 bps and the edge accrues on the 81.8% basis leg, so requiring the move to repay itself within T days gives:
So 3 points is not arbitrary — it is the 30-day payback horizon.
It is also not the best value on this window, and that is worth stating plainly. Sweeping the width:
0
4.06%
3.95%
73.8%
12
0.5 pp
4.54%
4.39%
74.5%
10
1.0 pp
5.00%
4.75%
76.6%
8
1.5 pp
5.53%
5.17%
78.0%
6
2.0 pp
5.51%
5.15%
76.2%
6
3.0 pp (shipped)
5.37%
5.04%
75.5%
6
4.0 pp
5.72%
5.32%
53.1%
4
6.0 pp
5.57%
5.20%
51.7%
4
The band is worth 109 bps against having none at all, and the shipped 3.0 points sits in a shallow trough between two better values — 1.5 points returns 5.17% and 4.0 points returns 5.32%. Nearly all of the 109 bps is cost avoided rather than funding captured: the band takes the switches from 12 to 6, worth 153 bps a year, and gives back about 22 bps in worse mode selection.
Read the six switches by date and the width is not the only thing being tested. They are three round trips: out 2026-02-03, back 03-24; out 04-08, back 04-17; out 06-08, back 06-20. The first is February's funding collapse and is what the rule exists for. The other two lasted nine and twelve days, cost 40 bps each, and are 80 of the 120 bps the vault paid to switch — trips the payback rule says should not have been opened, since the same derivation that sets the width at 3.0 points assumes the move persists for 30 days. The band tests the size of a move. Nothing in the rule tests how long it lasts.
A minimum dwell would, and it comes out of the T already in the derivation rather than out of this window. On these 286 days a 21-day floor returns 5.40% net at a −0.317% drawdown on four switches — better in both columns. It also turns on two decisions out of six, which is the same objection as re-tuning the width, so it is a candidate with a measured result rather than a change we have made.
We have not re-tuned it, and the reason is the sample rather than the derivation. Those runs differ by four to twelve switching decisions across 286 days. What separates 4.0 points from 3.0 is mostly whether the band happened to park the vault before February 2026's −14% funding month — one decision, not an edge. Fitting a switching parameter on a dozen events is how a backtest gets optimised into something that does not generalise, and the payback rule is what survives not having a long sample.
One genuine property of the rule, worth knowing rather than fixing: because entry requires clearing the threshold by the band, a cold start on a permanently flat funding series would never open the position. And as the threshold rises with a falling staking rate, the entry line rises with it — at the 2027 threshold of +0.11% it sits at +3.11%. The band becomes binding then, and re-deriving it has a trigger rather than being open work today.
What's not in the model
Price impact on the perp leg. Slippage is a fixed 10 bps a side, and real fills depend on the depth at the time — which the venue does not retain, so nothing here supports or refutes it. It is the assumption the headline is most exposed to, in the yield and in the drawdown alike; the cost of a switch prices being wrong about it.
286 days is not a cycle. No rolling-12-month band can be quoted, because the venue has not existed for twelve months. What is missing is not a bear market in SOL — the position is hedged and the window already carries a −14% funding month — but a stress event that takes perp depth and jitoSOL liquidity at the same time. Every figure here is a young venue's record.
The band's 109 bps is switching avoided, not funding held onto. It rests on six decisions across the window, and the shipped width is not the best value on it.
Holder flow sits beside the headline, not inside it. Deposits and redemptions both cost 20 bps and the program charges neither party; the sensitivity is published rather than folded in.
Sub-daily behaviour. Modes are classified once per UTC day against a 7-day mean, so an intraday move a live keeper would react to is not in here. Funding itself aggregates exactly — hourly prints averaged, accrual linear in the rate — so this is decision resolution rather than a missing cost.
Related
Whitepaper — Performance section
Strategy & Modes — the mode rule and the break-even
Fee structure — the lending-rate hurdle
Last updated