DD-MARKET-INSIGHTS.md

Versione: 1.0 Data: 2025-10-27 Scopo: Descrivere l’architettura reattiva e il flusso di dati del sottosistema Market Insights. Documento Principale: FIRE 25.07 - ARCHITECTURE-OVERVIEW


1. Panoramica e Principi di Design

Il “Market Insights” è il “microscopio” di FIRE. Il suo scopo è fornire un’analisi quantitativa approfondita (statistiche descrittive, riconoscimento di pattern) su un singolo ticker, fungendo da cruscotto dinamico per comprenderne la “personalità” storica.

Il principio di design fondamentale di questo sottosistema è la reattività totale. A differenza di altri pannelli che richiedono un’azione esplicita dell’utente (es. “Run Scan”), il Market Insights è progettato per aggiornarsi automaticamente in risposta ai cambiamenti del contesto globale.


2. Architettura e Componenti Chiave

  • MarketInsightsWidget (Componente UI Reattivo):

    • Responsabilità: È il contenitore principale dei risultati. La sua responsabilità chiave è ascoltare i segnali di cambiamento emessi da AppState. Quando rileva un cambiamento nel ticker o nell’intervallo di date globale, avvia automaticamente un’analisi in background. Non contiene controlli di input manuali.
  • DataAnalysisWorker (Worker Asincrono):

    • Responsabilità: Eseguire tutti i calcoli statistici e di pattern recognition in un thread separato per non bloccare mai la UI. Riceve i parametri (ticker, date, tipo di analisi) dal MarketInsightsWidget.
  • AppState (Fonte di Verità):

    • Responsabilità: Agisce come trigger per l’intero sottosistema. I segnali ticker_changed e global_date_range_changed di AppState sono il motore che guida il funzionamento reattivo del pannello.
  • PandasTableModel (Modello Dati):

    • Responsabilità: Un modello Qt standard che funge da ponte tra i dati tabellari prodotti dal worker (in formato pandas.DataFrame) e la QTableView della UI, garantendo performance e una corretta visualizzazione.

3. Flusso dei Dati (Architettura Reattiva)

  1. Trigger (Evento Globale): L’utente compie un’azione che modifica lo stato globale. Ad esempio:
    • Seleziona un nuovo ticker nel Watchlist Manager.
    • Cambia le date nella toolbar principale.
  2. Reazione (Segnale e Slot): AppState emette un segnale (es. ticker_changed). Il MarketInsightsWidget, che è connesso a questo segnale, esegue il suo slot _trigger_analysis.
  3. Orchestrazione (Thread Principale): Lo slot _trigger_analysis legge il contesto attuale da AppState (il nuovo ticker, le nuove date) e il tipo di analisi selezionato nella sua UI. Quindi, istanzia e avvia il DataAnalysisWorker in un nuovo thread.
  4. Esecuzione (Thread in Background): Il worker recupera i dati tramite il DataManager, esegue i calcoli e, al termine, emette un segnale finished con i risultati.
  5. Visualizzazione (UI): Lo slot on_analysis_finished nel MarketInsightsWidget riceve i risultati, li passa al PandasTableModel e aggiorna la QTableView, presentando i nuovi dati all’utente senza che questi abbia dovuto cliccare alcun pulsante.