Piano d’Azione: Refactoring per uno Stato Globale di Contesto (Ticker & Date)
Obiettivo: Centralizzare la gestione del ticker, della data di inizio e della data di fine in AppState, e aggiornare la UI per riflettere e controllare questo stato globale.
Fase 1: Estendere il “Cervello” (AppState)
Il primo passo è potenziare AppState per renderlo la fonte di verità per il nostro nuovo contesto globale.
-
Task 1.1: Aggiungere nuove proprietà a AppState per global_start_date e global_end_date.
-
Task 1.2: Aggiungere i segnali corrispondenti (es. global_date_range_changed) per notificare i componenti della UI quando le date cambiano.
Fase 2: Aggiornare la “Cabina di Pilotaggio” (La Toolbar)
Il secondo passo è fornire all’utente i controlli per modificare questo nuovo stato globale.
-
Task 2.1: Modificare main_window.py e chrome_manager.py per aggiungere due widget QDateEdit alla toolbar principale.
-
Task 2.2: Collegare questi nuovi QDateEdit in modo che, quando l’utente cambia una data, aggiornino le proprietà corrispondenti in AppState.
Fase 3: Adattare i “Passeggeri” (I Pannelli Esistenti)
Questo è il passo più lungo. Dobbiamo modificare ogni pannello che dipende da ticker e date per farlo “obbedire” allo stato globale. Inizieremo con il pannello più importante, quello di backtest, e poi procederemo con gli altri.
-
Task 3.1: Refactoring di backtest_tab_widget.py (Controls & Backtest)
-
Modificare la UI per rimuovere i QDateEdit locali. Al loro posto, mostreremo delle QLabel che visualizzano le date globali correnti.
-
Modificare la logica per leggere le date da AppState invece che dai widget locali quando l’utente clicca “Load Chart” o “Run Backtest”.
-
Sottoscrivere il widget ai segnali di cambiamento di AppState per aggiornare le QLabel in tempo reale.
-
-
Task 3.2: Refactoring degli Altri Pannelli (es. market_insights_widget.py, etc.)
- Applicheremo lo stesso pattern: rimuovere gli input di data locali e leggere dallo stato globale.
Fase 4: Implementare la Flessibilità (L’Opzione “Override”)
Una volta che il sistema globale funziona, implementeremo la mitigazione che abbiamo discusso per non perdere flessibilità.
-
Task 4.1: Aggiungere a un pannello (es. backtest_tab_widget.py) un QCheckBox “Use Custom Date Range”.
-
Task 4.2: Se il checkbox è deselezionato, il pannello usa le date globali. Se è selezionato, appaiono i QDateEdit locali che permettono all’utente di definire un intervallo specifico solo per quell’operazione.