83c4e7a334
Bug di wiring: runner.py avvolgeva lo sleeve SH01 nel MLWorkerWrapper legacy di multi_runner, che usa SignalEngine (famiglia squeeze ML01 SCARTATA), apre con Signal nudo ed esce a hold_bars=3 con tick() propria. Risultato: lo sleeve "SH01" del portafoglio live NON eseguiva SH01_shape_ml (generate_signals mai chiamata) e il fix horizon-exit era in un ramo morto -> SH01 continuava a chiudere a hold_limit/3. Fix: SH01 (kind="ml") gira come StrategyWorker normale. SH01_shape_ml. generate_signals fa il walk-forward internamente ad ogni tick ed emette metadata.max_bars=H=12 -> exit via StrategyWorker.tick (orizzonte H, fix applicato). Rimosso l'import/uso di MLWorkerWrapper e il blocco train esterno. ml_wf_entries ha train_min=4000 (>=4000 barre 1h per produrre segnali): aggiunto _ML_LOOKBACK_DAYS=365 cosi gli asset di sleeve ml fetchano >=365g (~8760 barre), senza dipendere dal fetch 440g di TSM01/ROT02. generate_signals su 365g: 0,17-0,24s (logit) -> trascurabile sul poll 60s. Test: test_build_ml_sh01_is_plain_strategyworker (StrategyWorker + strategy SH01_shape_ml + niente engine squeeze). Suite: 51 passed. Stato live: SH01 BTC/ETH flat -> contatori resettati (capitale preservato), trade squeeze archiviati. Rebuild+recreate: 14 worker RESUME puliti, healthy. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diario di Ricerca — PythagorasGoal
Registro cronologico di ogni passo del progetto: decisioni, esperimenti, risultati attesi e reali.
Formato entry
Ogni entry segue il formato:
### YYYY-MM-DD HH:MM — Titolo
**Cosa:** descrizione azione
**Perché:** motivazione
**Atteso:** risultato previsto
**Reale:** risultato effettivo
**Note:** osservazioni, lezioni apprese