harb/onchain/analysis/PARAMETER_SEARCH_RESULTS.md

358 lines
15 KiB
Markdown
Raw Permalink Normal View History

# 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)
```solidity
// 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)
```solidity
// 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:
```solidity
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:
1. **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.**
2. **anchorWidth** — Secondary safety factor. Each +20 ticks increases avg PnL by ~8 ETH.
Narrow anchor (20) maximizes resistance; wide (100) allows more traversal.
3. **anchorShare** — Tertiary. Higher AS means less floor ETH. Effect is ~5 ETH per +20%.
4. **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*