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:
- 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.
- Manutenzione Inutile: Manteniamo codice nel
BacktestWorker(_calculate_volatility_regimes) e nelLWCOverlayManager(_draw_volatility_background) che non dovrebbe più esistere. - 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.
- Accoppiamento Indesiderato: Il
BacktestWorkerha 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 dizionarioresultsche 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 listaBACKTEST_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 bloccoif self.show_volatility: ...che aggiungeoverlays["volatility_regimes"]. - Azione 3: Rimuovere l’attributo
self.show_volatilitydall’__init__.
Fase 4: Rimozione del Trigger (UI)
- File: Probabilmente
fire/ui_components/chrome_manager.pyomain_window.py(dove viene costruita la toolbar/menubar). - Azione 1: Identificare la
QAction(oQCheckBox) “Show Volatility Regimes”. - Azione 2: Rimuovere la sua creazione.
- Azione 3: Rimuovere la connessione del suo segnale
toggledallo slotplotting_handler.toggle_volatility_regimes.
4. Test di Verifica Post-Refactoring
Dopo aver applicato tutte le modifiche:
- Test 1 (Verifica Rimozione): Avviare l’applicazione e assicurarsi che l’opzione “Show Volatility Regimes” sia scomparsa dalla UI.
- 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).
- Caricare la strategia
- Test 3 (Test di Non-Regressione):
- Caricare la strategia
MultiPanelTestStrategy. - Eseguire un backtest.
- Verificare che il layout multi-pannello funzioni ancora perfettamente.
- Caricare la strategia
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.