0001-rimozione-di-pandas-ta-per-conflitto-di-dipendenze

Contesto

Durante l’integrazione delle librerie per le funzionalità AI (unstructured, chromadb, etc.), è emerso un conflitto di dipendenze critico e irrisolvibile legato alla libreria numpy.

  • pandas-ta (v0.3.14b0): Questa libreria, usata per l’analisi dei pattern di candele nel Market Explorer, dipende implicitamente da una versione di numpy < 2.0. Il suo codice sorgente utilizza API (es. numpy.NaN) che sono state rimosse in numpy 2.0.

  • Librerie AI (unstructured, etc.): Essendo moderne, queste librerie richiedono o beneficiano di una versione recente di numpy (>= 2.0) e non sono retrocompatibili con le API numpy più vecchie.

Questa situazione ha creato un vicolo cieco: non esiste una singola versione di numpy in grado di soddisfare i requisiti di entrambi i gruppi di dipendenze, causando crash dell’applicazione all’avvio o errori a runtime.

Decisione

Abbiamo deciso di rimuovere completamente la dipendenza da pandas-ta dal progetto FIRE.

La funzionalità che utilizzava pandas-ta (il riconoscimento di pattern di candele nel DataAnalysisWorker) è stata re-implementata utilizzando il nostro Analytics Core interno, che già conteneva implementazioni per i pattern più comuni.

Conseguenze

Positive

  • Risoluzione Definitiva del Conflitto: Il blocco allo sviluppo è stato rimosso, permettendo all’ambiente di utilizzare numpy 2.0 e l’intero ecosistema AI moderno.
  • Aumento della Coerenza Architetturale: Ora tutta la logica di analisi tecnica (indicatori e pattern) risiede in un’unica fonte di verità (Analytics Core), garantendo un comportamento uniforme in tutta l’applicazione (Scanner, Explorer, Strategie).
  • Riduzione della Fragilità del Progetto: Abbiamo eliminato la dipendenza da un pacchetto esterno il cui ciclo di manutenzione non è allineato con le evoluzioni delle librerie core dell’ecosistema Python.
  • Pieno Controllo: L’implementazione e il testing di tutti i pattern di analisi tecnica sono ora sotto il nostro controllo diretto.

Negative

  • Riduzione della Copertura Funzionale (Temporanea): La funzione df.ta.cdl_pattern(name="all") di pandas-ta era molto comoda e riconosceva decine di pattern. La nostra implementazione attuale nel DataAnalysisWorker supporta un sottoinsieme più piccolo ma fondamentale di questi pattern. Questo è considerato un compromesso accettabile per la stabilità del progetto.
  • Sforzo di Manutenzione Futuro: L’aggiunta di nuovi pattern di candele richiederà uno sforzo di sviluppo interno, invece di essere fornita “gratuitamente” da una libreria esterna.