harb/onchain/analysis/PARAMETER_SEARCH_RESULTS.md
openhands a8e186caac fix: onchain/analysis/PARAMETER_SEARCH_RESULTS.md shows stale unconditional pseudocode (#893)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 09:47:37 +00:00

357 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. CI40%: 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*