DD-MARKET-EXPLORER.md
Versione: 1.0 Data: 2025-10-10 Scopo: Descrivere in dettaglio l’architettura, i pattern e il flusso di dati del sottosistema Market Explorer. Documento Principale: FIRE 25.07 - ARCHITECTURE-OVERVIEW
1. Panoramica e Responsabilità
Il “Market Explorer” è il laboratorio di analisi statistica di FIRE. Il suo scopo è permettere agli utenti di scoprire “edge”, pattern e la “personalità” di un asset finanziario prima di dedicare tempo alla scrittura di una strategia di trading completa.
Fornisce una suite di strumenti di visualizzazione (heatmap, box plot, etc.) per analizzare i dati di mercato da diverse prospettive, rispondendo a domande come: “Quali sono le ore più volatili?” o “Esistono tendenze stagionali?“.
2. Architettura e Componenti Chiave
Come per tutti i sottosistemi di FIRE che eseguono calcoli, l’architettura è basata sulla separazione tra UI e logica di business tramite worker asincroni.
-
ExplorerTabWidget(Componente UI):- Responsabilità: Fornire l’interfaccia utente per selezionare un ticker, un intervallo di date e il tipo di analisi desiderata. Si occupa anche di visualizzare il risultato finale, gestendo quale grafico mostrare tramite un
QStackedWidget.
- Responsabilità: Fornire l’interfaccia utente per selezionare un ticker, un intervallo di date e il tipo di analisi desiderata. Si occupa anche di visualizzare il risultato finale, gestendo quale grafico mostrare tramite un
-
ExplorerWorker(Worker Asincrono -QRunnable):- Responsabilità: Eseguire l’analisi statistica in un thread separato. Riceve i parametri dalla UI, orchestra il recupero dei dati e l’esecuzione dell’analisi, e comunica il risultato tramite segnali Qt.
-
DataManager(Servizio Core):- Responsabilità: Fornire i dati storici al worker, garantendo di recuperare la granularità corretta (dati giornalieri o orari) a seconda dell’analisi richiesta.
- Approfondimento: DD-DATA-MANAGEMENT.md
-
AnalysisEngine(Motore di Analisi):- Responsabilità: Contenere la logica di calcolo effettiva. È implementato come una classe di utility con metodi statici (o di classe), ognuno dedicato a un tipo specifico di analisi (es.
calculate_hourly_heatmap). Utilizza pesantemente la libreriapandasper la manipolazione dei dati.
- Responsabilità: Contenere la logica di calcolo effettiva. È implementato come una classe di utility con metodi statici (o di classe), ognuno dedicato a un tipo specifico di analisi (es.
-
Widget di Charting Specifici (
HeatmapWidget,BoxplotWidget, etc.):- Responsabilità: Ogni widget è specializzato nel visualizzare un tipo specifico di dato prodotto dall’
AnalysisEngine.
- Responsabilità: Ogni widget è specializzato nel visualizzare un tipo specifico di dato prodotto dall’
3. Flusso dei Dati
Il flusso segue il pattern standard di FIRE per le operazioni asincrone.
- Input (UI): L’utente seleziona i parametri nell’
ExplorerTabWidgete avvia l’analisi. - Orchestrazione (Thread Principale):
MainWindowistanzia l’ExplorerWorkercon i parametri specificati e lo avvia in un thread separato. - Esecuzione (Thread in Background): L’
ExplorerWorkeresegue i seguenti passaggi: a. Richiede i dati storici alDataManager. b. Invoca il metodo di analisi appropriato nell’AnalysisEngine, passandogli i dati. c. Riceve il risultato (es. la matrice di dati per la heatmap) e lo impacchetta in un dizionario. - Comunicazione (Segnale): L’worker emette un segnale
finishedcon il dizionario contenente i risultati. - Visualizzazione (UI):
a. L’
ExplorerTabWidgetriceve i risultati. b. Seleziona il widget di charting corretto all’interno del suoQStackedWidget. c. Passa i dati al widget di charting specifico, che si occupa di renderizzare la visualizzazione grafica.
4. Guide Pratiche
4.1. Come Aggiungere una Nuova Analisi al Market Explorer
-
Implementa la Logica (
AnalysisEngine):- Apri
fire/synapses/explorer/analysis_engine.py. - Aggiungi un nuovo metodo statico che accetti un DataFrame
pandascome input e restituisca i dati elaborati nel formato richiesto dalla tua visualizzazione.
- Apri
-
Integra nel Worker (
ExplorerWorker):- Modifica l’worker per riconoscere il nuovo tipo di analisi. Aggiungi una condizione
if/elifche chiami il nuovo metodo che hai creato nell’AnalysisEngine.
- Modifica l’worker per riconoscere il nuovo tipo di analisi. Aggiungi una condizione
-
Crea il Widget di Visualizzazione:
- Sviluppa un nuovo widget Qt (es.
NuovaAnalisiWidget) in grado di ricevere i dati prodotti dal tuo nuovo metodo e di visualizzarli graficamente (usando Matplotlib, PyQtGraph, etc.).
- Sviluppa un nuovo widget Qt (es.
-
Integra nella UI (
ExplorerTabWidget):- Aggiungi una nuova opzione nella UI per permettere all’utente di selezionare la tua nuova analisi.
- Aggiungi il tuo
NuovaAnalisiWidgetalQStackedWidget. - Aggiorna lo slot che riceve il segnale
finisheddal worker per attivare e passare i dati al tuo nuovo widget quando l’analisi corrispondente viene completata.