DD-BACKTESTING.md
Versione: 2.0 (resto del documento)
DD-BACKTESTING.md
Versione: 2.0 Data: 2025-10-26 Scopo: Descrivere in dettaglio l’architettura, i pattern e il flusso di dati del sottosistema di Backtesting. Documento Principale: FIRE 25.07 - ARCHITECTURE-OVERVIEW
1. Panoramica e Responsabilità
Il sottosistema di Backtesting è il cuore analitico di FIRE. La sua responsabilità principale è eseguire una strategia di trading su un set di dati storici per simularne il comportamento e valutarne la performance in modo oggettivo.
Il sistema è progettato per produrre un’analisi di livello istituzionale, fornendo non solo un log delle operazioni, ma un set completo di metriche di rischio/rendimento e visualizzazioni grafiche per una valutazione approfondita.
2. Architettura e Componenti Chiave
Il sottosistema segue rigorosamente il principio della “UI 100% Reattiva”. La logica di business è completamente disaccoppiata dall’interfaccia utente per garantire che calcoli potenzialmente lunghi non blocchino mai l’applicazione.
-
BacktestTabWidget(Componente UI):- Responsabilità: Agisce come pannello di controllo reattivo per il backtesting. Non raccoglie più direttamente gli input di contesto (ticker, date), ma reagisce ai cambiamenti dello stato globale gestito da
AppState. Il suo compito è avviare le operazioni e presentare i risultati finali.
- Responsabilità: Agisce come pannello di controllo reattivo per il backtesting. Non raccoglie più direttamente gli input di contesto (ticker, date), ma reagisce ai cambiamenti dello stato globale gestito da
-
BacktestWorker(Worker Asincrono -QRunnable):- Responsabilità: Orchestrare l’intero processo di backtesting in un thread separato. È il punto di contatto tra il mondo della UI e la logica di calcolo. Non interagisce mai direttamente con i widget, ma comunica i risultati tramite segnali Qt.
-
DataManager(Servizio Core):- Responsabilità: Fornire i dati storici richiesti dal worker. Abstrae la fonte dei dati (CSV, API, etc.).
- Approfondimento: DD-DATA-CONNECTORS.md
-
BacktestEngine(Motore di Calcolo):- Responsabilità: Eseguire il ciclo di backtesting “barra per barra” (iterativo). Applica la logica della strategia (
init/next) ai dati storici e restituisce la lista grezza delle operazioni (trades) generate.
- Responsabilità: Eseguire il ciclo di backtesting “barra per barra” (iterativo). Applica la logica della strategia (
-
ChartingTabsWidgete altri widget di visualizzazione:- Responsabilità: Ricevere i dati elaborati e visualizzarli in formati appropriati (grafico a candele, curva di equity, tabella delle statistiche, log delle operazioni).
3. Flusso dei Dati
Il flusso di dati è unidirezionale, state-driven e progettato per garantire il disaccoppiamento.
-
Impostazione del Contesto (Stato Globale): L’utente definisce il contesto per l’analisi: a. Seleziona un ticker dal
WatchlistManagerTab. b. Imposta l’intervallo di date globale tramite i controlli nella Toolbar principale. c. Queste azioni aggiornano le proprietàcurrent_tickereglobal_date_rangeinAppState. -
Azione (UI): L’utente clicca il pulsante “Run Backtest” nel
BacktestTabWidget. -
Orchestrazione (Thread Principale):
MainWindowistanzia ilBacktestWorker. Il worker recupera i parametri di contesto (ticker, date) direttamente daAppStatee viene avviato in un thread separato. -
Esecuzione (Thread in Background): Il
BacktestWorkeresegue i seguenti passaggi in sequenza: a. Richiede i dati storici alDataManagerusando i parametri di contesto. b. Passa i dati e la strategia alBacktestEngine. c. Riceve dal motore la lista grezza delle operazioni. d. Calcola un set completo di risultati: statistiche, metriche di performance, curva di equity, log delle operazioni, etc. e. Impacchetta tutti questi dati in un unico dizionarioresults. -
Comunicazione (Segnale): Una volta completata l’elaborazione, il
BacktestWorkeremette un segnalefinished(results). -
Visualizzazione (UI): a.
BacktestTabWidgetriceve il dizionarioresults. b. I dati vengono smistati ai vari componenti UI (tabella delle statistiche,TradeLogWidget,ChartingTabsWidget).
4. Guide Pratiche (Opzionale)
Al momento non sono state identificate guide pratiche specifiche per questo sottosistema che non siano già coperte dalla documentazione dell’API delle Strategie.