Un Expert Advisor è il cuore di qualsiasi sistema automatizzato su MetaTrader 5. Oracle v78 è un EA strutturato su 4 livelli logici separati, testato su 65.587 trade reali. Questa guida ti spiega come funziona un EA in MQL5, come è costruito Oracle, e perché l'architettura conta quanto la strategia stessa.
Un Expert Advisor (EA) è un programma scritto in linguaggio MQL5 che gira all'interno di MetaTrader 5 e automatizza completamente le decisioni di trading: apertura, gestione e chiusura delle posizioni. A differenza di uno script — che esegue un'azione singola e si ferma — un EA rimane attivo finché è collegato al grafico, reagendo ad ogni nuovo tick di prezzo, ad ogni candela che si chiude, ad ogni evento di sistema configurato.
La differenza tra un EA mediocre e uno professionale non sta nella strategia, ma nell'architettura del codice. Oracle v78 ha impiegato 15 anni e 78 versioni per arrivare a un'architettura a 4 livelli separati che garantisce robustezza statistica, gestibilità del codice e performance stabile su 19 anni di dati. Ogni modifica a un livello non propaga errori agli altri: questo è il principio di isolamento che distingue un sistema industriale da un EA amatoriale scritto in un weekend.
In MetaTrader 5 esistono tre tipologie principali di programmi MQL5. Gli indicatori calcolano valori e li disegnano sul grafico, ma non aprono posizioni — Oracle usa iCustom() per leggere 6 indicatori custom (Ulcer Index, ATR adattivo, Kalman Filter, Hurst Exponent, GARCH volatility, HMM state) direttamente dall'EA principale. Gli script eseguono un'operazione una volta sola (ad esempio: chiudi tutte le posizioni aperte) e poi terminano. Gli Expert Advisor sono i soli che eseguono logica continua su ogni evento di mercato — sono l'unico strumento adatto a un sistema automatizzato in produzione.
Questa distinzione ha implicazioni pratiche rilevanti: se hai un EA attaccato al grafico
e carichi anche uno script, lo script può interferire con le posizioni gestite dall'EA.
Oracle utilizza una variabile GlobalVariable booleana (UZ_XAUUSD_H4_LOCK)
per segnalare alle utility esterne che l'EA ha il controllo esclusivo delle posizioni aperte.
Ogni Expert Advisor MQL5 è organizzato attorno a tre funzioni evento obbligatorie che il terminale MetaTrader 5 chiama automaticamente in momenti precisi del ciclo di vita dell'EA. Capire quando viene chiamata ciascuna è il primo passo per scrivere codice robusto.
Su XAUUSD in H4, MetaTrader 5 riceve in media 2.000–8.000 tick all'ora, ma Oracle deve ricalcolare la sua logica solo alla chiusura di ogni candela H4 — ovvero 6 volte al giorno. Senza il filtro IsNewBar(), l'EA eseguirebbe l'intera pipeline di calcolo decine di migliaia di volte al giorno per nessun motivo logico, con consumo CPU inutile e rischio di generare segnali multipli sulla stessa candela. Il pattern corretto prevede una variabile statica che salva il tempo di apertura dell'ultima candela processata: se il tempo corrente coincide, si esce immediatamente da OnTick().
Questo filtro vale doppio su VPS condivisi (BeeksFX, ForexVPS, IncWell) dove la CPU è distribuita tra decine di utenti: un EA ottimizzato consuma il 2–5% delle risorse rispetto a uno non filtrato. Su Oracle v78, l'intero ciclo OnTick() — inclusi i 6 iCustom() — impiega in media 4.7ms sulla candela di calcolo e meno di 0.1ms sulle candele skip.
MQL5 offre altri handler evento che MT4 non supportava a livello nativo.
OnTimer() viene chiamato a intervalli regolari configurati con EventSetTimer()
— Oracle lo usa per aggiornare le GlobalVariables del bridge JSON ogni 60 secondi,
indipendentemente dall'arrivo di tick. OnChartEvent() intercetta click
sul grafico e keypress: Oracle ZENITH EXECUTOR usa questo handler per il pulsante ENTRA (64px)
e per la shortcut Alt+P del popup di conferma. OnTrade() reagisce
ad ogni modifica dello stato delle posizioni — apertura, chiusura, modifica SL/TP:
Oracle lo usa per aggiornare in tempo reale le GlobalVariables
UZ_XAUUSD_H4_OPENTRADES e UZ_XAUUSD_H4_EQUITY_PEAK.
Chi ha esperienza con MQL4 sa che la migrazione a MQL5 non è una semplice ricompilazione. I due linguaggi condividono sintassi C-like ma divergono profondamente nelle funzioni di trading, nella gestione delle posizioni e nel modello OOP. Oracle ha effettuato questa migrazione nel 2016 con la versione v30, un processo che ha richiesto 8 mesi di riscrittura completa e ha prodotto un sistema più stabile, più testabile e più manutenibile.
| Caratteristica | MQL4 (MT4) | MQL5 (MT5) | Impatto su Oracle v78 |
|---|---|---|---|
| Modello OOP | Procedurale puro | Classi, ereditarietà, interfacce | Architettura a livelli separati possibile |
| Gestione posizioni | Ordini (OrderSend/Modify/Close) | PositionSelect + CTrade class | Netting/hedging configurabile per broker |
| Accesso dati storici | Array iClose[]/iOpen[] | CopyRates(), CopyClose() | Buffer tipizzato, accesso sicuro multi-timeframe |
| Strategy Tester | Single-thread | Multi-thread + cloud | Ottimizzazione Oracle: 19 anni in 8 ore vs 72 ore |
| GlobalVariables | Solo double | Double + persistence file | Bridge JSON via 28 GV per simbolo |
| Indicatori custom | iCustom() limitato | iCustom() multi-buffer avanzato | 6 modelli AI letti in un singolo ciclo OnTick() |
| Timeframe disponibili | 9 timeframe | 21 timeframe (M2,M3,M4,M6,M10,M12,H2,H3,H6,H8,H12) | Filtri MTF più granulari su Oracle v78 |
| Tipo dato string | Limitato 63 char in GV | Unicode illimitato | Bridge JSON payload completo senza troncamenti |
La differenza più critica in produzione è il modello di gestione delle posizioni.
In MT4, ogni ordine aperto è indipendente e identificato da ticket numerico.
In MT5, il modello di default è netting: esiste al massimo una posizione
per simbolo, e una nuova operazione nello stesso verso aggiunge volume a quella esistente.
Oracle gestisce questo caso esplicitamente: se PositionSelect(_Symbol) restituisce true,
l'EA verifica il volume corrente prima di aggiungere, evitando l'accumulo non intenzionale
che ha causato perdite significative a trader che hanno migrato EA MT4 su MT5 senza adattamento.
Oracle v78 non è "un blocco di codice che fa trading". È un sistema strutturato a 4 livelli logici separati, dove ogni livello ha responsabilità esclusive e interfacce definite. Questa architettura è il risultato di 78 versioni evolutive e permette di modificare, ad esempio, il modello di lot sizing senza toccare una riga del codice di segnale.
Il cuore di Oracle è lo UlcerScore, una rielaborazione matematica dell'Ulcer Index di Peter Martin (1987) estesa con 5 modelli AI. Ogni componente risponde a una domanda specifica: Hurst misura la persistenza della tendenza (H > 0.5 = trend, H < 0.5 = mean-reversion), GARCH stima la volatilità condizionale attesa, HMM identifica il regime di mercato (trending/ranging/reversing), Kalman filtra il rumore intraday su XAUUSD, Copula modella le dipendenze tra XAUUSD e le correlazioni cross-asset. Il punteggio finale è un numero continuo normalizzato 0–100, dove sopra 70 è segnale Long qualificato e sotto 30 è segnale Short qualificato.
Il risultato di ogni calcolo viene scritto nella GlobalVariable corrispondente
(UZ_XAUUSD_H4_SCORE, UZ_XAUUSD_H4_HURST, etc.)
in modo che il bridge JSON possa esportarlo in tempo reale al Trading OS esterno.
Questo schema di 28 GV per simbolo è il punto di contatto tra il motore MQL5
e qualsiasi interfaccia esterna — dashboard web, alert Telegram, o report automatici.
I filtri di Oracle non migliorano il segnale — eliminano le condizioni in cui il segnale è statisticamente sfavorevole. Il filtro sessione (blocco 17:00–21:00 GMT) è stato aggiunto in v73 dopo l'analisi di 8.400 trade nell'orario di chiusura americana: il Win Rate in quella fascia scendeva al 32.9% contro il 44.6% medio fuori fascia, un delta di 9.2 punti percentuali che su 65.587 trade vale circa €22.000 di differenza cumulativa. Il filtro REVERSAL TOP (aggiunto in v74) ha eliminato una categoria di pattern con EV negativo documentato su H1 e H4: –0.43R per trade in questa configurazione.
Gli errori di esecuzione in MQL5 sono la prima causa di frustrazione per chi sviluppa EA.
La maggior parte ha cause specifiche e soluzioni definite.
Oracle ha un sistema interno di error handling con logging su file e notifica push:
ogni errore critico genera un'entry nel file oracle_errors.log
e invia una notifica via SendNotification() all'app MetaTrader mobile.
| Codice Errore | Nome | Causa Principale | Soluzione Oracle | Frequenza |
|---|---|---|---|---|
| ERR_TRADE_DISABLED (4109) | Trading non autorizzato | Parametro "Allow Live Trading" disattivato, o EA non ha permesso di operare | Verifica checkbox nel tab "Common" delle proprietà EA + livello account broker | Alta |
| ERR_MARKET_CLOSED (132) | Mercato chiuso | Tentativo di ordine durante il weekend o festività broker | Filtro IsTradeAllowed() + check MarketInfo(SYMBOL_TRADE_MODE) | Media |
| ERR_INVALID_STOPS (130) | Stop non valido | SL/TP troppo vicini al prezzo (sotto min stop level del broker) | FIX-SL-MIN adattivo: SL_min = MAX(ATR×1.5, SymbolInfoInteger(SYMBOL_TRADE_STOPS_LEVEL)×Point) | Media |
| ERR_NOT_ENOUGH_MONEY (134) | Margine insufficiente | Lot size richiesto supera margine disponibile | Pre-check AccountFreeMargin() prima di ogni OrderSend() | Bassa |
| ERR_REQUOTE (138) | Requote | Prezzo slippato tra richiesta e esecuzione (broker Market Maker) | Usare broker ECN (ICMarkets Raw) — Oracle non usa Market Maker per questo motivo | Bassa |
| ERR_TOO_MANY_ORDERS (148) | Troppi ordini | Limite posizioni aperte raggiunto (account o broker) | Oracle limita a 1 posizione aperta per simbolo — check PositionSelect() prima di aprire | Bassa |
| ERR_TERMINAL_OFFLINE (6) | Terminale offline | VPS disconnesso o terminale in modalità offline | SendNotification() in OnTimer() se nessun tick in 5 minuti su XAUUSD | Media |
Per gestire errori transitori come requote o ritardi di esecuzione, Oracle implementa un loop retry con massimo 3 tentativi e delay esponenziale: primo tentativo immediato, secondo dopo 500ms, terzo dopo 1000ms. Se dopo 3 tentativi l'ordine non è stato eseguito, Oracle registra l'errore, notifica via push e salta il segnale corrente attendendo la candela successiva. Questo approccio evita i loop infiniti che bloccano il thread MQL5 e i doppi ordini accidentali che moltiplicano il rischio in modo non controllato.
Oracle v78 è distribuito in 4 tier con funzionalità progressivamente più avanzate. Ogni tier è un file .ex5 compilato separatamente con licenza Knuth hash (formato UZG-XXXXXXXX-30 per il Trial a 30 giorni, account-bound per le versioni permanenti). Le differenze non sono cosmétiche: cambiano il numero di simboli gestiti, la granularità dei filtri e il modello di sizing.
| Funzionalità | Indicatore + EA — €4.997 | ZRL LAB Full — €9.997 |
|---|---|---|
| Simboli supportati | Tutti quelli coperti dal sistema (cuore su XAUUSD) | Gli stessi |
| Timeframe operativi | H1 + H4 + D1 | H1 + H4 + D1 |
| Modelli AI attivi | Tutti e sei | Tutti e sei |
| Filtri sessione | Completi | Completi |
| Lot sizing | % equity adattivo | % equity adattivo |
| Dashboard UI | Ferrari Luce completa | Ferrari Luce completa |
| Licenza | A vita, su 3 conti | A vita, su 5 conti |
| Seguito | Consulenza 1-to-1 con Andrea + installazione | Gruppo e live settimanali + analisi personale + Mastermind |
Oracle v78 è un Expert Advisor MQL5 con architettura a 4 livelli (segnale → filtro → sizing → esecuzione),
sviluppato in 78 versioni dal 2009 al 2026 su XAUUSD H4.
Il sistema integra 6 modelli AI (Hurst, GARCH, Bayes, Kalman, HMM, Copula)
letti tramite iCustom() in un singolo ciclo OnTick() filtrato su nuova candela.
I 28 GlobalVariables per simbolo (naming: UZ_{Symbol}_{Period()}_{KEY})
alimentano un bridge JSON che consente il monitoraggio in tempo reale
da interfacce web esterne senza modificare il core trading dell'EA.
La licenza usa hashing Knuth 32-bit con XOR costante Fibonacci
per protezione account-bound a 30 giorni con 5 giorni di warning e 3 giorni di grace.
Mandare in produzione un EA senza un piano di test strutturato è la seconda causa principale di perdite tra i trader automatizzati — la prima è una strategia senza edge statistico. Oracle segue un protocollo di test a 4 fasi che deve essere completato prima di ogni nuovo deploy in produzione, inclusi gli aggiornamenti di versione.
Fase 1 — Compilazione pulita: zero warning nella console MQL5. Non "qualche warning non importante": zero. Ogni warning non risolto è un bug potenziale in produzione. Oracle v78 compila con 0 warning e 0 errori su MQL5 versione Build 4000+. Fase 2 — Backtest Every Tick Real: configurazione spread reale + commissione ECN ($7/lotto RT su ICMarkets) + qualità dati 99%. Fase 3 — Demo live 30 giorni: esecuzione su conto demo con stesso broker del live, stesso server, stessa latenza. Fase 4 — Live micro-lot: partenza con il 10% del capitale target per validare l'esecuzione reale contro il backtest prima di scalare.
"Un EA non è un indicatore che fa ordini da solo. È un sistema ingegneristico dove ogni componente ha responsabilità precise. Oracle ha impiegato 78 versioni per separare il segnale dall'esecuzione, i filtri dal sizing. Se non riesci a spiegare esattamente cosa fa ogni funzione del tuo EA, non sei pronto per il live."— Manuel Trotta, Fondatore MTInvestments · 65.587 trade reali verificati
65.587 trade reali · WR 42,1% · PF 1,44 · aspettativa +0,684R · drawdown max storico 13,1% con rischio 1% · Oracle v78. Cosa include, prezzo e rate: tutto nella pagina. Performance storiche verificabili, non garanzia di risultati futuri.
SCOPRI ZENITH ZERO → PARLA CON ROSSELLAXAUUSD ha caratteristiche tecniche specifiche che richiedono configurazione dedicata rispetto alle coppie forex standard. Il valore del pip è diverso, i requisiti di margine sono più alti, la volatilità è strutturalmente più alta, e il mercato è influenzato da correlazioni cross-asset (USD Index, Treasury yields, sentiment risk-on/risk-off) che i sistemi puramente forex non modellano. Oracle gestisce queste specificità a livello architetturale nel Livello 1 e nel Livello 3.
Il calcolo del lot size su XAUUSD richiede attenzione particolare: il TickValue per XAUUSD standard è $10 per 1 punto (0.01 lotti = $0.10/punto), ma varia per account denominati in EUR o GBP a causa del cambio dinamico. Oracle usa AccountInfoDouble(ACCOUNT_CURRENCY_PROFIT) per normalizzare il calcolo indipendentemente dalla valuta del conto. Un errore in questo calcolo causa position sizing incorrette che possono eccedere il rischio target del 30–50% in mercati volatili.
Le GlobalVariables di MT5 sono variabili double condivise tra tutti i programmi MQL5
attivi nel terminale — EA, indicatori, script.
Oracle le usa come sistema nervoso del suo ecosistema:
ogni candela, il motore principale scrive i propri output in 28 GV con naming strutturato
(UZ_{Symbol}_{Period()}_{KEY}), dove Symbol è es. XAUUSD,
Period() è H4 (=16388), e KEY è il nome del dato (SCORE, HURST, SIGNAL, LOTS, etc.).
Un EA companion (ZENITH EXECUTOR) legge queste GV per costruire la dashboard visiva
e il popup di conferma manuale. Un terzo EA (ZENITH RELAY)
le esporta in formato JSON su file per il bridge web.
Questa architettura a microservizi — poco diffusa nel mondo MT5 amatoriale — permette di aggiornare la UI senza toccare il core trading, di aggiungere nuovi simboli senza modificare il codice esistente, e di esporre i dati in tempo reale a sistemi esterni come il Trading OS web senza nessuna dipendenza di rete diretta dall'EA.
No. MetaTrader 5 e l'Expert Advisor hanno bisogno del terminale attivo e connesso a internet per operare. Se chiudi MT5 o il PC va in standby, l'EA smette di eseguire logica e non genera nuovi segnali né gestisce le posizioni aperte. La soluzione professionale è un VPS (Virtual Private Server) che gira 24/7 indipendentemente dal tuo PC. Oracle in produzione gira su VPS dedicati (BeeksFX o IncWell in data center NY4/LD4) con uptime 99.9% garantito. Il costo tipico è €20–40/mese — il minore dei costi operativi rispetto al rischio di perdere posizioni aperte senza gestione. Come ulteriore protezione, Oracle invia notifiche push via SendNotification() se non riceve tick validi entro 5 minuti su XAUUSD, allertando il trader di un problema di connessione prima che diventi critico.
No, non direttamente. MQL4 e MQL5 sono linguaggi diversi — condividono una sintassi C-like ma le API di trading sono completamente incompatibili. Un EA scritto in MQL4 con le funzioni OrderSend()/OrderModify()/OrderClose() non compilerà su MQL5 senza riscrittura. MetaQuotes ha fornito negli anni un "compatibility layer" parziale, ma per sistemi complessi come Oracle la strada è la riscrittura nativa. Oracle ha effettuato questa migrazione nel 2016-2017 (dalla versione v29 a v30) con una riscrittura completa durata 8 mesi: il risultato è un codice più solido, testabile in multi-thread, e capace di gestire le nuove funzionalità MT5 come gli eventi OnTimer, OnTrade e i 21 timeframe disponibili contro i 9 di MT4.
Oracle usa un sistema di licenza account-bound basato su hashing Knuth 32-bit con costante XOR Fibonacci. All'avvio, l'EA verifica che il numero di account MT5 corrente sia autorizzato nella whitelist compilata nel file .ex5. La chiave, in formato UZ-XXXXXXXX, codifica l'account autorizzato e la data di scadenza a 30 giorni. L'EA verifica la scadenza via GlobalVariable con timestamp, mostra un warning a 5 giorni dalla scadenza, e mantiene un grace period di 3 giorni dopo la scadenza prima di bloccarsi. Questa architettura evita dipendenze da server di licenza esterni che potrebbero causare blocchi imprevisti in produzione — l'EA funziona autonomamente anche senza connessione internet per la verifica della licenza.
In modalità netting (default MT5 per broker forex europei), esiste al massimo una posizione aperta per simbolo: se hai una posizione Long da 1 lotto su XAUUSD e l'EA apre un'altra Long da 0.5 lotti, il risultato è una singola posizione Long da 1.5 lotti. In modalità hedging (disponibile su alcuni broker o account specifici), ogni ordine è indipendente: puoi avere contemporaneamente Long e Short sullo stesso simbolo. Oracle v78 è progettato per entrambe le modalità: la funzione ExecuteOrder() verifica PositionSelect() prima di aprire, e in modalità hedging può mantenere posizioni parziali aperte mentre gestisce nuovi segnali. La modalità hedging è quella usata in produzione su broker come ICMarkets con account Pro — permette una gestione del rischio più granulare con l'Indicatore + EA e ZRL LAB Full di Oracle.
Il costo varia enormemente in base alla complessità. Un EA semplice con logica di segnale standard (MA crossover, RSI threshold) può essere sviluppato in 20–40 ore di lavoro da uno sviluppatore MQL5 con esperienza. Un sistema complesso come Oracle — con 6 modelli AI, architettura a 4 livelli, sistema di licenza custom, UI CCanvas, bridge JSON, e 19 anni di testing validati — è un progetto pluriennale. In alternativa all'acquisto di EA custom su MQL5 Market (€50–€5.000, ma senza dati di testing verificati e spesso con curve fitting), Oracle, con l'Indicatore + EA a €4.997, dà accesso a un sistema con 65.587 trade reali documentati, win rate 42,1%, PF 1,44, MDD 13,1% — numeri che la stragrande maggioranza degli EA in vendita non può esibire con dati reali verificati.