15 KiB
KRAIKEN Parameter Search Results
Objective
Map the full 4D optimizer parameter space (CI, AS, AW, DD) after fixing the sqrt price
bug and outstandingSupply inflation (commit 0e2104b). Primary optimization target:
maximize fee revenue while staying safe (trader cannot profit from bull-bear cycles).
Executive Summary
The sqrt price bug was the critical issue. Fixing it makes capitalInefficiency (CI)
the dominant safety parameter — it now correctly controls floor placement via VWAP-adjusted
scarcity calculations. All other parameters are secondary.
Key Findings
| Finding | Detail |
|---|---|
| CI is the safety dial | CI=0% → 100% safe. CI≥40% → 100% unsafe. Boundary at CI=20-30%. |
| Fee revenue is parameter-independent | ~1.5 ETH per bull→bear cycle regardless of CI/AS/AW/DD |
| No safety-fee trade-off | Lowering CI to protect the LM costs ZERO fee revenue |
| AW is the secondary safety factor | Narrow anchor (AW=20) maximizes LM protection |
| DD now has measurable (but small) effect | Higher DD adds ~5 safe combos at boundaries |
| Optimal safe config | CI=0%, AS=10%, AW=20, DD=100% — max protection, full fees |
Bottom Line
Set CI=0% for maximum safety with zero fee cost. CI is the only parameter the optimizer needs to manage for solvency. AS, AW, and DD can be tuned freely for UX and fee optimization without affecting protocol safety at CI=0%.
What Changed: The Sqrt Bug Fix
Before (broken scarcity math)
// OLD: _priceAtTick returns price*2^96 (Q96), NOT price^2*2^96
uint256 requiredEthForBuyback = outstandingSupply.mulDiv(sqrt(vwapX96), (1 << 96));
// sqrt(price*2^96) ≈ sqrt(price) * 2^48 — a ~445x OVERESTIMATE of the actual price
The old code applied sqrt() to a value that was already a linear price (not a squared price).
This produced a buyback requirement ~445x too high, making ethScarcity permanently true
regardless of actual ETH reserves. Result: the floor ratchet was always on, and CI had zero effect.
After (corrected)
// NEW: vwapX96 IS the price — use directly
uint256 requiredEthForBuyback = outstandingSupply.mulDiv(vwapX96, (1 << 96));
Now scarcity triggers when actual floor ETH is insufficient to cover outstanding supply at
VWAP — the intended behavior. CI adjusts VWAP (adjustedVWAP = 70%*VWAP + CI*VWAP),
which directly controls how generous the buyback valuation is and thus when scarcity fires.
OutstandingSupply Fix
Additionally, outstandingSupply now conditionally excludes feeDestination and stakingPool balances:
uint256 supply = kraiken.outstandingSupply(); // totalSupply minus LM's own tokens
if (feeDestination != address(0) && feeDestination != address(this)) {
supply -= kraiken.balanceOf(feeDestination); // accumulated fee KRK
}
(, address stakingPoolAddr) = kraiken.peripheryContracts();
if (stakingPoolAddr != address(0)) {
supply -= kraiken.balanceOf(stakingPoolAddr); // staked KRK
}
This has zero effect in the test environment (both balances are 0) but prevents false scarcity on mainnet where fees accumulate.
Methodology
BullBearSweep — Deterministic Bull→Bear Scenario
Each of the 1050 parameter combinations runs an identical scenario:
| Phase | Action | Details |
|---|---|---|
| Setup | Deploy fresh environment | LM funded with 200 ETH, initial recenter |
| Bull | 10 buys × 15 ETH | Total 150 ETH spent, recenter every 3 buys |
| Transition | Final recenter | Records VWAP, redeploys positions |
| Bear | Sell all KRK | Multiple sell attempts with recenters between |
| Measure | Trader PnL | final_WETH - initial_WETH (negative = LM gain) |
Full 4D Parameter Space (1050 combos)
| Parameter | Values | Count |
|---|---|---|
| capitalInefficiency | 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 100% | 10 |
| anchorShare | 10%, 20%, 30%, 40%, 50%, 70%, 100% | 7 |
| anchorWidth | 20, 40, 60, 80, 100 | 5 |
| discoveryDepth | 20%, 50%, 100% | 3 |
| Total | 1050 |
Metrics Tracked (19 per combo)
- trader_pnl: Trader's ETH gain/loss. Primary safety metric (negative = safe).
- lm_net_gain: LM ETH gained over the cycle.
- drawdown_bps: Peak-to-trough LM ETH drop during bear phase.
- fee_weth_total / fee_krk_total: Fee revenue at
feeDestination. - floor_moved: Whether the floor position shifted during the cycle.
- sell_attempts: Rounds needed to liquidate all KRK.
Results
1. Safety by CI Value
| CI | Safe | Unsafe | Safe % | Avg Trader PnL (ETH) | Avg LM Net Gain (ETH) |
|---|---|---|---|---|---|
| 0% | 105 | 0 | 100% | -21.69 | +20.21 |
| 10% | 87 | 18 | 83% | -10.72 | +9.24 |
| 20% | 55 | 50 | 52% | +0.34 | -1.82 |
| 30% | 20 | 85 | 19% | +11.40 | -12.88 |
| 40% | 0 | 105 | 0% | +21.54 | -23.02 |
| 50% | 0 | 105 | 0% | +30.87 | -32.35 |
| 60% | 0 | 105 | 0% | +38.29 | -39.77 |
| 70% | 0 | 105 | 0% | +44.38 | -45.86 |
| 80% | 0 | 105 | 0% | +49.37 | -50.85 |
| 100% | 0 | 105 | 0% | +55.70 | -57.18 |
Total: 267 safe / 783 unsafe out of 1050 combos.
CI is the dominant safety control. The PnL crossover is between CI=10% (avg -10.72) and CI=20% (avg +0.34). Each 10% CI increment shifts average PnL by ~10 ETH toward traders.
2. Fee Revenue — Completely Parameter-Independent
| Dimension | Values Tested | Avg feeWethTotal | Range |
|---|---|---|---|
| CI (0-100%) | 10 values | 1.4814 ETH | ±0.000 |
| AS (10-100%) | 7 values | 1.44-1.50 ETH | 0.06 |
| AW (20-100) | 5 values | 1.43-1.50 ETH | 0.07 |
| DD (20-100%) | 3 values | 1.48 ETH | ±0.004 |
Fee revenue is 1.50 ETH for 87.6% of combos. The remaining 12.4% earn 1.35 ETH (10% less), occurring only at high-AS + low-AW configurations (AS≥50% with AW=20, AS=100% with AW≤40).
KRK fees are zero across all 1050 combos — all fee revenue is WETH-denominated.
Critical implication: there is NO trade-off between safety and fee revenue. Setting CI=0% for maximum protection earns identical fees as CI=100% (which bleeds 55+ ETH to traders).
3. CI=0% — Full Safety with Fee Revenue
All 105 combos at CI=0% are safe. Trader PnL matrix (ETH, avg across DD):
| AS \ AW | 20 | 40 | 60 | 80 | 100 |
|---|---|---|---|---|---|
| 10% | -43.1 | -42.9 | -37.6 | -29.3 | -16.0 |
| 20% | -39.1 | -38.2 | -33.1 | -23.7 | -13.2 |
| 30% | -34.8 | -33.2 | -27.8 | -18.3 | -8.6 |
| 40% | -29.9 | -28.2 | -22.5 | -14.3 | -6.5 |
| 50% | -25.5 | -25.0 | -19.6 | -13.6 | -6.0 |
| 70% | -20.2 | -20.1 | -16.9 | -11.8 | -7.4 |
| 100% | -14.1 | -12.4 | -11.1 | -8.8 | -6.6 |
Every cell is negative (safe). The worst case (AS=100%, AW=100) still costs the trader 6.6 ETH. At CI=0%, the entire AS/AW/DD space is available for free tuning without safety concerns.
Fee revenue at CI=0%:
| AS \ AW | 20 | 40 | 60 | 80 | 100 |
|---|---|---|---|---|---|
| 10% | 1.50 | 1.50 | 1.50 | 1.50 | 1.50 |
| 20% | 1.50 | 1.50 | 1.50 | 1.50 | 1.50 |
| 30% | 1.50 | 1.50 | 1.50 | 1.50 | 1.50 |
| 40% | 1.45* | 1.50 | 1.50 | 1.50 | 1.50 |
| 50% | 1.35 | 1.50 | 1.50 | 1.50 | 1.50 |
| 70% | 1.35 | 1.50 | 1.50 | 1.50 | 1.50 |
| 100% | 1.35 | 1.35 | 1.50 | 1.50 | 1.50 |
*Mixed across DD values. Only high-AS/low-AW combos see a minor 10% fee reduction.
4. Safe/Unsafe Boundary Maps
For each (CI, AS, AW), shows whether ALL DD values are Safe (S), ALL Unsafe (U), or Mixed (M):
CI=10% (83% safe overall)
AS\AW 20 40 60 80 100
10% S S S S M
20% S S S S M
30% S S S S U
40% S S S S U
50% S S S S U
70% S S S S U
100% S S S S U
Only AW=100 is problematic at CI=10%. All narrow-anchor combos are safe.
CI=20% (52% safe overall)
AS\AW 20 40 60 80 100
10% S S S M U
20% S S S M U
30% S S S U U
40% S S M U U
50% S S U U U
70% S S U U U
100% S S U U U
The unsafe zone expands to AW≥60 for high AS. Low AS (10-20%) remains safe through AW=80.
CI=30% (19% safe overall)
AS\AW 20 40 60 80 100
10% S S M U U
20% S S U U U
30% S U U U U
40% M U U U U
50% M U U U U
70% U U U U U
100% U U U U U
Only the tightest configs (low AS + low AW) remain safe. AS≥70% is universally unsafe.
Pattern: The safe boundary sweeps diagonally — lower CI allows wider anchor/higher share. At any CI, you can trade AS for AW along iso-safety curves.
5. Discovery Depth: Measurable but Small Effect
DD impact on safety boundary (8 combos where DD flips outcome):
| CI | AS | AW | DD=20% PnL | DD=50% PnL | DD=100% PnL | Pattern |
|---|---|---|---|---|---|---|
| 10% | 10% | 100 | +7.77 (U) | -3.19 (S) | -8.59 (S) | Higher DD saves |
| 10% | 20% | 100 | +6.63 (U) | +0.53 (U) | -1.93 (S) | Only DD=100% safe |
| 20% | 10% | 80 | +4.18 (U) | -2.67 (S) | -6.46 (S) | Higher DD saves |
| 20% | 20% | 80 | +7.46 (U) | +3.20 (U) | -0.05 (S) | Barely safe at DD=100% |
| 20% | 40% | 60 | +1.11 (U) | -0.12 (S) | +0.26 (U) | Non-monotonic |
| 30% | 10% | 60 | +0.79 (U) | -2.32 (S) | -2.43 (S) | Higher DD saves |
| 30% | 40% | 20 | +1.07 (U) | -0.82 (S) | -0.81 (S) | Higher DD saves |
| 30% | 50% | 20 | +0.71 (U) | +0.80 (U) | -0.95 (S) | Only DD=100% safe |
In 7 of 8 boundary cases, higher DD improves safety. The mechanism: more discovery liquidity density provides additional sell-side absorption, slightly reducing the trader's exit proceeds. Combo #5 (CI=20%, AS=40%, AW=60) shows a non-monotonic anomaly — likely a precision effect at the exact boundary.
DD within safe combos (negligible):
| DD | Avg PnL (ETH) | Avg feeWethTotal (ETH) | Safe Count |
|---|---|---|---|
| 20% | -15.08 | 1.479 | 85 |
| 50% | -15.09 | 1.473 | 90 |
| 100% | -15.40 | 1.479 | 92 |
DD changes the safe count by only 7 combos (85→92) across the entire space. Within safe combos, its effect on PnL and fees is negligible.
6. Drawdown Analysis
Average drawdown (bps) during the bear sell-off:
| CI | Avg Drawdown | Interpretation |
|---|---|---|
| 0% | 3681 bps (36.8%) | LM absorbs sell pressure well |
| 10% | 3996 bps (40.0%) | |
| 20% | 4313 bps (43.1%) | |
| 30% | 4631 bps (46.3%) | |
| 40% | 4922 bps (49.2%) | |
| 50% | 5189 bps (51.9%) | |
| 60% | 5402 bps (54.0%) | |
| 70% | 5577 bps (55.8%) | |
| 80% | 5720 bps (57.2%) | |
| 100% | 5901 bps (59.0%) | LM gives back most of peak ETH |
Drawdown scales linearly with CI. Even at CI=0%, the LM experiences ~37% drawdown during a 150 ETH bull-to-bear cycle, but recovers to a net gain (20.21 ETH average). At CI≥40%, the LM never recovers — drawdown exceeds 100% of the bull gains.
7. Secondary Parameter Impact (at CI=0%)
Since CI=0% is universally safe, the other parameters only affect how much the LM gains:
| Parameter | Range | PnL Impact | Fee Impact |
|---|---|---|---|
| AW (anchor width) | 20→100 | 27 ETH (strongest secondary) | <5% |
| AS (anchor share) | 10%→100% | 29 ETH | <10% |
| DD (discovery depth) | 20%→100% | 0.3 ETH (negligible) | <0.5% |
AW and AS have roughly equal impact at CI=0%. Both affect how much ETH the LM keeps during the bear phase, but neither threatens safety.
8. Floor Movement
Floor moves in 99.7% of combos (1047/1050). The 3 static-floor combos are all at CI=0% with moderate AS (40-50%) and AW=20 — the floor is placed so conservatively that the sell-off never reaches it. Floor movement does NOT correlate with safety — both safe and unsafe combos have floor_moved=true.
Parameter Sensitivity Ranking
From most to least impactful:
- capitalInefficiency — THE safety dial. Each +10% shifts avg PnL by ~10 ETH toward traders. CI=0%: 100% safe. CI≥40%: 100% unsafe. Must be actively managed.
- anchorWidth — Secondary safety factor. Each +20 ticks increases avg PnL by ~8 ETH. Narrow anchor (20) maximizes resistance; wide (100) allows more traversal.
- anchorShare — Tertiary. Higher AS means less floor ETH. Effect is ~5 ETH per +20%.
- discoveryDepth — Negligible for safety (<1 ETH across full range). Only matters at exact boundary conditions (8 out of 1050 combos).
Recommended Configuration
For Maximum Safety: CI=0%
capitalInefficiency = 0 (0%)
anchorShare = 200000000000000000 (20%)
anchorWidth = 60 (60 ticks)
discoveryDepth = 500000000000000000 (50%)
Rationale:
- CI=0% guarantees safety across the ENTIRE AS/AW/DD space
- AS=20% provides moderate anchor liquidity for fee capture (1.50 ETH)
- AW=60 balances concentrated liquidity (fees) with sell resistance
- DD=50% is a neutral choice (DD has negligible effect)
- Trader loses ~33 ETH out of 150 ETH round trip (22% loss)
- LM drawdown ~33% during bear, recovers to net +31 ETH gain
Adaptive Strategy
The optimizer should treat CI as a risk dial:
| Market Regime | CI | AS | AW | Rationale |
|---|---|---|---|---|
| Conservative | 0% | 10-20% | 20-40 | Maximum protection; floor at 30% discount |
| Balanced | 0% | 20-30% | 60-80 | Full safety with broader fee capture |
| Growth | 10% | 30-50% | 60-80 | 83% safe; more anchor liquidity |
| NEVER | ≥40% | any | any | Universally unsafe |
Why Not CI>0%?
At CI=0%, adjusted VWAP = 70% of raw VWAP (floor at 30% discount). This means:
- The floor buys KRK at a 30% discount to recent trading price
- This is highly protective — traders selling into the floor get terrible prices
- Fee revenue is IDENTICAL to higher CI values
- There is literally zero benefit to increasing CI in the current model
The only reason to increase CI would be if the 30% discount floor prevents organic price discovery — but the BullBearSweep shows this doesn't happen (anchor and discovery positions handle normal trading; the floor only matters during sell-offs).
Raw Data
Full results: analysis/sweep-FULL-4D-summary.csv (1050 rows)
CSV Schema
ci,anchor_share,anchor_width,discovery_depth,trader_pnl,bull_spent,
lm_eth_start,lm_eth_after_bull,lm_eth_end,lm_retention_pct,floor_moved,
lm_eth_trough,drawdown_bps,sell_attempts,lm_net_gain,
fee_weth_bull,fee_krk_bull,fee_weth_total,fee_krk_total
All monetary values in wei (18 decimals). CI/AS/DD scaled to 18 decimals. AW in raw tick count. drawdown_bps and retention_pct in basis points.
Generated: 2026-02-08 Sweep: 1050 combos (10 CI x 7 AS x 5 AW x 3 DD) via BullBearSweep.s.sol Commit: 0e2104b (sqrt price bug + outstandingSupply fix) Branch: fix/floor-ratchet