DD-FORECAST-LAB.md
Versione: 1.0 Data: 2025-10-27 Scopo: Descrivere l’architettura, i componenti e i flussi di dati del sottosistema “Forecast Lab”. Documento Principale: FIRE 25.07 - ARCHITECTURE-OVERVIEW
1. Panoramica e Filosofia
Il “Forecast Lab” è la sinapsi dedicata all’analisi predittiva. Fornisce un ambiente integrato per due attività distinte ma complementari:
- Generazione di Previsioni (Live Forecast): Permette all’utente di applicare un modello predittivo (es. TimesFM) ai dati attualmente visualizzati sul grafico per ottenere una previsione immediata del futuro.
- Validazione del Modello (Model Backtester): Permette di valutare le performance storiche del modello predittivo su un dato ticker, eseguendo un backtest rigoroso di tipo “rolling-origin” per misurarne l’accuratezza nel tempo.
La filosofia è fornire non solo uno strumento per “guardare avanti”, ma anche un metodo robusto per capire quanto ci si può fidare di quella previsione.
2. Architettura e Componenti Chiave
L’architettura del Lab è modulare, con un contenitore principale che ospita due sottosistemi quasi indipendenti.
ForecastLabWidget(Contenitore Principale):- Responsabilità: Un semplice
QTabWidgetche serve da punto di ingresso per l’utente, ospitando le due funzionalità principali in schede separate: “Live Forecast” e “Model Backtester”.
- Responsabilità: Un semplice
2.1 Sottosistema “Live Forecast”
-
ForecastManagerTab(Componente UI):- Responsabilità: Fornire l’interfaccia per avviare una previsione. Si occupa di raccogliere le opzioni di visualizzazione (es. quali intervalli di confidenza mostrare) e di emettere un segnale
forecast_requestedquando l’utente clicca il pulsante. Non gestisce dati, ma delega l’orchestrazione aMainWindow.
- Responsabilità: Fornire l’interfaccia per avviare una previsione. Si occupa di raccogliere le opzioni di visualizzazione (es. quali intervalli di confidenza mostrare) e di emettere un segnale
-
TimesFMForecastWorker(Worker Asincrono):- Responsabilità: Eseguire il calcolo della previsione in un thread separato. Riceve la serie storica dei prezzi e produce un dizionario contenente la previsione puntuale e gli intervalli di confidenza.
-
LightweightChartWidget(Visualizzazione):- Responsabilità: Il grafico principale dell’applicazione. Riceve i risultati dal worker (attraverso
MainWindow) e ha la capacità di disegnare la previsione come un overlay sui dati di prezzo esistenti.
- Responsabilità: Il grafico principale dell’applicazione. Riceve i risultati dal worker (attraverso
2.2 Sottosistema “Model Backtester”
-
ForecastBacktestWidget(Componente UI):- Responsabilità: Fornire l’interfaccia per configurare, avviare e monitorare un backtest del modello. Raccoglie parametri specifici (es. dimensione della finestra di training) e legge il contesto (ticker, date) da
AppState. Mostra il progresso dell’analisi ma delega la visualizzazione dei risultati.
- Responsabilità: Fornire l’interfaccia per configurare, avviare e monitorare un backtest del modello. Raccoglie parametri specifici (es. dimensione della finestra di training) e legge il contesto (ticker, date) da
-
ForecastBacktestWorker(Worker Asincrono):- Responsabilità: Eseguire il complesso backtest “rolling-origin” in background. Itera sulla serie storica, ri-addestrando il modello a ogni passo e calcolando l’errore di previsione. Produce un dizionario completo con i risultati.
-
ForecastResultsWidget(Dashboard dei Risultati):- Responsabilità: Un cruscotto specializzato e dinamico per visualizzare i risultati del backtest. Viene creato da
MainWindowquando i dati sono pronti. UtilizzaQCPlotlyChartWidgetper mostrare grafici interattivi (previsioni vs. dati reali, andamento dell’errore) e fornisce funzionalità di esportazione.
- Responsabilità: Un cruscotto specializzato e dinamico per visualizzare i risultati del backtest. Viene creato da
3. Flussi dei Dati
3.1 Flusso “Live Forecast”
- Input (UI): L’utente seleziona le opzioni di visualizzazione nel
ForecastManagerTabe clicca “Esegui previsione”. - Trigger (Segnale):
ForecastManagerTabemetteforecast_requested. - Orchestrazione (
MainWindow): Lo slot inMainWindowriceve il segnale, recupera i dati di prezzo attuali dal pannello del grafico, istanzia ilTimesFMForecastWorkere lo avvia. - Esecuzione (Background): Il worker calcola la previsione.
- Visualizzazione (Overlay): Al termine, il worker emette un segnale
finished.MainWindowriceve i risultati e li passa alLightweightChartWidget, che li disegna come overlay sul grafico principale.
3.2 Flusso “Model Backtester”
- Input (UI): L’utente imposta i parametri nel
ForecastBacktestWidgete clicca “Run Backtest”. - Trigger (Segnale):
ForecastBacktestWidgetemettebacktest_requestedcon i parametri. - Orchestrazione (
MainWindow): Lo slot inMainWindowrecupera i dati storici necessari, istanzia ilForecastBacktestWorkere lo avvia. - Monitoraggio (UI): Il
ForecastBacktestWidgetascolta i segnali di progresso del worker e aggiorna la sua UI (barra di progresso, log). - Risultati Pronti (Segnale): Al termine, il worker emette
finished.ForecastBacktestWidgetriceve i risultati e li ri-emette tramite il suo segnaleresults_ready. - Visualizzazione (Nuovo Pannello):
MainWindowriceve il segnaleresults_ready, istanzia un nuovoForecastResultsWidget, gli passa i dati e lo mostra all’utente come un nuovo pannello (dock).