UlcerZenith Oracle v78: Audit Tecnico Codice Sorgente (13.264 Righe)

UlcerZenith Oracle v78: Audit Tecnico del Codice Sorgente (13.264 Righe Analizzate)

Nessun guru trading italiano ha mai pubblicato un audit forense del proprio codice. Questo è il primo. 13.264 righe di MQL5 analizzate riga per riga. 12 gate sequenziali di filtering. 8 componenti del Score Engine. 5 regimi di mercato. 18 punti di rejection documentati. Zero black-box — ogni decisione tracciabile a riga specifica. MD5 indicatore: 2e3dba16d5f8fc0f3ece1195ce31cb8f. Data audit: 21 aprile 2026.

13.264
Righe Codice
12
Gate Sequenziali
8
Componenti Score
5
Regimi Mercato

Cos'è UlcerZenith Oracle e Come È Strutturato il Codice?

UlcerZenith Oracle v77.46 è un indicatore MQL5 + Expert Advisor per MetaTrader 5 implementato in 13.264 righe di codice (909.670 byte, MD5 2e3dba16d5f8fc0f3ece1195ce31cb8f). Architettura deterministica a regole esplicite basata su 3 pilastri statistici: Ulcer Index di Peter Martin 1987, bande T-Student 68/95/99%, matrice multi-timeframe M1-W1. Zero neuroni, zero deep learning, zero black-box — ogni decisione tracciabile a riga codice specifica.

Il file sorgente è organizzato in 12 sezioni funzionali dichiarate esplicitamente tramite marker di input dummy alle righe 279-401. Struttura modulare che separa le responsabilità: UI canvas, quant engine, matrix MTF, visuals T-Student, intelligence macro, institutional risk, alerts, Telegram bot (solo EA), signal intelligence dashboard, enhancement v74, V77 upgrades, modelli predittivi.

SezioneLineeContenuto
1279-291COMMANDER LEFT — dashboard visuale Oracle canvas 180px
2293-300QUANT ENGINE v73 — calcolo UI, ADX, pivot strength
3302-304MATRIX & VOLUME — filtri MTF e VSA
4306-321VISUALS HYBRID — bande T-Student, ghost forecast, UI levels
5323-327INTELLIGENCE — stagionalità, macro swap
6329-340INSTITUTIONAL RISK — risk percent, SL mult, TP RR, trailing
11372-391V77 UPGRADES — regime filter, panic persist, InpEMATrendPeriod_Low
12392-401PREDICTIVE MODELS — GARCH, Hurst, Kalman, Bayes

Le 10 Funzioni Chiave del Flusso Segnale

Su 183 funzioni pubbliche, le 10 critiche per la generazione segnale sono: OnCalculate() (entry point MT5), ProcessCoreLogic() riga 3502 (pipeline completa), UpdateRealtimeMatrix() riga 6590 (popola pallini tM1-tW1), CalculateScoreV77() riga 9671 (cuore del sistema), IsPivotLow/IsPivotHigh (identificazione pivot), IsPanicBar() (classificazione panic), CalcAdaptiveTP() riga 9825 (TP adattivi), GetAdaptiveScoreThreshold() (soglia dinamica TF), UpdateCanvasDashboard() (rendering UI), IsCandleConfirmed() (conferma corpo candela).

Il Pivot — Unità Atomica del Sistema

Il sistema NON opera sui tick ma sui pivot, ovvero minimi e massimi locali confermati. La definizione è semplice ma cruciale:

◆ IsPivotLow — pseudocodice core logiclow[pIdx] < low[pIdx-N] && low[pIdx] < low[pIdx-N+1] && ... && low[pIdx] < low[pIdx+N]

Con N = g_PivotStrength = 1 in v77.22 (era 2 nelle versioni precedenti). Significa che un minimo è pivot valido se più basso del 1 minimo a sinistra e 1 a destra. Pivot strength 1 = massima densità di segnali. Il trade-off è esplicitato nel commento riga 297: "più pivot rilevati, maggiore densità frecce" — decisione data-driven dove la coverage di setup validi ha priorità sul rumore, perché il rumore viene poi filtrato dalla catena di 12 gate post-pivot.

