1. Analisi Nuova Feature: “Configurazione Dinamica Strategia”

È possibile farlo in FIRE? Assolutamente SÌ. È una funzionalità standard nei framework di backtesting professionali.

Ecco come la implementeremo, mappando concettualmente quello che vedi su TradingView nella nostra architettura Python.

Il Concetto: “Dichiarazione dei Parametri”

Attualmente, nella tua strategia hai:

self.ema_length = 4  # Hardcoded

In TradingView (Pine Script) hai: EMAlen = input.int(4, minval=1, title="EMA-Length")

In FIRE, introdurremo un sistema simile. La strategia “dichiarerà” i suoi parametri nel costruttore, e FIRE costruirà automaticamente la finestra di dialogo che hai mostrato negli screenshot.

L’Architettura Proposta (Piano d’Azione)

Dobbiamo agire su tre livelli:

  1. Livello Strategia (BaseStrategy): Creeremo un meccanismo per definire i parametri.

    • Esempio immaginato:
      self.add_parameter("ema_length", 4, type="int", min=1, label="EMA Length")
      self.add_parameter("show_ema", True, type="bool", label="Show EMA Line?")
      self.add_parameter("bar_color", "#FFD700", type="color", label="Bar Color")
  2. Livello UI (StrategySettingsDialog): Creeremo una nuova classe UI generica.

    • Questa classe leggerà i parametri dichiarati dalla strategia.
    • Genererà automaticamente:
      • QSpinBox per i numeri (int).
      • QCheckBox per i booleani (bool).
      • ColorPicker per i colori.
    • Restituirà i valori modificati dall’utente.
  3. Livello Orchestrazione (BacktestTabWidget):

    • Aggiungeremo un pulsante “⚙️ Settings” accanto a “Run Backtest”.
    • Quando cliccato, apre il dialogo.
    • Quando l’utente conferma, aggiorna la strategia e lancia il backtest con i nuovi valori.

Vantaggi

  • Flessibilità: Puoi testare EMA 4, EMA 9, EMA 20 in secondi senza aprire il codice.
  • Professionalità: L’interfaccia diventa user-friendly anche per chi non sa programmare.
  • Mapping 1:1 con Pine: Ogni input.* di Pine avrà un corrispettivo in FIRE.

Come procediamo?

Questo è un task strutturale importante. Propongo di iniziare dal Backend (Fase 1): Modificare BaseStrategy per supportare la definizione dei parametri.

Se sei d’accordo, dammi l’ok e iniziamo modificando fire/strategies/base_strategy.py per aggiungere il sistema di gestione parametri (self.parameters).