b3d4ab7150
Stage 1 dello shadow per il Price Ladder (config finale: BTC 1h range1.5 rd0.20 ru0.06 L6 sl0.10 tp0.03). GridWorker (src/live/grid_worker.py) gira sul feed LIVE e contabilizza l'equity mark-to-market col motore CANONICO grid_mtm (parita' col backtest per costruzione), SENZA piazzare ordini reali (sim/paper). Stato persistente + resume. grid_mtm esteso con param df=None (retro-compatibile: il feed live passa il df; None = _load come prima, gate invariato — BTC ladder 10.8/5.9, PORT06 base 8.18 identici). Validazione validate_grid_worker.py: [A] full-tick == grid_mtm esatto, [B] replay incrementale converge esatto, [C] resume entro la persistenza (4 dec) -> VALIDAZIONE OK. NB SICUREZZA: nessuna modifica a runner/portfolios.yml/_defs -> il sistema mainnet (€500 reali) e' INTATTO; il worker e' inerte finche' non wirato. L'esecuzione REALE (griglia di LIMIT resting su Deribit, fill parziali/episodi) e' lo stage 2-3, dietro testnet + autorizzazione esplicita. Il runner avvia ordini reali solo per kind in (single,ml); kind=grid resta sim per costruzione. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>