1. Contesto

Il progetto FIRE mira a diventare un’alternativa “sovrana” a piattaforme come TradingView. Una funzionalità chiave è la capacità di importare e convertire strategie scritte in Pine Script.

Le strategie in Pine Script non definiscono solo la logica di trading (buy/sell), ma anche una complessa logica di presentazione visuale (es. plot() per le linee, barcolor() per colorare le candele, plotshape() per i marker).

Durante la conversione della strategia “SlingShot”, è emersa la necessità di un meccanismo per replicare questa visualizzazione custom in FIRE. La domanda architetturale era: “Come permettiamo a una strategia Python di comunicare le sue esigenze di rendering alla UI?“

2. Decisione

Abbiamo deciso di NON creare un linguaggio di scripting proprietario (fire-script), ma di estendere la classe BaseStrategy con un’API Python dichiarativa che mima semanticamente le funzioni di Pine Script.

L’implementazione prevede:

  1. Aggiunta di metodi API a BaseStrategy: self.plot(), self.plot_shape(), self.set_bar_color().
  2. Raccolta Dati: Questi metodi non disegnano nulla direttamente. Riempiono delle strutture dati interne alla strategia (es. _plot_lines, _bar_colors) che agiscono come un “carrello della spesa” di istruzioni grafiche.
  3. Trasporto: Il BacktestEngine e il BacktestWorker sono stati aggiornati per raccogliere queste istruzioni e includerle nell’oggetto dei risultati finali, sotto una chiave custom_plots.
  4. Rendering Disaccoppiato: Il LWCOverlayManager nella UI è responsabile di leggere queste istruzioni e tradurle in comandi JavaScript per la libreria Lightweight Charts.

3. Conseguenze

Positive

  • Nessun Linguaggio Custom: Evitiamo l’enorme complessità e i costi di manutenzione legati alla creazione di un parser, un interprete e un debugger per un nuovo linguaggio.
  • Potenza di Python: Gli sviluppatori di strategie mantengono l’accesso all’intero ecosistema Python (NumPy, SciPy, ML, etc.) senza essere limitati da un linguaggio di dominio.
  • Mapping Diretto (AI-Friendly): La conversione da Pine Script diventa un “mapping semantico” quasi 1:1 (es. plot() self.plot()), rendendo il processo più semplice sia per gli sviluppatori che per gli strumenti di conversione automatica come il nostro AI Assistant.
  • Separazione delle Responsabilità: La strategia dichiara le sue intenzioni grafiche, ma non sa come verranno disegnate. Questo disaccoppiamento è architetturalmente pulito.

Negative o Rischi

  • Manutenzione dell’API: L’API BaseStrategy dovrà essere mantenuta e potenzialmente estesa se TradingView dovesse introdurre nuove, complesse funzionalità di plotting in Pine Script.
  • Curva di Apprendimento: Gli sviluppatori devono imparare questa specifica API all’interno di BaseStrategy. Tuttavia, essendo modellata su Pine Script, questa curva è minima per il nostro target di utenti.

4. Alternative Considerate

  1. Creare un fire-script proprietario:
    • Scartata perché: Ritenuta una reinvenzione della ruota, estremamente costosa in termini di sviluppo e che priverebbe gli utenti della potenza dell’ecosistema Python.
  2. Configurazione tramite un grande dizionario di ritorno:
    • La strategia avrebbe potuto restituire un complesso dizionario JSON con tutte le configurazioni di plotting. Funzionalmente simile, ma l’approccio API (self.plot(...)) è stato preferito perché è più leggibile, più vicino alla sintassi di Pine Script e meno prono a errori di battitura su chiavi di dizionario. L’API agisce come una “facciata” pulita per la costruzione di questo dizionario.