> For the complete documentation index, see [llms.txt](https://docs.keystonefi.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.keystonefi.xyz/how-it-works/strategy-and-modes/historical-simulation.md).

# Historical Simulation

{% hint style="info" %}
**TL;DR** Every day Phoenix has quoted a SOL perp — 2025-11-19 to 2026-08-31, 286 days: **5.04% net APY** and a **−0.392%** worst drawdown, hedged on 75.5% of days. Funding is measured on the venue we trade, not inferred from a CEX. Read the drawdown first — it is the number that says whether this behaves like a savings product.
{% endhint %}

*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.

| Input   | Source                                                                                                                                               |
| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| 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%**.

| Metric               | Value                     |
| -------------------- | ------------------------- |
| **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:

|                  | Weight | Earns         |
| ---------------- | ------ | ------------- |
| 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](/how-it-works/whitepaper.md) §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:

| Month   | Mean APR    | Median  | Positive hours |
| ------- | ----------- | ------- | -------------- |
| 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:

| Leg                                                              | 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:

|                                                                     | Per year   |
| ------------------------------------------------------------------- | ---------- |
| 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:

|                                 | Net APY    | Days hedged |
| ------------------------------- | ---------- | ----------- |
| 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:

| Rate      | Source                                    | Why not this one                                                                                                                                                                                   |
| --------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **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`:

| jitoSOL                                            | Threshold  | Gross     | Net       | Hedged    | Perf fee /$100 | vs lending   |
| -------------------------------------------------- | ---------- | --------- | --------- | --------- | -------------- | ------------ |
| 5.50%                                              | −1.34%     | 5.77%     | 5.36%     | 76.2%     | $0.31          | +167 bps     |
| **4.94%&#x20;*****(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.

| Kamino USDC                                     | Threshold  | Net APY   | Hedged    | Edge vs lending |
| ----------------------------------------------- | ---------- | --------- | --------- | --------------- |
| 3.61% *(spot)*                                  | −0.87%     | 5.02%     | 75.9%     | +141 bps        |
| **3.69%&#x20;*****(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.

| Per switch                        | Gross     | Net       | Max DD      | vs lending   |
| --------------------------------- | --------- | --------- | ----------- | ------------ |
| 0 bps *(costless rebalancing)*    | 6.99%     | 6.34%     | −0.127%     | +265 bps     |
| 10 bps                            | 6.18%     | 5.69%     | −0.217%     | +200 bps     |
| **20 bps&#x20;*****(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

| Variant                                                 | Gross     | Net       | Max DD  | Hedged |
| ------------------------------------------------------- | --------- | --------- | ------- | ------ |
| **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

| Input          | Value                                                                                                                                  |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| 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](/start-here/fees.md#the-hurdle-the-hwm-ratchets-at-the-benchmark-rate). **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 + f − perp_drag) × 0.8181 + lending × 0.08  =  lending × 0.98
(4.94% + f − 0.10%)      × 0.8181 + 0.295%           =  3.616%
                                                   f  =  −0.78%
```

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](/how-it-works/strategy-and-modes.md#when-does-the-vault-turn-the-trade-on).

> **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

```bash
npm run fund:phoenix     # refresh the venue funding series
npm run fund:backtest
```

Those inputs are the script's defaults, so the command reproduces the figures above with no environment set. Each is overridable for sweeps:

| Env knob         | Default                                                                    |
| ---------------- | -------------------------------------------------------------------------- |
| `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**:

| Size               | Implied rate | vs redemption rate | Price impact |
| ------------------ | ------------ | ------------------ | ------------ |
| 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:

| Flow                                        | Gross     | Net       | Cost vs static |
| ------------------------------------------- | --------- | --------- | -------------- |
| **0% of NAV / month&#x20;*****(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/status` returns `"gated": true` today. 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/stats` retains 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:

```
(f − f*) × 0.8181 × T/365 > 0.0020        →        band = 0.893 / T  points

T = 30 days  →  2.97 points        (the 3.00 in the code)
T = 60 days  →  1.49 points
T = 90 days  →  0.99 points
```

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:

| Band                            | Gross     | Net       | Hedged    | Switches |
| ------------------------------- | --------- | --------- | --------- | -------- |
| 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&#x20;*****(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](#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](#holder-flow-and-what-it-costs) 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](/how-it-works/whitepaper.md) — Performance section
* [Strategy & Modes](/how-it-works/strategy-and-modes.md) — the mode rule and the break-even
* [Fee structure](/start-here/fees.md) — the lending-rate hurdle
* [Backtest data CSVs](https://github.com/kamwithak/keystone-contracts/tree/main/scripts/simulations/data/README.md)