Ogni pivot attraversa il codice a partire dalla riga 3700 (LONG setup) o 3748 (SHORT setup). Su ciascuno viene eseguita la sequenza: check strutturale pivotStructureOK, calcolo score via CalculateScoreV77, confronto con GetAdaptiveScoreThreshold(), se score ≥ soglia signal=1 o -1, poi passaggio attraverso 9 gate successivi. Se un gate solo dice no, signal=0 e il trade muore.

Come Funziona il Trend Filter M1/M5 (Strada 2.1)?

Questa è la sezione più importante perché risponde direttamente alla domanda operativa: "quando scatta il BUY e quando lo SELL su M1 ed M5?".

Post Strada 2.1 (21 aprile 2026) i pallini Matrix M1+M5 usano lo stesso InpEMATrendPeriod_Low configurabile dall'utente (default 50, Manuel operativo 21). Prima esisteva discordanza architetturale — pallini su EMA 200 mentre filter su EMA 50. Ora unificato.

◆ Trend Filter Unificato — righe 3635-3643bool trendBull, trendBear; if(g_AnchorTF == PERIOD_M1 || g_AnchorTF == PERIOD_M5) { // STRADA 2.1 v77.46: M1+M5 su EMA InpEMATrendPeriod_Low // BULL = entrambi verdi; BEAR = entrambi rossi; disaccordo = NO TRADE if(tM1 > 0 && tM5 > 0) { trendBull = true; trendBear = false; } else if(tM1 < 0 && tM5 < 0) { trendBull = false; trendBear = true; } else { trendBull = false; trendBear = false; } } else { // TF superiori (H1/H4/D1/W1): confronto diretto price vs EMA trendBull = (price > ema200); trendBear = (price < ema200); }

La Tabella di Decisione M1/M5

tM1tM5Risultato trendSegnali permessi
🟢 verde🟢 verdeBULLSolo BUY (TREND PULLBACK)
🔴 rosso🔴 rossoBEARSolo SELL (TREND RALLY)
🟢 verde🔴 rossodisaccordoSolo REVERSAL in PANIC
🔴 rosso🟢 verdedisaccordoSolo REVERSAL in PANIC

Per approfondimento tecnico specifico su M1/M5 trend filter, leggi l'articolo dedicato Strada 2.1.

"Manuel Trotta è trader indipendente full-time e formatore. Cofondatore di due società di formazione finanziaria in cui insegna Analisi Statistica Descrittiva e Inferenziale applicata al trading." — Il Sole 24 Ore · ItalyX · 25 luglio 2022

Gli 8 Componenti del Score Engine CalculateScoreV77

La funzione CalculateScoreV77 (righe 9671-9820) è il cuore del sistema. Score finale range [0, 10] costruito sommando 8 componenti indipendenti. Sotto la soglia configurabile (default 4.0, Manuel opera 2.5-4.5 per TF) nessun segnale viene generato.

◆ CalculateScoreV77 — Riepilogo Componenti
Score 0-10 — 8 Componenti Indipendenti
+2.0
Trend Alignment
+3.0
Panic Sniper
+2.0
MTF Confluence
+1.5
Volume VSA

Score massimo teorico 15, hard cap a 10 (riga 9819 MathMin(10.0, MathMax(0.0, s))). Ogni componente data-driven da test su 21.373+ segnali storici con EV misurato. Per la breakdown completa di ogni componente e le penalty asimmetriche (es. EMA50 SHORT +5.6pp WR vs LONG +2.3pp), leggi l'articolo dedicato.

Panic Bonus — Il Setup Premium SNIPER

Il componente 2 è il più variabile: 0, 0.8, 2.0 o 3.0 punti. SNIPER è il setup premium: panic persistente da 2+ barre consecutive, bonus +3.0 oltre al base +2.0 = score già 5.0 solo da questi due componenti. Di solito i SNIPER sono i trade più profittevoli del sistema. Su H4 e D1 il metodo UI SPIKE è neutralizzato (dati empirici 232+115 trade con EV negativo). Su M1/M5/M15/H1 resta attivo.

I 12 Gate Sequenziali Dove il Segnale Muore

Dopo che un pivot ha score ≥ soglia e diventa signal = 1 o -1, deve attraversare 12 gate sequenziali. Ogni gate può azzerare signal. Un segnale sopravvive SOLO se supera TUTTI i 12 check.

GateNomeBase empirica
1Cooldown barre tra segnaliDefault 2 barre (da v77.39)
2Candle Confirmation bodyOpzionale (LITE off)
3Pivot Slip ATRDefault 0 disattivato debug
4Gap ATR Quality (Gap_ATR > 0,35)21.373 segnali analizzati = EV negativo
5MTF Pre-Flight (2/3 o 3/4 contro)Logica differenziata per TF ancora
6Session Filter H1 (17-21 GMT)WR 25,8% vs 35,1% altre ore
7Panic M1 BlockWR 22%, EV −0,119R su 59 trade
8Session M5 ore 09 GMTWR 17,8%, EV −0,289R su 45 trade
9REVERSAL TOP bloccoH1 N=433 EV −56 pip
10T-Student Filter zona 95-99%Filtro statistico principale
11FIX-ZONE-STATE v77.471 solo segnale per visita zona
12FIX-TSP-MTF cross-checkNon contraddire MTF forte

Per il walkthrough completo di ciascun gate con codice sorgente reale e pattern rejection documentati, leggi l'articolo dedicato ai 12 gate.

Un segnale UlcerZenith deve superare 12 filtri sequenziali. Se uno solo fallisce, il trade muore. Questo è "difesa in profondità": un errore statistico su un filtro non affonda il sistema — il segnale deve passare TUTTI i check. — Manuel Trotta, Fondatore MTInvestments

Quali Sono i 5 Regimi di Mercato Identificati?

Righe 267-273 del codice definiscono l'enum ENUM_MARKET_REGIME con 5 stati del mercato:

◆ enum ENUM_MARKET_REGIME — righe 267-273enum ENUM_MARKET_REGIME { REGIME_TREND_BULL = 1, // ADX>25, EMA slope positivo REGIME_TREND_BEAR = -1, // ADX>25, EMA slope negativo REGIME_RANGE = 0, // ADX<soglia, BB squeeze REGIME_BREAKOUT = 2, // Close oltre BB outer + volume spike REGIME_PANIC = 3 // UI > thresh per N+ barre consecutive };

Il regime viene deciso ad ogni pivot (righe 3663-3683) con logica cascade: prima check panic (se UI persistente), poi breakout (se oltre BB + volume 1.5x), poi range (se ADX basso e squeeze), poi trend (se ADX alto). Il regime governa il calcolo dei TP e alcuni gate (es. Gate 7 blocca M1 in PANIC perché WR 22% EV negativo).

Come Sono Calcolati SL/TP Adattivi?

La funzione CalcAdaptiveTP (riga 9825) calcola 3 TP distinti per ogni segnale, con distribuzione RR differente per ogni regime di mercato:

RegimeTP1TP2TP3Filosofia
TREND_BULL/BEAR2× slDist × tfM3× slDist × tfM5× slDist × tfMTP allungati trend
RANGEBB mediano opp.BB outer opp.BB outer + 0.5×ATRReversal interno
BREAKOUT3× slDist5× slDist8× slDistMomentum esteso
PANIC1.5× slDist2.5× slDist4× slDistQuick exit
◆ Regola RR Fondamentale Documentata
Risk:Reward minimo = 1:1 (hard constraint)
Risk:Reward ottimale empirico = 1:3 (test 65.587 trade)
RR 1:3 = massimo EV empirico su dataset storico
Il sistema NON punta mai a RR < 1:1. Soglia RR minima enforce dal calcolo SL strutturale. Commento storico nel codice: "RR 1:3 è il massimo EV empirico sui 65.587 trade di test".

Perché UlcerZenith Usa Bande T-Student Invece della Gaussiana?

Manuel ha scelto la distribuzione t-Student al posto della gaussiana per una ragione empirica solida: i rendimenti finanziari hanno code grasse (fat tails) e la gaussiana sottostima drammaticamente i movimenti estremi. Benoit Mandelbrot lo dimostrò negli anni '60 sui prezzi del cotone — la distribuzione t-Student modella correttamente eventi di 3-4σ che la gaussiana classifica come "impossibili".

Le 3 bande sono calibrate a: 68% (±1.0σ) permissivo, quasi tutti i prezzi dentro; 95% (±1.96σ) default operativo; 99% (±2.576σ) estremi per entrate SNIPER. Il sistema entra SOLO dalle zone tra 95% e 99% — sotto è rumore, sopra è outlier dove le bande stesse si ricalcolano, no entry.

◆ T-Student Filter — righe 3999-4008// SHORT: il pivot deve aver toccato zona banda%-99%U if(signal == -1 && high[pIdx] < tspUpper) signal = 0; if(signal == -1 && high[pIdx] > g_TSP_L99_U) signal = 0; // LONG: il pivot deve aver toccato zona 99%D-banda% if(signal == 1 && low[pIdx] > tspLower) signal = 0; if(signal == 1 && low[pIdx] < g_TSP_L99_D) signal = 0;

Filosofia operativa: comprare alla fine del panic (non all'inizio dove il movimento può ancora estendersi), vendere al top confermato (non quando il prezzo sale ancora). Per approfondimento sulla teoria T-Student vs Gaussiana e le fat tails nei mercati finanziari, leggi il nostro articolo sulla distribuzione dei rendimenti forex.

Vedi UlcerZenith Operare Dal Vivo

Live gratuite: iscriviti alla prossima. Vedi il sistema che hai appena letto nel codice — entry, exit, 12 gate attivi, T-Student filter visibile. Zero carta di credito.

Entra Gratis alla Live → Caso Reale Andrea →

Indicatore vs Expert Advisor — Le Differenze

Il sistema è composto da 2 file: indicatore (909.670 byte, 13.264 righe, MD5 2e3dba16...) e Expert Advisor (916.044 byte, 13.468 righe — +204 righe, MD5 c8aaa52d...). L'EA aggiunge all'indicatore l'esecuzione automatica.

Cosa Aggiunge l'EA all'Indicatore Base

  • OnTradeTransaction() handler per gestione posizioni aperte
  • ExecuteOrder() wrapper per CTrade library
  • Trailing Stop TrendRider attivo su posizioni live
  • Break-even automatico al raggiungimento di InpBreakevenATR × ATR
  • Correlation USD FIX-CORR-EXPOSURE v77.44i: riduce lotti su posizioni correlate del 50%
  • Telegram bot integration per notifiche TP1, TP2, MTF flip
  • Position sizing GetLotSize() calcolato su InpRiskPercent (default 1.0% capitale)

Cosa l'EA NON Fa (Deliberate Design Choices)

L'EA non fa machine learning live. Non riaggiusta le soglie in base al PnL intraday. Non cambia mai i parametri dell'indicatore a runtime. Tutti i parametri sono fissati a OnInit e restano tali per tutta la sessione. Scelta consapevole per evitare drift da adaptive overfitting che affligge molti sistemi "AI" commerciali.

Quali Sono le Forze e Debolezze Documentate?

Un audit onesto richiede rivelare anche le debolezze. Dall'analisi forense emergono 5 forze e 7 debolezze documentabili.

Forze (Punti di Valore Oggettivo)

  • Trasparenza totale: ogni decisione tracciabile a riga codice specifica. Zero black-box.
  • Data-driven threshold: parametri (Gap_ATR 0,35, session hour blocks, REVERSAL TOP filter) derivati da analisi su 21.373+ segnali storici documentati nei commenti.
  • Difesa in profondità: 12 gate sequenziali significano che un errore statistico su un filtro non affonda il sistema.
  • Edge empirico: WR 30,9% con EV +0,236R a RR 3:1 su 1000 trade XAUUSD M1 documentati.
  • Strada 2.1 coerenza architetturale post-fix: pallini UI e trend filter reale ora unificati sullo stesso EMA.

Debolezze (Criticità Documentata)

  • Over-fitting latente: threshold specifici calibrati su dati storici. Regime shift strutturale può invalidarli. No ri-calibrazione automatica.
  • REVERSAL in PANIC bypassa trend filter: eccezione permette segnali anche con tM1/tM5 discordi in panic. ~7% trade sono UI SPIKE.
  • Dipendenza dal broker: tick_volume varia tra broker. Aggregazione diversa può alterare volState e bonus VSA.
  • Latenza EMA M1: con InpEMATrendPeriod_Low=21 il pallino flippa ogni ~21 minuti. In whipsaw molte alternanze bloccano entrate valide.
  • File size e complessità: 13.264 righe in singolo file. Leggibilità mantenuta da 2.030 commenti (15% codice) ma refactoring modulare sarebbe benefico.
  • Dipendenza da g_AnchorTF: cambi TF senza reload = transienti comportamentali anomali.
  • Nessun backtest integrato: per valutare modifiche parametri serve Strategy Tester MT5 esterno. Workflow manuale.

Come Funziona il Sistema di Licenza Anti-Piracy?

Anti-piracy implementato via hashing fingerprint account MT5 tramite Knuth 32-bit Hash:

◆ Knuth32 Anti-Piracy Hashuint Knuth32(string s) { uint h = 2166136261U; for(int i=0; i<StringLen(s); i++) h = h * 2654435769U + StringGetCharacter(s,i); return h; }

L'array allowedHashes[] contiene gli hash degli account autorizzati. All'OnInit viene generato il fingerprint dell'account corrente e confrontato. Se non match, l'indicatore si spegne. Security assessment: robusto contro utenti non tecnici, un reverse engineer esperto può estrarre l'array dai byte .ex5 compilati. Protezione ragionevole per segmento B2C, non contro attacker sofisticati.

Come Verificare Indipendentemente Questa Analisi?

L'audit forense è pubblicato integralmente con hash MD5, line numbers e commenti originali. Ogni cliente UlcerZenith Oracle può verificare indipendentemente aprendo il file .mq5 in MetaEditor e confrontando:

  • MD5 indicatore: 2e3dba16d5f8fc0f3ece1195ce31cb8f (riga 5 audit)
  • MD5 EA: c8aaa52d5aa919c067fc158cd3fd7fc3 (riga 6 audit)
  • Righe funzioni chiave: OnCalculate, CalculateScoreV77 @9671, CalcAdaptiveTP @9825
  • Pattern rejection: 18 punti rejection in appendice A
  • Strada 2.1 delta: righe modificate 3172, 3173, 3639-3643

Nessun altro indicatore MQL5 italiano commerciale ha questo livello di disclosure tecnica. È proprio la trasparenza che differenzia un sistema serio da uno marketing-driven.

FAQ — Audit Tecnico UlcerZenith Oracle

Cos'è UlcerZenith Oracle e come funziona tecnicamente? ▶
UlcerZenith Oracle v77.46 è indicatore MQL5 + EA per MT5 con 13.264 righe di codice (MD5 2e3dba16d5f8fc0f3ece1195ce31cb8f). Architettura deterministica basata su 3 pilastri: Ulcer Index Peter Martin 1987 per drawdown relativi, bande T-Student 68/95/99% come filtro ingresso, matrice multi-timeframe M1-W1 per confluenza. Cuore: CalculateScoreV77 righe 9671-9820, score 0-10 su 8 componenti. 12 gate sequenziali filtrano segnali. Zero neuroni, zero deep learning, zero black-box — ogni decisione tracciabile a riga codice specifica.
Quanti gate di filtering attraversa un segnale? ▶
12 gate sequenziali. Se uno solo dice no, signal=0 e trade muore. Ordine: (1) Cooldown barre, (2) Candle confirmation, (3) Pivot Slip ATR, (4) Gap ATR Quality (>0,35 = EV negativo su 21.373 segnali), (5) MTF Pre-Flight, (6) Session H1 17-21 GMT, (7) Panic M1 Block, (8) Session M5 ore 09 GMT, (9) REVERSAL TOP blocco, (10) T-Student Filter zona 95-99%, (11) FIX-ZONE-STATE (1 segnale per visita), (12) FIX-TSP-MTF cross-check. Totale 18 punti rejection in appendice A dell'audit.
Come calcola lo score CalculateScoreV77? ▶
Score 0-10 (cap hard riga 9819) da 8 componenti: (1) Trend +2.0, (2) Panic 0.8/2.0/3.0 SNIPER, (3) MTF +1.0 o +2.0, (4) Volume VSA +0.5/+1.5, (5) Weekly Key Level +1.0, (6) Macro ±0.5, (7) EMA Fast 50 +1.0/-0.5, (8) Modelli predittivi (Divergence, Seasonality, Hurst, Copula, HMM). Somma teorica 15 cap 10. Soglia operativa default 4.0, Manuel usa 2.5-4.5 per timeframe. Sotto soglia = no signal.
Quali sono i 5 regimi di mercato? ▶
Enum ENUM_MARKET_REGIME righe 267-273: (1) TREND_BULL ADX>25 slope+, (2) TREND_BEAR ADX>25 slope-, (3) RANGE ADX basso + BB squeeze, (4) BREAKOUT close oltre BB + volume 1.5x, (5) PANIC Ulcer Index persistente N barre. Governa SL/TP adattivi: TREND TP1 2×SL TP3 5×SL, RANGE TP1 BB mediano, BREAKOUT TP3 8×SL momentum, PANIC TP1 1.5×SL quick exit. Gate 7 blocca M1 in PANIC (WR 22% EV negativo).
Perché bande T-Student e non Gaussiana? ▶
I rendimenti finanziari hanno code grasse (fat tails) — la Gaussiana sottostima drammaticamente i movimenti estremi. Mandelbrot dimostrò negli anni '60 sui prezzi cotone. T-Student modella correttamente eventi 3-4σ che la Gaussiana classifica "impossibili". Bande calibrate 68%/95%/99% (±1.0σ/±1.96σ/±2.576σ). Sistema entra SOLO zona 95-99%: sotto rumore, sopra outlier. FIX-ZONE-STATE v77.47 garantisce 1 segnale per visita zona.
Differenza indicatore vs Expert Advisor? ▶
Indicatore (909.670 byte) genera solo segnali. EA (916.044 byte, +204 righe) aggiunge esecuzione automatica: OnTradeTransaction handler, ExecuteOrder CTrade, Trailing Stop TrendRider, Break-even automatico InpBreakevenATR×ATR, Correlation USD FIX-CORR-EXPOSURE (riduce lotti 50% correlati), Telegram bot TP1/TP2/MTF flip, Position sizing GetLotSize() su InpRiskPercent (default 1%). EA NON fa machine learning live né riaggiusta parametri runtime — tutti fissati OnInit.
◆ Fonti Esterne e Approfondimenti
  • — Martin, P. & McCann, B. (1989): "The Investor's Guide to Fidelity Funds" — libro originale Ulcer Index. Amazon
  • — Mandelbrot, B. (1963): "The Variation of Certain Speculative Prices" — paper fat tails cotton prices. Wikipedia
  • — Wikipedia: Ulcer Index — definizione matematica. Wikipedia
  • — Wikipedia: Student's t-distribution — proprietà statistiche. Wikipedia
  • — CONSOB — Quaderni di Finanza: analisi quantitativa. Quaderni CONSOB
  • — Banca d'Italia — Temi di Discussione: misure di rischio. Temi di Discussione BdI
Manuel Trotta
◆ Scritto da

Manuel Trotta

Trader quantitativo italiano dal novembre 2007. Fondatore MTInvestments, creatore UlcerZenith Oracle v78 con 65.587 trade reali verificati. Autore di 18 libri: "Fare Trading con Excel" (Hoepli 2019), "Diventa Investitore Profittevole", "Il Latte con la Mucca". Speaker IT Forum Rimini.

P.IVA 14349331000Dal 2007 18 Libri Amazon ↗ 150K+ Follower
Disclaimer MiFID II: Il trading su strumenti finanziari comporta rischio di perdita del capitale investito. L'audit tecnico pubblicato è analisi statica del codice al 21 aprile 2026 — non costituisce garanzia di risultati futuri. Le performance storiche citate (65.587 trade, WR 42,1%, EV +0,236R a RR 3:1) si riferiscono a dati Oracle verificabili su conto reale — performance passate non sono indicative di risultati futuri. Nessun contenuto costituisce consulenza finanziaria ai sensi del D.Lgs. 58/1998 (TUF). Manuel Trotta / MTInvestments — P.IVA 14349331000.