Stato: Proposed

Contesto

Attualmente esiste un disaccoppiamento funzionale rigido tra i sottosistemi di analisi (Forecast Lab, Market Explorer) e il motore di esecuzione (Backtester). I segnali generati dai moduli AI e statistici sono visualizzabili dall’utente ma non sono consumabili programmaticamente dalle strategie di trading, costringendo a duplicazioni di logica o impedendo strategie ibride.

1. Il Concetto (COSA)

Evoluzione dell’architettura di FIRE verso un ecosistema in cui la Strategia Python agisce come unico orchestratore (“Glue Layer”). Le strategie cessano di contenere logica di calcolo pesante; invece, dichiarano dipendenze funzionali (Enrichment Requests) verso i servizi del framework. Il motore di backtest evolve da semplice iteratore OHLC a consumatore di dati arricchiti, pre-calcolati da worker asincroni e iniettati nel contesto di esecuzione.

2. L’Implementazione Tecnica (COME)

L’architettura adotta il pattern Declarative Data Enrichment, strutturato in quattro fasi:

  1. Fase di Dichiarazione (Setup): La classe BaseStrategy espone il metodo request_enrichment(source, **params). La strategia definisce le sue necessità all’avvio.

    • Esempio: self.request_enrichment(source="timesfm", model="precision", horizon=5)
  2. Pipeline di Risoluzione (Pre-Run): Prima dell’avvio del ciclo di trading, il BacktestOrchestrator:

    • Analizza le dipendenze dichiarate.
    • Istanzia i relativi Worker (GenericForecastWorker, DataAnalysisWorker) in parallelo.
    • Attende il completamento asincrono, gestendo la UI di progresso unificata.
  3. Fase di Iniezione (Merge): I risultati dei worker (array di previsioni, indicatori complessi) vengono allineati temporalmente e iniettati nel DataFrame principale o in strutture accessorie (es. self.data.ai.timesfm), garantendo l’accesso O(1).

  4. Fase di Esecuzione (Run): Il ciclo next() opera su dati già in memoria. La logica utente diventa puramente decisionale, senza latenza di calcolo.

    • Logica: if self.data.ai.prediction > self.data.close: buy()

3. Motivazione e Conseguenze (PERCHÉ SERVE)

  • Eliminazione della Ridondanza: Centralizza la logica di calcolo (es. inferenza AI) nei Worker. La strategia consuma l’output senza dover gestire librerie pesanti o duplicare codice.
  • Performance Asincrona: Sposta il carico computazionale fuori dal ciclo sincrono next(), abilitando la parallelizzazione massiva durante la fase di preparazione (Pre-Enrichment).
  • Modularità “LEGO”: Trasforma ogni componente del framework (nuovi modelli AI, nuovi scanner) in un “mattoncino” immediatamente disponibile per la costruzione di strategie.
  • Coerenza Cross-System: Garantisce l’identità matematica tra ciò che viene visualizzato nei laboratori di analisi (Forecast Lab) e ciò che viene eseguito nel backtest.