Analisi e Piano di Risoluzione: Debito Tecnico “Legacy Volatility Rendering”

1. Sommario Esecutivo (Il “Cosa”)

Abbiamo implementato con successo un sistema generico (strategy.bgcolor()) che permette a qualsiasi strategia di colorare lo sfondo del grafico. Questo rende obsoleto il meccanismo precedente, che era hardcoded, specifico per la volatilità e attivato da un toggle nella UI.

Questo debito tecnico consiste nella coesistenza di entrambi i sistemi, creando ridondanza e potenziale confusione per la manutenzione futura.

2. Analisi Dettagliata del Problema (Il “Perché”)

Il codice legacy impatta negativamente il progetto in 4 aree:

  1. Confusione per gli Sviluppatori: Un nuovo membro del team vedrebbe due modi per colorare lo sfondo, senza capire quale sia quello corretto da usare o estendere.
  2. Manutenzione Inutile: Manteniamo codice nel BacktestWorker (_calculate_volatility_regimes) e nel LWCOverlayManager (_draw_volatility_background) che non dovrebbe più esistere.
  3. UI Ingannevole: L’opzione “Show Volatility Regimes” nella UI ora è fuorviante. L’utente si aspetta che attivi/disattivi tutte le colorazioni di sfondo, ma agisce solo sul vecchio sistema hardcoded. La “fonte della verità” ora è la strategia stessa.
  4. Accoppiamento Indesiderato: Il BacktestWorker ha una responsabilità di calcolo (“volatility_regime”) che non gli appartiene. Questa logica dovrebbe risiedere solo nelle strategie o nell’Analytics Core, non nel worker che orchestra i processi.

3. Piano di Azione Dettagliato (Il “Come”)

Questo cleanup richiede un “taglio chirurgico” attraverso 4 livelli dell’applicazione, dal più profondo (calcolo) al più superficiale (UI).

Fase 1: Rimozione della Logica di Calcolo (Worker)

  • File: fire/synapses/backtest/backtest_worker.py
  • Azione 1: Eliminare completamente il metodo _calculate_volatility_regimes.
  • Azione 2: Rimuovere la chiamata a questo metodo e la chiave "volatility_regime" dal dizionario results che viene emesso.

Fase 2: Rimozione della Logica di Rendering (Manager)

  • File: fire/ui_components/charts/lwc_overlay_manager.py
  • Azione 1: Eliminare completamente il metodo _draw_volatility_background.
  • Azione 2: Rimuovere la chiamata a questo metodo da apply_backtest_overlays.
  • Azione 3: Rimuovere "volatility_background_series" dalla lista BACKTEST_SERIES_IDS.

Fase 3: Rimozione della Logica di Trasporto (Handler)

  • File: fire/synapses/backtest/plotting_handler.py
  • Azione 1: Eliminare completamente il metodo toggle_volatility_regimes.
  • Azione 2: Nel metodo _plot_standard_chart, rimuovere il blocco if self.show_volatility: ... che aggiunge overlays["volatility_regimes"].
  • Azione 3: Rimuovere l’attributo self.show_volatility dall’ __init__.

Fase 4: Rimozione del Trigger (UI)

  • File: Probabilmente fire/ui_components/chrome_manager.py o main_window.py (dove viene costruita la toolbar/menubar).
  • Azione 1: Identificare la QAction (o QCheckBox) “Show Volatility Regimes”.
  • Azione 2: Rimuovere la sua creazione.
  • Azione 3: Rimuovere la connessione del suo segnale toggled allo slot plotting_handler.toggle_volatility_regimes.

4. Test di Verifica Post-Refactoring

Dopo aver applicato tutte le modifiche:

  1. Test 1 (Verifica Rimozione): Avviare l’applicazione e assicurarsi che l’opzione “Show Volatility Regimes” sia scomparsa dalla UI.
  2. Test 2 (Verifica Funzionalità Sostitutiva):
    • Caricare la strategia Volatility_Regimes.py.
    • Eseguire un backtest.
    • Verificare che le bande di colore appaiano correttamente (usando parametri stretti se necessario).
  3. Test 3 (Test di Non-Regressione):
    • Caricare la strategia MultiPanelTestStrategy.
    • Eseguire un backtest.
    • Verificare che il layout multi-pannello funzioni ancora perfettamente.

5. Rischi

  • Rischio: Basso.
  • Motivazione: La funzionalità legacy è completamente isolata e la sua rimozione non ha dipendenze incrociate con altri sistemi. La nuova funzionalità (bgcolor) è già stata testata e copre interamente il caso d’uso.

Questo piano, se eseguito, lascerà il codice più pulito, più manutenibile e con una chiara separazione delle responsabilità, aderendo pienamente ai principi che abbiamo stabilito.