Завдання: продовжити DEX CHECK/USDC Aerodrome tuning з оптимізацією розміру позиції Контекст: Є DEX LP стратегія для CHECK/USDC Aerodrome CL pool на Base. Pool: ```text base_CHECK_USDC_AERODROME_2PCT token0 = USDC token1 = CHECK fee_rate conservative = 0.002515 period = 2026-02-01 → 2026-04-30 Swap events = 133474 ``` Дані: ```text DEX_DATA/fast_npz/base_CHECK_USDC_2PCT_2026_02_05_fee_replay_v2.npz DEX_DATA/fast_npz/base_CHECK_USDC_2PCT_2026_02_05_fee_replay_v2.meta.json ``` Поточні файли: ```text dex_platform/data_collectors/build_cl_fee_replay_npz_v2.py dex_platform/backtest/cl_fee_replay_fast_npz_v2.py dex_platform/scripts/build_check_2pct_fee_npz_v2.sh dex_platform/scripts/run_check_2pct_fast_npz_april_v2.sh dex_platform/scripts/tune_check_2pct_fast_npz_v2.sh ``` Проблема: Поточний v2 backtester уже виправив fee share: ```python share = our_liquidity / (active_liquidity + our_liquidity) ``` Але tuning досі використовує фіксований capital, наприклад `$1000`. Для цього pool-а `$1000` занадто великий. На April test max liquidity share доходить до 70–82%, тому такі результати не можна вважати реалістичними. Попередній local capacity test показав приблизно: ```text $50 — реалістично, p95 share низький $100 — добрий стартовий live-size $250 — вже зависокий для p95<=5% $1000 — нереалістично для цього pool-а ``` Орієнтовні capacity-aware кандидати: ```text wide_90_5 capital ~$150–170 wide_95_2 capital ~$150–190 wide_80_5 capital ~$100–140 wide_70_5 capital ~$100–115, aggressive ``` Ціль: Переробити tuner так, щоб він оптимізував не тільки range, а й розмір позиції. Потрібна нова версія повними файлами, не патчами: ```text dex_platform/backtest/cl_fee_replay_fast_npz_v3.py dex_platform/scripts/tune_check_2pct_capacity_v3.sh dex_platform/scripts/run_check_2pct_capacity_walkforward_v3.sh docs/NEW_CHAT_TASK_DEX_CAPACITY_TUNER_V3.md ``` Вимоги до `cl_fee_replay_fast_npz_v3.py`: 1. Залишити всю логіку v2: * load NPZ * time filtering * static range * periodic rebalance * out-of-range-only rebalance * corrected fee share * fee accounting: * fees_earned_total * fees_reinvested * fees_uncollected_end * rebalance_costs 2. Додати optimization по capital: CLI параметри: ```bash --capital-grid 25,50,75,100,125,150,175,200,250,300,500,1000 --capital-mode fixed|grid|auto_cap --target-share-pct 5 --share-cap-metric avg|p95|p99|max --max-avg-liquidity-share-pct 3 --max-p95-liquidity-share-pct 5 --max-p99-liquidity-share-pct 10 --max-liquidity-share-pct 25 ``` 3. Для кожного strategy/range/capital рахувати: ```text capital_usd return_pct mdd_pct equity_end_usd fees_earned_total fees_reinvested fees_uncollected_end rebalance_costs position_value_end_usd time_in_range_pct avg_liquidity_share_pct_when_in_range p95_liquidity_share_pct_when_in_range p99_liquidity_share_pct_when_in_range max_liquidity_share_pct_when_in_range hodl50_return_pct vs_hodl50_usd score ``` 4. Додати capacity-aware score: Базово: ```text score = return_pct - w_mdd * max(0, abs(mdd_pct) - target_mdd_pct) - w_avg_share * max(0, avg_share - max_avg_share) - w_p95_share * max(0, p95_share - max_p95_share) - w_p99_share * max(0, p99_share - max_p99_share) - w_max_share * max(0, max_share - max_max_share) - w_rebalance * rebalances ``` Параметри: ```bash --target-mdd-pct 25 --w-mdd 2 --w-avg-share 5 --w-p95-share 10 --w-p99-share 3 --w-max-share 0.5 --w-rebalance 0.02 ``` Важливо: не використовувати hard cap тільки по max, бо max share може бути шумовим spike на одному swap. Основний cap має бути по `p95` і `avg`. 5. Додати `auto_cap` mode: Для кожної range-конфігурації tuner має сам підібрати максимально допустимий capital, який виконує: ```text avg_share <= 3% p95_share <= 5% p99_share <= 10% ``` Виводити: ```text deployable_capital_usd unused_capital_usd return_on_deployed_capital_pct return_on_total_capital_pct ``` Для total capital можна прийняти `$1000`, але якщо deployable тільки `$150`, то: ```text return_on_deployed_capital = прибуток / $150 return_on_total_capital = прибуток / $1000 ``` 6. Додати month/walk-forward режим. Потрібні тести: ```text April only: 2026-04-01 → 2026-05-01 Feb: 2026-02-01 → 2026-03-01 Mar: 2026-03-01 → 2026-04-01 Quarter: 2026-02-01 → 2026-05-01 ``` Walk-forward: ```text Tune Feb → evaluate Mar Tune Mar → evaluate Apr Tune Feb+Mar → evaluate Apr ``` 7. Додати output: Для кожного запуску: ```text summary.csv summary.json best_by_score.csv best_by_return.csv best_capacity_by_strategy.csv monthly_breakdown.csv ``` Якщо `--plots`, створити: ```text plots/equity_top_score.png plots/return_vs_capital.png plots/p95_share_vs_capital.png plots/score_heatmap_lower_upper.png ``` 8. Перший tune command: ```bash python3 dex_platform/backtest/cl_fee_replay_fast_npz_v3.py \ --npz DEX_DATA/fast_npz/base_CHECK_USDC_2PCT_2026_02_05_fee_replay_v2.npz \ --out-dir DEX_REPORTS/check_2pct_capacity_tune_april_v3 \ --fee-rates metadata_0_2515:0.002515 \ --time-from 2026-04-01T00:00:00Z \ --time-to 2026-05-01T00:00:00Z \ --capital-mode grid \ --capital-grid 25,50,75,100,125,150,175,200,250,300,500,1000 \ --grid-lower 60,70,80,85,90,95 \ --grid-upper 1,2,3,5,8,10 \ --target-mdd-pct 25 \ --max-avg-liquidity-share-pct 3 \ --max-p95-liquidity-share-pct 5 \ --max-p99-liquidity-share-pct 10 \ --max-liquidity-share-pct 25 \ --plots ``` 9. Другий tune command — auto-cap: ```bash python3 dex_platform/backtest/cl_fee_replay_fast_npz_v3.py \ --npz DEX_DATA/fast_npz/base_CHECK_USDC_2PCT_2026_02_05_fee_replay_v2.npz \ --out-dir DEX_REPORTS/check_2pct_capacity_auto_april_v3 \ --fee-rates metadata_0_2515:0.002515 \ --time-from 2026-04-01T00:00:00Z \ --time-to 2026-05-01T00:00:00Z \ --capital-mode auto_cap \ --initial-capital-usd 1000 \ --grid-lower 60,70,80,85,90,95 \ --grid-upper 1,2,3,5,8,10 \ --target-share-pct 5 \ --share-cap-metric p95 \ --max-avg-liquidity-share-pct 3 \ --max-p95-liquidity-share-pct 5 \ --max-p99-liquidity-share-pct 10 \ --plots ``` 10. Success criteria: * Tuner не вибирає `$1000`, якщо p95/max share нереалістичні. * Для кожного range видно recommended capital. * Для April має знайти реалістичні конфіги приблизно в зоні `$100–200`. * Повертає champion не тільки по return, а по score. * Виводить окремо: * best capital for `wide_90_5` * best capital for `wide_95_2` * best capital for `wide_80_5` * aggressive candidate `wide_70_5` * Результат має бути готовий для live recommendation: * strategy name * lower_pct * upper_pct * recommended capital * expected monthly return * MDD * p95 share * p99 share * max share * time in range 11. Не чіпати: ```text DEX_DATA/ DEX_REPORTS/ .venv* .env старі CEX backtest files ``` 12. Після виконання дати: ```text 1. zip bundle із повними файлами 2. commands 3. top-10 configs by score 4. top-10 configs by return 5. короткий висновок: який capital і range ставити в live test ```