FIRE Script Engine: Technical Guide
1. Introduzione
Il Script Engine è il modulo che trasforma FIRE da un semplice tool a una Piattaforma Estendibile. Permette agli utenti di scrivere script Python personalizzati per eseguire analisi, generare report o manipolare dati, senza dover modificare il codice sorgente del core e senza dover ricompilare l’applicazione.
Principi Chiave:
- Isolamento: Gli script girano in thread separati (
QRunnable) per non bloccare la UI. - Sicurezza: Gli script non accedono direttamente agli oggetti interni di Qt (
MainWindow,Worker), ma interagiscono tramite una Facade sicura (ScriptContext). - Hot-Reload: Basta salvare un file nella cartella
FIRE_Scriptse premere “Refresh” nell’Hub per vederlo.
2. Anatomia di uno Script
Ogni script è un file .py standard che deve rispettare due requisiti:
- Un Header YAML nei commenti iniziali (Metadati).
- Una funzione
def run(context):come punto di ingresso.
Esempio Minimo (My_Script.py)
"""
---
title: Hello World Analyzer
author: Me
version: 1.0
type: utility
description: Stampa un messaggio nei log di FIRE.
---
"""
def run(context):
ticker = context.state.current_ticker
context.ui.log(f"Ciao! Il ticker attivo è {ticker}", "SUCCESS")I Metadati YAML supportati
title(Obbligatorio): Nome leggibile dello script.type(Obbligatorio): Categoria (analyzer,exporter,utility).author: Nome del creatore.description: Breve spiegazione che appare nell’Hub.tags: Lista di tag per la ricerca (es.[risk, volatility]).
3. ScriptContext API Reference
L’oggetto context passato alla funzione run è il ponte verso le funzionalità di FIRE.
3.1. context.data (Accesso Dati)
Fornisce accesso alla Smart Data Pipeline.
fetch(ticker, start_date, end_date, interval="1d") -> pd.DataFrame- Recupera dati storici OHLCV. Gestisce automaticamente cache, download e rettifiche (Split/Div) in base ai settings globali.
- Return: DataFrame Pandas o vuoto se fallisce.
get_market_cache_dir() -> str- Restituisce il percorso assoluto della cartella dati locale.
3.2. context.state (Stato Applicazione - Read Only)
Permette di sapere “cosa sta guardando l’utente”.
current_ticker(str): Il simbolo attivo (es. “AAPL”).current_timeframe(str): Il timeframe attivo (es. “1d”).global_start_date(str): Data inizio globale (YYYY-MM-DD).global_end_date(str): Data fine globale (YYYY-MM-DD).
3.3. context.ui (Interazione Utente)
Metodi thread-safe per comunicare con l’interfaccia.
log(message, level="INFO")- Scrive nel pannello log in basso. Livelli:
DEBUG,INFO,WARNING,ERROR,SUCCESS.
- Scrive nel pannello log in basso. Livelli:
show_message(title, message)- Apre un popup semplice (MessageBox) all’utente.
show_report(title, html_content)- Apre una finestra dedicata (Dock/Window) renderizzando l’HTML fornito. Ideale per grafici Plotly interattivi.
3.4. context.get_setting(key, default)
- Permette di leggere valori dalla configurazione globale di FIRE (es. chiavi API).
4. Workflow di Sviluppo Script
- Creazione: Creare un file
.pynella cartella definita in Settings → AI Tools → User Scripts Folder (Default:Documents/FIRE_Scripts). - Discovery: Aprire Tools → Script Hub e premere “Refresh”. Lo script apparirà nella lista.
- Debug: Usare
context.ui.log()per stampare informazioni di debug nel pannello di FIRE. - Distribuzione: Il file
.pypuò essere condiviso con altri utenti; non ha dipendenze hardcoded dai percorsi locali.
5. Esempi Avanzati
Generare un Grafico Plotly
import plotly.graph_objects as go
def run(context):
df = context.data.fetch(context.state.current_ticker, "2023-01-01", "2024-01-01")
fig = go.Figure(data=[go.Candlestick(
x=df.index, open=df['Open'], high=df['High'], low=df['Low'], close=df['Close']
)])
html = fig.to_html(include_plotlyjs='cdn')
context.ui.show_report("My Custom Chart", html)
**Vuoi che crei questo file?**
Se sì, abbiamo un set completo di documentazione per il rilascio.