Perfetto, ottima scelta. Iniziare con la sinapsi “Market Lens” è il passo più logico e impattante. Daremo agli utenti un modo completamente nuovo di “vedere” il mercato.
Titolo dell’Implementazione: Sinapsi “Market Lens” - Milestone 1: Analisi del Profilo di Volume (Volume Profile)
Piano d’Azione: Milestone 1: Profilo di Volume
Obiettivo Finale della Milestone: L’utente, dopo aver caricato un grafico, può attivare un overlay che mostra il “Profilo di Volume” (un istogramma orizzontale) a lato del grafico dei prezzi, evidenziando i livelli di prezzo con il maggior volume di scambi.
Questo strumento è anche conosciuto come Volume by Price.
Fase 1: La Logica di Calcolo (Backend)
- Obiettivo: Creare la logica per calcolare i dati del profilo di volume. A differenza delle analisi precedenti, questo calcolo deve avvenire dopo il caricamento dei dati del grafico, non in un worker separato.
- Task 1.1: Creazione della Funzione di Calcolo
- File da modificare:
fire/synapses/backtest/backtest_worker.pyofire/ui_components/charts/lightweight_chart_widget.py. (Da decidere, ma propendo per il worker per mantenere i calcoli separati dalla UI). - Azione: Aggiungeremo un nuovo metodo
_calculate_volume_profile(price_data). Questo metodo:- Definirà un numero di “bin” o “livelli di prezzo” in cui raggruppare i volumi (es. 100 bin tra il minimo e il massimo del periodo).
- Itererà su ogni candela del
price_data. - Per ogni candela, distribuirà il suo volume tra i bin di prezzo che ha attraversato (dal minimo al massimo della candela).
- Restituirà una
pd.Serieso un dizionario con i livelli di prezzo come indice e il volume totale scambiato come valore.
- File da modificare:
- Task 1.2: Integrazione nel Flusso Dati
- File da modificare:
fire/synapses/backtest/backtest_worker.py - Azione: Nel metodo
run(), dopo aver caricato i dati, chiameremo_calculate_volume_profilee aggiungeremo il risultato al dizionarioresultscon la chiave'volume_profile_data'. Questo verrà fatto sia per il caricamento del grafico che per il backtest.
- File da modificare:
Risultato Fase 1: I dati numerici del profilo di volume saranno calcolati e disponibili per l’interfaccia ogni volta che vengono caricati i dati di un grafico.
Fase 2: Visualizzazione (Frontend)
- Obiettivo: Integrare la visualizzazione del profilo di volume nel nostro
LightweightChartWidget. - Task 2.1: Potenziamento del
LightweightChartWidget- File da modificare:
fire/ui_components/charts/lightweight_chart_widget.py - Azione: Questa è la parte più complessa. Dovremo modificare il nostro HTML/JS per creare un secondo “div” a lato del grafico principale.
- Modificheremo
HTML_SKELETONper avere una struttura a due colonne (es.chart-containera sinistra evolume-profile-containera destra). - Nel metodo
plot_data, prepareremo i dati del profilo di volume per il JavaScript. - Nel metodo
_generate_drawing_js, aggiungeremo il codice JS per:- Disegnare l’istogramma orizzontale nel
volume-profile-container, probabilmente usando le capacità di disegno di base di HTML/CSS/JS (creando tanti piccolidivcolorati) o una piccola libreria JS di charting. - Sincronizzare l’asse Y (prezzo) del profilo di volume con l’asse Y del grafico principale.
- Disegnare l’istogramma orizzontale nel
- Modificheremo
- File da modificare:
- Task 2.2: Aggiunta del Controllo UI
- File da modificare:
fire/synapses/backtest/backtest_tab_widget.py - Azione: Aggiungeremo una nuova
QCheckBoxnel gruppo “Opzioni Grafico”, etichettata “Mostra Profilo di Volume”. Lo stato di questa checkbox verrà passato nel dizionarioplot_args.
- File da modificare:
Risultato Fase 2: L’utente potrà attivare/disattivare la visualizzazione del Profilo di Volume direttamente dall’interfaccia.
Fase 3: Integrazione
- Obiettivo: Assicurarsi che il flusso di dati e controlli funzioni dall’inizio alla fine.
- Task 3.1: Aggiornamento della Propagazione dei Dati
- File da modificare:
fire/synapses/backtest/backtest_tab_widget.py - Azione: Modificheremo
on_backtest_finishedeon_chart_data_loadedper estrarre'volume_profile_data'dai risultati e aggiungerlo aself.last_plot_args. Il metodoon_chart_options_changedlo propagherà automaticamente.
- File da modificare:
Risultato Fase 3: L’intera feature sarà funzionante.
Prossimo Passo
Se questo piano ti convince, il nostro prossimo passo concreto sarà il Task 1.1 e 1.2: modificare il BacktestWorker per calcolare e restituire i dati del profilo di volume.