I Ran the Narrow-Range Orca Strategy for 93 Days. It Lost to Doing Nothing.
On May 8, 2026 I published a strategy on this site for farming the 255% APY narrow band in the Orca SOL/USDC 0.04% pool: stack buckets at different widths, keep ~70% of capital in the tightest range, rebalance daily off Python price analysis, compound the fees.
I then ran it. Not with money — in simulation, against live SOL price feeds and live Orca pool state, for 93 days, across seven distinct strategy configurations and two complete architecture rewrites.
It lost. Not marginally, and not because of a bad regime. It lost in the regime it was designed for, and the reason turns out to be an arithmetic identity rather than a statistical result.
Total capital at risk across the entire project: $0. Every number below is paper. That is the only part of the original plan that worked out.
Here is the whole post-mortem, and the complete 31-page research paper behind it — every ledger, every trade, every defect, free to download.
This post is the condensed version. The complete research paper is published in full below, and it is the most detailed public accounting of a concentrated-liquidity strategy I have ever been able to find — because I could not find one, which is why I had to run it myself.
⬇ Download the full meta-analysis (PDF · 31 pages · 1.2 MB)
Inside: all seven simulation runs with complete P&L decomposition · the event-by-event trade ledger for all 72 rebalances, timestamped, with fees, IL and net for every single close · five counterfactual studies · the full band-width sweep across four market regimes · the break-even economics of the venue · a catalogue of all thirteen defects found, including the two accounting bugs that made the dashboard lie for two months · and a stated-limitations section that tells you exactly where the results stop being trustworthy.
No signup. No gate. No newsletter. Nobody is selling you a bot at the end of it.
The Ledger
Seven runs between May 9 and August 9, spanning a −25% crash, a 22.9% drawdown with partial recovery, and a stretch of tight chop that is the single friendliest regime a liquidity provider can ask for.
| Run | Days | Fees | Realized IL | Friction | Net | Fee/IL coverage |
|---|---|---|---|---|---|---|
| E1 | 4.0 | +$37.16 | not modelled | −$10.32 | +$26.83 | — |
| E2 | 6.0 | +$41.19 | −$55.69 | −$9.55 | −$25.38 | 0.74 |
| E3 | 10.6 | +$119.12 | −$88.22 | −$18.62 | +$12.86 | 1.35 |
| E4 | 5.0 | +$239.37 | −$212.86 | −$42.03 | −$15.52 | 1.12 |
| E5 | 34.0 | +$766.16 | −$676.04 | −$136.47 | −$46.35 | 1.13 |
| E6 | 8.0 | +$28.77 | −$31.17 | −$7.23 | −$9.63 | 0.92 |
| E7 | 13.4 | +$22.95 | −$44.35 | −$1.05 | −$22.46 | 0.52 |
Two formal go-live gates were defined in advance. Both failed.
The coverage ratio in the last column — fees divided by realized impermanent loss — is the number that matters, and it needs to clear roughly 1.20 to break even once gas and swap costs are included. That break-even sat at 1.20 ± 0.03 for months, which makes it a usable operating gate. The strategy cleared it in exactly one 10.6-day window, inside a larger run that ended at 1.13.
And E1's +$26.83 is not a result. The cost model that produced it had no impermanent loss term at all — the IL accounting was added to the code five days after that first analysis was written. The founding "this works" data point was measured without the dominant cost.
The Finding That Ends the Argument
Here is what actually happened, proven to the penny.
When a concentrated position goes out of range, it is 100% one token by construction. The rebalance rule closes it, swaps back to roughly 50/50, and reopens a new band centered on price. That swap is a trade executed at a range boundary — and a range boundary is, by definition, a local extreme.
The final run made five of them:
| # | Action | Size | Price |
|---|---|---|---|
| 1 | BUY 6.5600 SOL | $501.56 | $76.46 |
| 2 | SELL 6.6588 SOL | $484.28 | $72.73 |
| 3 | BUY 6.5618 SOL | $486.28 | $74.11 |
| 4 | SELL 6.6295 SOL | $471.24 | $71.08 |
| 5 | BUY 6.4999 SOL | $475.15 | $73.10 |
Average buy: $74.56. Average sell: $71.91. The machine bought 3.69% above where it sold, five times, mechanically, with no discretion involved.
FIFO-matching those round trips gives −$44.49. The lifetime impermanent loss the system had logged over the same period was −$44.35. A residual of fourteen cents, 0.3%.
Those are the same dollars. What the dashboard was reporting as "impermanent loss" — an abstract, market-inflicted, hopefully-temporary divergence cost — was in fact the profit and loss of a buy-high/sell-low ladder that the rebalance rule ran on itself. The reopen swap accounted for 99.7% of all realized IL.
Over that window SOL finished +0.87%. The strategy finished 4.2% behind simply holding the basket, and every dollar of the gap is inside those five swaps.
It is self-reinforcing, which is the ugly part. The direction of the swap is set by the direction of the exit. Break out above the band and you hold 100% USDC, so the reopen buys SOL at the high. Break down below and you hold 100% SOL, so the reopen sells SOL at the low. In an oscillating market — the exact regime a liquidity provider is supposed to want — every oscillation costs you one buy-high plus one sell-low.
"Just Wait Longer" Was Tested. It Is Worth $2.03.
The obvious fix is to not close so eagerly. After every forced close the simulator kept watching the abandoned range with no capital at risk, recording whether and when price came back — which solves the censoring problem, because you otherwise only ever observe the recoveries in cases where you happened to wait.
Across five cycles, a machine with a perfect oracle for recovery times would have earned +$2.03.
The reason is obvious in hindsight: price recovers to the boundary you just left, so the price you would swap at barely changes. An entire branch of the search space — grace windows, stop-out timing, patience heuristics — is closed by that one table. It absorbed a large share of the engineering effort.
Holding Longer Helps. Holding Wider Helps More.
The cleanest empirical result in the corpus, from 66 rebalance events:
| Hold | Events | Win rate | IL / event | Fees / event | Coverage |
|---|---|---|---|---|---|
| < 2h | 6 | 0% | $15.47 | $3.92 | 0.25 |
| 2–6h | 25 | 12% | $9.99 | $4.87 | 0.49 |
| 6–12h | 14 | 21% | $9.06 | $12.78 | 1.41 |
| 12–24h | 10 | 70% | $9.31 | $19.79 | 2.13 |
| > 24h | 11 | 82% | $10.29 | $22.14 | 2.15 |
The two derived columns are the whole mechanism. IL per close is essentially constant at $9–10 regardless of how long you held. Fees per close rise 5.6×.
Impermanent loss is a per-close toll set by band geometry. Fees are a rate integrated over time. Profitability is therefore not a question of choosing the right moment to close. It is a question of how long you stay open relative to a fixed charge for closing.
Which leads directly to the break-even table every operator should compute before anything else. Calibrated to the live pool ($14,972 in 24h fees, $26.36M TVL):
| Band ±w | IL at edge | Fees/day in range | Break-even days |
|---|---|---|---|
| 1.25% | −0.312% | 0.876% | 0.38 |
| 2.50% | −0.621% | 0.467% | 1.38 |
| 4.00% | −0.990% | 0.316% | 3.20 |
| 6.00% | −1.477% | 0.234% | 6.41 |
| 10.00% | −2.435% | 0.141% | 17.37 |
| 15.00% | −3.600% | 0.095% | 38.08 |
Break-even scales roughly as w². If your expected hold is shorter than the break-even for your width, the position is a guaranteed loser and no amount of tuning changes that.
Concentration Is a Risk Multiplier, Not an Edge
This is the finding that most directly contradicts the May 8 post. Over 233 days spanning the 2025 bull-and-crash cycle, holding through without ever closing:
| Band | Final | vs 50/50 HODL | Fees | IL | In-range |
|---|---|---|---|---|---|
| ±5% | $708.69 | −$103.91 | $75.17 | −$183.71 | 15.8% |
| ±10% | $713.58 | −$99.02 | $70.65 | −$178.82 | 27.9% |
| ±25% | $732.20 | −$80.40 | $52.91 | −$155.53 | 51.6% |
| ±40% | $780.07 | −$32.53 | $47.91 | −$115.21 | 75.2% |
| ±60% | $826.63 | +$14.03 | $38.61 | −$75.93 | 93.4% |
| ±90% | $871.37 | +$58.77 | $24.45 | −$45.72 | 100.0% |
Fee income varies 3.1× across an 18× range of widths. Impermanent loss varies 4.0× and is two to seven times larger in absolute terms. Narrowing the band buys you a little more fee income and a lot more IL. That is the entire trade-off, and it does not favor concentration.
Tested across four different market regimes, only ±60% and ±90% produced a positive excess return over a 50/50 basket in every regime. Nothing tighter did.
The ±10% column is the trap. It produced both the best number in the entire corpus (+51.8% annualized excess, in tight chop) and the worst (−15.8%, over the full cycle). A 67.6 percentage-point spread on a decision you make once is not a strategy — it is a coin flip with extra steps, and the difference between the two outcomes was not skill. It was which direction SOL happened to move.
The Metrics That Lied
Every metric on the original dashboard was, at some point, at its most flattering during the worst week on record.
| Metric | What it showed | What was true |
|---|---|---|
| Gross fee APR | +424% annualized | Portfolio down 16.1% over those same five days |
| In-range % | 91% during the worst week | Finished below buying and holding the crashing asset |
| Hold duration | Improved 5× (6h → 30.1h) | Fee/IL coverage halved (1.13 → 0.52) |
| Snapshot in-range rate | 92.5% for the weekly bucket | Probability of staying in range a full week: 0% |
| Compound count | "661 compounds = $661 reinvested" | That is fee income re-labelled, not profit |
Fee APR deserves special mention because it is not a bug in my code — it is structural and it applies to every dashboard you have ever looked at. Price volatility drives pool volume, volume drives fee income, and the fee APR formula does not subtract the value of the asset you are holding while it falls. During the crash, SOL volume ran at $2,241M/day against $1,202M/day in quiet periods. Fee APR peaks exactly when an LP position is at its most destructive.
Peak APR is a warning indicator. So is a 91% in-range rate. In the 206-day table above, in-range percentage was inversely correlated with return.
The Number on the Dashboard Could Not Go Down
The most uncomfortable finding came out of reconciling the corpus rather than from any single run.
For two months the portfolio value shown on the dashboard was a ratcheting figure. The variable holding effective principal was incremented on every fee compound and never decremented — not by impermanent loss, not by slippage, not by gas. Each reopen reset the position's value to initial capital plus every fee ever earned, discarding every realized loss. The per-event ledger was maintained correctly, and separately, and fed nothing.
The June 24 headline read: +2.1% while SOL fell 22.9%. Corrected, it is approximately −13.7%. The claim "the strategy beat holding by $541" becomes "it trailed holding by roughly $90."
That removes the last apparently-successful result from the record. All seven runs either failed their benchmark or, in the first run's case, were measured without the dominant cost term.
The governance lesson is worth more than the dollars: a plausible-looking wrong number is more dangerous than a crash, because a crash stops you and a wrong number does not. The fix is boring and it is mandatory — two independent computations of equity, an event ledger and a running bankroll, that must reconcile to $0.00. That check kills this defect on day one, and it kills a second accounting bug that made a −0.76% run display as −3.75%.
Related: I ran for three months without a benchmark. Reports assessed the strategy against zero, against its own compounded principal, or against gross fee APR. None of those answers the only question that matters — what would I have had if I had done nothing? For a two-token liquidity position, that is a 50/50 basket held over the same window. Compute it from hour one.
What Was Actually Worth Working On
Every tunable in the system, measured on a common basis, ranked by what it was worth:
| Rank | Lever | Measured worth | Effort spent |
|---|---|---|---|
| 1 | Whether to be in LP at all during a trend | −1 to −2%/week typical, −8.7% worst | ~none |
| 2 | Band width across regimes | 67.6pp swing at ±10% vs 24.1pp at ±90% | ~none |
| 3 | Whether you close at all | Never-close beat production by +$42.87 in 13 days | none |
| 4 | Reopen policy (passive vs 50/50 recenter) | +$59.09 per $1,000 in 13 days | none — never shipped |
| 5 | Centering the band on live price at open | +$42.37 per $1,000 in 13 days | small |
| 6 | Volatility-based range selector | 0 of 79 closes ever triggered it | large |
| 7 | Grace / stop-out timing, with perfect foresight | +$2.03 total | very large |
| 8 | Slippage and priority-fee optimization | 0.022% of principal ≈ 3% of close cost | very large |
| 9 | Compounding cadence (daily vs monthly) | $0.52/year per $1,000 | moderate |
The ratio between the top lever and the bottom is roughly 9,000×. Levers 1–3 went unexplored until the final week. Levers 7–9 absorbed most of the work.
That inversion is not a failure of intelligence, which is why it is worth naming. Levers 7–9 are visible, tunable, and satisfying to work on. Levers 1–3 require entertaining the possibility that the strategy is wrong. Rebalancing cost turned out to be ~97% impermanent loss and ~3% gas and swap fees — and months went into optimizing the 3%.
What I Would Do Instead
The profitable configuration is close to the inverse of what I published in May.
Decide whether you want to be in a pool at all. An LP position is short gamma and long delta: it earns when price oscillates inside your band and loses when price trends through it. Across 37 overlapping weekly windows spanning a real crash, every policy — every width, every grace setting, both reopen modes — beat a 50/50 basket only 30–40% of the time in trending conditions. If you have a directional view, express it directionally. If your conviction is that SOL goes to $200, hold SOL; at the ceiling of a ±90% band you own zero SOL and you are 18% behind holding.
Compute the break-even table for your pool first. Live 24h fees, TVL, liquidity at tick. It takes minutes and it tells you the only operationally decisive thing: how many days in range a given width must survive to pay for one close.
Choose width by the worst regime, not the best. Default ±60%; ±90% if you cannot tolerate the tail. Go tighter than ±25% only if you have verified your expected hold exceeds the break-even with margin.
Make the band log-symmetric and center it on the live price at the instant you open. Production bands were anchored to lagging averages and opened off-center on 5 of 5 opens. Fixing that alone was worth +$42.37 per $1,000 over 13 days — no forecast, no extra transaction, free.
Never close at a boundary. This is the rule that would have saved the most money. If you must run an active band, use a passive one-sided reopen: at close, do not swap. Open a one-sided band on the side of whatever you already hold — exited above and holding USDC, place the band below price; exited below and holding SOL, place it above. Zero swap, zero slippage, and the position becomes a resting limit order that accumulates the cheap asset. It is the exact inverse of recentering, and it beat 50/50 recentering on mean, median, worst case and win rate at every width tested, winning 17 of 17 walk-forward windows.
Do not build an exit rule for the upside. Eighteen were tested. Every active rule lost to holding through on average. Recentering upward was the worst systematic choice tested — 0% win rate — because it is the same buy-high mechanism in a different costume. The one rule that helps when the ceiling binds needs a 74% hit rate to break even, and no tested signal comes close. A trend-confirmation filter made every rule it touched worse, monotonically: by the time a trend is statistically confirmed, price is near the top of it.
Compound monthly because it is free, not because it is a lever. Monthly versus daily is worth $0.52 a year per $1,000. Never let compounding frequency justify an extra on-chain transaction.
Honest Expectations
Per $1,000, one year, ±90% log-symmetric band, based on regimes actually measured:
| Scenario | Outcome | vs 50/50 HODL |
|---|---|---|
| Base case, SOL range-bound | ~+9% fees, IL under 2%, net +7–8% | ≈ +5% |
| SOL −47% (floor) | ~$626, but 15.4 SOL vs 6.5 at entry | −18% |
| SOL +90% (ceiling) | ~$1,189, all USDC | −18% |
| SOL +159% | still $1,189 — position stops participating | −34% |
| Full 2025-style cycle | mean −5.3% per 120-day window | negative |
The tails are symmetric in dollars and asymmetric in kind. The floor pays you in SOL. The ceiling pays you in USDC. Only one of those is a consolation, and only if SOL was the thing you wanted. Above the ceiling the position stops participating entirely and the gap to holding grows without limit. Most people designing these fixate on the downside; the upside tail is worse and it has no consolation prize.
And the founding target of this project — $100/day on $3,000 — is 1,217% annualized. It was never achievable. The realistic figure at that principal is $3–5/day gross of price risk, and price risk is larger than the fee stream. That impossible target is what pushed the design toward tight, high-density, frequently-rebalanced ranges: precisely the configuration the data says is worst. It did not merely fail to be met. It caused the wrong thing to be built.
Limitations
This is one asset, one venue, one fee tier — SOL/USDC on Orca's 0.04% pool. The fee model is calibrated to pool conditions on August 9, 2026 and transferred backward to 2025, so rankings across band widths are robust; absolute APRs are not. The 2025 price series is sampled at 7.1-hour granularity, which is fine for wide bands and unreliable below ±10%. Some windows overlap heavily, which inflates apparent sample size. All results are paper — on-chain slippage in thin liquidity will be worse than modelled.
And thirteen defects were found over 93 days. There is no way to know how many remain.
What Actually Survives
The strategy in the May 8 post does not work in the form I described it. The 255% APY was real and the fees were real; the toll charged for standing in that range was larger, and the dashboard was structurally incapable of showing it.
What survives is smaller and more durable than a configuration:
Open wide. Center on the live price. Do not close at a boundary. Compound monthly. Measure against holding the basket and against nothing else. Expect a single-digit annual carry and an 18% shortfall in either tail.
That is roughly the opposite of the tightly-concentrated, aggressively-rebalanced system I spent three months building — and it is the version I would put money behind.
Everything above is summarized from the underlying research, which is published in full and unedited — including the parts that make me look bad.
⬇ Download the complete meta-analysis (PDF · 31 pages)
Ninety-three days. Seven strategies. Two architectures. Seventy-two logged rebalances. Thirteen defects. Five counterfactual studies. Zero dollars lost.
If you are about to open a concentrated position — or you are already running a rebalancing bot — read §8 (the mechanism), §9 (the lever hierarchy, ranked by measured dollar value) and §14 (the step-by-step operating guide with a pre-flight checklist). Those three sections are the ones I wish someone had handed me in May.
Related reading: