DD-BACKTESTING.md
Versione: 1.0 Data: 2025-10-10 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à: Raccogliere gli input dell’utente (ticker, intervallo di date, strategia selezionata, opzioni di visualizzazione) e presentare i risultati finali. Agisce da orchestratore lato UI ma non contiene logica di business.
-
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-MANAGEMENT.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 e progettato per garantire il disaccoppiamento e la reattività.
- Input (UI): L’utente definisce i parametri nel
BacktestTabWidgete avvia l’analisi. - Orchestrazione (Thread Principale):
MainWindowistanzia ilBacktestWorker, gli passa i parametri necessari e lo avvia in un thread separato. L’interfaccia utente rimane immediatamente disponibile per altre interazioni. - Esecuzione (Thread in Background): Il
BacktestWorkeresegue i seguenti passaggi in sequenza: a. Richiede i dati storici alDataManager. b. Passa i dati e la strategia alBacktestEngineper l’esecuzione del ciclo iterativo. c. Riceve dal motore la lista grezza delle operazioni. d. Calcola un set completo di risultati: statistiche di base, metriche di performance avanzate (Max Drawdown, Sharpe Ratio, Calmar Ratio, etc.), la curva di equity, il log delle operazioni e dati di analisi aggiuntivi (es. regimi di volatilità). e. Impacchetta tutti questi dati in un unico dizionarioresults. - Comunicazione (Segnale): Una volta completata l’elaborazione, il
BacktestWorkeremette un segnalefinished(results). - Visualizzazione (UI):
a.
MainWindow(oBacktestTabWidget) riceve il dizionarioresults. b. I dati vengono smistati ai vari componenti UI: - Le statistiche popolano un modello dati (BacktestStatsModel). - Il log delle operazioni viene inviato alTradeLogWidget. - I dati per i grafici (prezzi, equity, segnali) vengono inoltrati alChartingTabsWidget, che agisce da router per aggiornare i singoli grafici.
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.