Script vs EA vs Indicatore — La Differenza Fondamentale
In MQL5 esistono tre tipi di programmi: Script, Expert Advisor (EA) e Indicatori. Capire la differenza strutturale è il prerequisito per scrivere codice corretto. La confusione più comune tra i nuovi sviluppatori è usare un EA quando serve uno script, o cercare di fare in uno script cose che richiedono un EA.
La distinzione fondamentale è il ciclo di vita del programma: uno script esegue il suo codice una volta dall'inizio alla fine (funzione OnStart()) e poi viene rimosso automaticamente dal grafico. Un EA viene allegato al grafico e resta attivo finché non lo rimuovi tu o non si verifica un errore fatale — riceve eventi continui: OnInit() all'avvio, OnTick() su ogni aggiornamento di prezzo, OnDeinit() alla rimozione. Un indicatore è simile all'EA nel ciclo di vita continuo, ma è specializzato nel calcolo e visualizzazione di valori sul grafico tramite OnCalculate().
Tabella Comparativa — Script vs EA vs Indicatore
| Caratteristica | Script | EA (Expert Advisor) | Indicatore |
|---|---|---|---|
| Funzione principale | OnStart() | OnTick() / OnTimer() | OnCalculate() |
| Ciclo di vita | One-shot, poi rimosso | Continuo finché attivo | Continuo finché attivo |
| Può aprire ordini | Sì | Sì | No (in genere) |
| Riceve tick | No | Sì, ogni tick | Sì, ogni tick |
| Uso tipico Oracle | Emergenza/manutenzione | Trading automatico 24/5 | Visualizzazione segnali |
| Estensione file | .mq5 → .ex5 | .mq5 → .ex5 | .mq5 → .ex5 |
| Directory MT5 | MQL5\Scripts\ | MQL5\Experts\ | MQL5\Indicators\ |
| Blocca il thread principale | Sì, finché esegue | No (asincrono a timer) | No |
Struttura Base di uno Script MQL5 — OnStart()
La struttura minima di uno script MQL5 è composta da tre parti: l'header con le proprietà del programma (obbligatorio per la compilazione), le dichiarazioni di variabili/costanti, e la funzione OnStart() che contiene tutto il codice eseguito. Non esistono altre funzioni obbligatorie — a differenza di un EA che richiede almeno OnInit(), OnTick() e OnDeinit().
Il property #property script_show_inputs è particolarmente utile: se impostato su true, MT5 mostra un dialog con i parametri input dello script prima dell'esecuzione, permettendo di configurarlo al volo. Oracle usa questa caratteristica per lo script di chiusura emergenza: l'input bool CloseAllSymbols permette di scegliere se chiudere solo XAUUSD o tutte le posizioni aperte sul conto.
Script Oracle #1 — Chiusura Emergenza Posizioni XAUUSD
Lo script di chiusura emergenza è il più importante dell'arsenale Oracle. Serve quando: il mercato si muove con violenza inattesa (news BOJ non schedulata, shock geopolitico improvviso su oro), vuoi uscire da tutte le posizioni XAUUSD immediatamente senza aspettare la logica di trailing stop Oracle, oppure devi spegnere il VPS per manutenzione urgente mentre hai posizioni aperte.
La logica è semplice ma robusta: itera su tutte le posizioni aperte sul conto, filtra quelle su XAUUSD (o su tutti i simboli se CloseAllSymbols è true), e le chiude al prezzo di mercato corrente usando CTrade. Include un sistema di retry per gestire i rifiuti del broker durante alta volatilità (spread allargato, requote): tenta la chiusura fino a 3 volte con un delay di 500ms tra ogni tentativo. Dopo ogni chiusura invia una notifica push al mobile Oracle.
Note Tecniche sullo Script di Chiusura
Alcune considerazioni tecniche importanti per questo script in produzione Oracle. Il loop su PositionsTotal()-1 decrescente (i-- anziché i++) è obbligatorio: quando chiudi una posizione durante il loop, gli indici cambiano — iterare dall'alto verso il basso evita di saltare posizioni. Il parametro InpSlippage = 30 punti corrisponde a 3.0 pips su XAUUSD (punto = 0.1 pip per l'oro con 5 decimali) — è una tolleranza generosa che riduce i rifiuti durante alta volatilità ma non catastrofica. Il Sleep(500) nel retry loop non è ideale per uno script di emergenza dove ogni secondo conta; in situazioni di panico puoi abbassarlo a 200ms.
Script Oracle #2 — Reset GlobalVariables
Le GlobalVariables di MT5 sono variabili persistenti condivise tra tutti i programmi MQL5 della stessa installazione. Oracle v78 usa un set esteso di GV con il prefisso UZ_{Symbol}_{Period}_{KEY} per comunicare tra il modulo principale e i moduli satellite (Relay EA, Scanner). In rari casi — dopo un crash MT5, dopo un'interruzione di corrente improvvisa, dopo un aggiornamento forzato della piattaforma — alcune GV possono assumere valori inconsistenti che portano Oracle a comportarsi in modo anomalo (es. non aprire segnali validi, o mostrare valori errati nel pannello).
Il reset selettivo delle GV Oracle è preferibile al reset completo (che cancellerebbe anche GV di altri EA eventualmente presenti). Lo script identifica tutte le GV che iniziano con "UZ_" e le elimina selettivamente, lasciando intatte le GV di altri sistemi. Dopo il reset, Oracle deve essere rimosso e riattaccato al grafico per reinizializzare correttamente.
Script Oracle #3 — Report Giornaliero Posizioni
Il terzo script standard Oracle è un generatore di report giornaliero che legge lo storico delle operazioni delle ultime 24 ore e produce un riepilogo testuale con P&L realizzato, numero di trade, win rate del giorno, e confronto con il benchmark Oracle (EV +0,684R atteso su H4). Questo script viene eseguito manualmente ogni sera dal cliente del tier Pro o Inner Circle, oppure può essere richiamato da uno scheduler esterno tramite il Task Scheduler di Windows.
Il report viene stampato nel tab "Expert" del Terminale MT5 e inviato via notifica push all'app mobile con un riepilogo compatto. Non viene salvato su file (quello richiederebbe un EA con OnTimer) ma può essere copiato manualmente dal log MT5.
Tabella Script Oracle Standard — Funzione e Trigger
| Script | File | Trigger | Funzione | Tier Incluso |
|---|---|---|---|---|
| Close Emergency | ORACLE_CLOSE_EMERGENCY.ex5 | News shock / emergenza | Chiude tutte le pos XAUUSD istantaneamente | Gold+ |
| Reset GV | ORACLE_RESET_GV.ex5 | Dopo crash MT5 | Elimina GlobalVariables UZ_ corrotte | Gold+ |
| Daily Report | ORACLE_DAILY_REPORT.ex5 | Fine sessione giornaliera | P&L, WR, EV vs benchmark 0,684R | Pro+ |
| Force Breakeven | ORACLE_FORCE_BE.ex5 | Volatilità anomala | Porta SL a breakeven su tutte le pos aperte | Gold+ |
| Sync Check | ORACLE_SYNC_CHECK.ex5 | Diagnosi problemi | Verifica coerenza GV vs posizioni aperte | Pro+ |
| Lot Size Calc | ORACLE_LOT_CALC.ex5 | Pre-trade manuale | Calcola lot size ottimale per rischio 1% | Indicatore + EA |
Su 65.587 trade verificati XAUUSD H4 dal 2009 al 2026, Oracle ha attraversato 4 crisi sistemiche che hanno richiesto intervento manuale d'emergenza: il flash crash oro di aprile 2013 (−200$ in 1h), il Brexit giugno 2016 (+150$ in 30 minuti con liquidity gap), il Covid marzo 2020 (spread XAUUSD allargato a 80 pips per 4 ore), e l'inversione BOJ dicembre 2022. In tutti e 4 i casi, lo script di chiusura emergenza ha permesso di uscire dal mercato in <3 secondi, bypassando la normale logica Oracle di exit graduale.
Un sistema da trading professionale non si valuta solo per quanto guadagna quando funziona, ma per quanto velocemente riesci a limitare i danni quando il mercato fa cose che il backtest non aveva previsto. Gli script Oracle sono la rete di sicurezza che non spero di dover usare mai — ma che è sempre lì, pronta, sul VPS.
Come Installare ed Eseguire uno Script su MT5
L'installazione di uno script MQL5 su MT5 richiede meno di un minuto. La procedura è identica per tutti e 6 gli script Oracle standard: 1) copia il file .ex5 (compilato) nella cartella MQL5\Scripts\ della tua installazione MT5. Se hai il file sorgente .mq5, copialo nella stessa cartella — MT5 lo compilerà automaticamente al refresh del Navigator. 2) In MT5 premi F4 per aprire MetaEditor oppure semplicemente premi Ctrl+N per aprire il Navigator. 3) Nella sezione "Script" del Navigator, vedrai comparire lo script Oracle. 4) Per eseguirlo: trascina lo script sul grafico oppure doppio click. Se il parametro script_show_inputs = true è attivo, appare il dialog di configurazione. 5) Clicca OK — lo script esegue e si rimuove automaticamente dal grafico.
Sicurezza degli Script — Permessi e Rischi
Gli script MQL5 hanno le stesse capacità di un EA in termini di accesso al conto: possono aprire, modificare e chiudere ordini, leggere il saldo, accedere al filesystem di MT5. Questo significa che uno script scaricato da fonti non verificate potrebbe teoricamente svuotarti il conto. Non eseguire mai script .ex5 da fonti sconosciute — il codice compilato .ex5 è bytecode non leggibile e non puoi verificarne il contenuto senza decompilatore. Gli script Oracle vengono distribuiti esclusivamente tramite il canale Telegram ufficiale MTInvestments, con hash MD5 del file pubblicato per verifica. Su VPS Oracle: directory Scripts protetta in scrittura per tutti gli utenti eccetto l'admin — nessun script può essere aggiunto remotamente senza credenziali admin.
Vuoi gli Script Oracle Già Pronti e Testati?
Con l'Indicatore + EA (€4.997) ricevi il pacchetto script Oracle completo: Close Emergency, Reset GV, Force Breakeven. Con ZRL LAB Full (€9.997) anche Daily Report e Sync Check. Tutto con documentazione e supporto Rossella.
VEDI I TIER ORACLE → SCRIVI A ROSSELLA