DESIGN DOC: Architettura Batch Backtest & Comparative Analysis
Stato: Draft per Revisione Obiettivo: Ridisegnare la Tab Backtest per supportare l’esecuzione, il confronto e l’analisi di molteplici strategie simultaneamente senza cluttering visivo.
1. Il Problema Attuale (UX/UI Mismatch)
L’attuale interfaccia è progettata per il Single-Run Paradigm:
- Spazio: Il
StrategySelectorWidget“inline” ruba spazio prezioso al grafico e ai risultati. - Ambiguità Dati: La tabella dei risultati mostra un solo set di metriche. Se eseguo 3 strategie, quale sto guardando?
- Caos Visivo: Sovrapporre i segnali di 3 strategie diverse sullo stesso grafico crea “rumore” illeggibile. Una Equity Line aggregata (somma di tutte) non ha senso statistico per la comparazione.
2. La Nuova Visione: “Leaderboard & Drill-Down”
Proponiamo un’architettura Master-Detail.
2.1. Workflow Utente
- Configurazione (Modale): L’utente clicca “Configure Batch…“. Si apre un dialogo (simile allo Scanner) dove seleziona le strategie (es. RSI, MACD, Bollinger) e i parametri.
- Esecuzione: Lancia il Batch.
- Leaderboard (Master): Al termine, appare una Tabella Comparativa (una riga per strategia).
- Colonne: Nome Strategia | Net Profit % | Max DD | Win Rate | Profit Factor | # Trades.
- Ordinamento: L’utente può ordinare per Profitto o Drawdown per trovare la migliore.
- Analisi (Detail):
- L’utente clicca una riga nella Leaderboard (es. “RSI Strategy”).
- Il Grafico si pulisce e mostra solo i segnali di quella strategia.
- La Equity Line mostra solo la curva di quella strategia.
- I Dettagli mostrano la tabella completa delle metriche per quella strategia.
3. Specifiche Tecniche dei Componenti
A. UI: Il Pannello di Controllo (BacktestTabWidget)
Deve essere ripulito drasticamente.
- Top Bar:
- Bottone “⚙️ Configure Strategies”: Apre il
BatchConfigDialog(nuovo, basato su quello dello Scanner). - Bottone ”▶ Run Batch”: Lancia l’esecuzione sequenziale delle strategie selezionate.
- Label riassuntiva: “3 Strategies Selected” (o simile).
- Bottone “⚙️ Configure Strategies”: Apre il
- Area Centrale (Splitter Orizzontale):
- Sinistra (Risultati):
- In alto:
BatchResultsTable(La Leaderboard). - In basso:
DetailedStatsTable(Le metriche dettagliate della riga selezionata).
- In alto:
- Destra (Visualizzazione): Il Grafico (Chart + Equity).
- Sinistra (Risultati):
B. Logica: Il Batch Orchestrator
Il BacktestOrchestrator deve evolvere per gestire un ciclo:
def run_batch(self, strategies_config: List[Dict]):
self.batch_results = []
for config in strategies_config:
# 1. Esegui Backtest Headless (senza aggiornare il grafico)
result = self.run_single_strategy(config)
self.batch_results.append(result)
# 2. Popola la Leaderboard con tutti i risultati
self.ui.update_leaderboard(self.batch_results)
# 3. Seleziona automaticamente la prima (o la migliore) per aggiornare il grafico
self.ui.select_result(0)C. Visualizzazione: Il Principio “Context Switch”
Il grafico non deve mai mostrare più di una strategia alla volta.
- Quando l’utente seleziona una riga nella Leaderboard, viene emesso un segnale
strategy_selected(result_id). - Il
PlottingHandlerriceve i dati di quella specifica run e ridisegna il grafico da zero (o aggiorna i marker).
4. Confronto Proposta vs Attuale
| Caratteristica | Implementazione Attuale | Nuova Proposta (Batch Design) |
|---|---|---|
| Selezione | Widget ingombrante nella tab. | Dialogo pulito a scomparsa. |
| Metriche | Solo ultima esecuzione. | Tabella Comparativa (Leaderboard). |
| Grafico | Sovrapposizione o confusione. | Drill-Down: Mostra solo la strategia selezionata. |
| Equity | Ambiguita. | Specifica per la strategia selezionata. |
| Scopo | Test singolo rapido. | Ottimizzazione e Confronto. |
5. Piano di Implementazione Rivisto
Se approvi questo design, il piano cambia:
- Step 1 (Configurazione): Creare
BatchConfigDialog(copiando e adattandoSignalConfigDialogdello Scanner) per selezionare le strategie fuori dalla tab principale. - Step 2 (Modello Dati): Creare una struttura dati per tenere in memoria N risultati di backtest (
List[BacktestResult]). - Step 3 (Leaderboard UI): Implementare la
QTableViewper la Leaderboard. - Step 4 (Interaction): Collegare il click sulla Leaderboard all’aggiornamento del grafico (Plotting).
Che ne pensi? Questo design risolve i tuoi 3 punti critici:
- Spazio: Il selettore è in un popup.
- Tabella: C’è una Leaderboard chiara.
- Grafico: Mostra solo una strategia alla volta (quella che stai analizzando nella tabella).