Guarda come scaricare robot di trading gratuitamente
Ci trovi su Twitter!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Sistemi Esperti

Relative Moving Average EA - sistema esperto per MetaTrader 5

Visualizzazioni:
14
Valutazioni:
(2)
Pubblicato:
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance

Panoramica

Questo Expert Advisor opera secondo il modello della Media Mobile Relativa (RMA) introdotto dal Dr. Daniel Alexandre Bloch nel suo libro "A Course on Systematic Trading with RMA". Implementa tutte e quattro le strategie di crossover descritte nel testo, insieme alla sua "Adaptive Crossover Exit", e ogni entrata e uscita è espressa in termini di frattili anziché di prezzo.

La premessa è che una finestra di prezzi sia più informativa se considerata come distribuzione piuttosto che come media. Su ogni barra, l’RMA prende la finestra mobile di W chiusure, le rielabora come rendimenti rispetto alla propria media e riporta la posizione della più recente all’interno di quella distribuzione come un frattile nell’intervallo [0, 1]. L’obiettivo dell’articolo è quindi quello di cavalcare le oscillazioni di tale posizione tra gli estremi della distribuzione: posizione lunga mentre si sposta dal minimo verso il massimo, posizione corta quando inverte la tendenza. Poiché un frattile è una posizione in classifica piuttosto che una distanza, una soglia come 0,9 ha lo stesso significato su ogni titolo e in ogni regime di volatilità, ed è proprio questo che rende le regole trasferibili.

Nota: non si tratta dell’“RMA” che alcune piattaforme di grafici espongono (il livellamento di Wilder, una variante dell’EMA). Nonostante l’acronimo in comune, si tratta di un oggetto completamente diverso.

L’EA non contiene alcuna formula matematica. Tutto risiede nell’indicatore associato RMA_Engine, che l’EA carica tramite iCustom e legge con CopyBuffer su ogni barra chiusa. Questa separazione è intenzionale e offre due vantaggi significativi: l’EA non può essere in disaccordo con il grafico riguardo al valore del frattile su una data barra, poiché esiste un unico calcolo; inoltre, le regole non intervengono mai sugli ordini, quindi possono essere riprodotte storicamente da uno script senza il coinvolgimento di alcun broker.


Come opera

Le quattro fasi. La strategia sfrutta le traversate della distribuzione propria della finestra. Il raggiungimento di un estremo innesca un lato, che costituisce il test di origine del sistema, e l’entrata scatta quando il frattile successivamente attraversa un intervallo quantile nella direzione della traversata. Non è l’estremo a fungere da trigger, bensì l’attraversamento; pertanto, un’entrata può attivarsi in qualsiasi punto lungo la traversata. I nomi descrivono il movimento del prezzo, non la posizione:

  • Long-cross-reverse. Il frattile lascia il massimo e scende verso il minimo. L’EA sfrutta quella discesa andando short.
  • Short-cross-reverse. Il caso speculare. Il frattile parte dal minimo e sale verso il massimo, seguito con una posizione lunga.
  • Long-cross-revert. Una discesa iniziata dal massimo inverte la tendenza prima di raggiungere il minimo. L’EA la segue di nuovo verso il massimo, con una posizione lunga.
  • Short-cross-revert. Una salita iniziata dal minimo inverte la tendenza al ribasso prima di raggiungere il massimo; viene seguita al ribasso, con una posizione corta.

Tra di esse, le quattro coprono entrambe le direzioni in cui un movimento parziale può risolversi. Ogni posizione aperta appartiene a una gamba denominata, ed è la gamba a decidere quale test di uscita si applica e in cosa si trasforma un’inversione, quindi la stessa lettura del frattile chiude una posizione e ne mantiene un’altra.

Le quattro strategie trasversali che attraversano la distribuzione

Le quattro fasi su un’unica distribuzione: le fasi di inversione seguono un percorso completo da un estremo all’altro, mentre le fasi di ritorno vengono intraprese quando un percorso inverte la direzione prima di raggiungere l’estremo opposto.

L’uscita adattiva. È qui che il rilevatore di regime trova la sua ragion d’essere. L’articolo definisce due uscite di base e poi una terza che sceglie tra di esse:

  • Attraversamento completo della distribuzione. Presuppone che l’attraversamento si completi, quindi l’uscita da un lato coincide con l’entrata dall’altro. Una posizione corta aperta dal massimo viene chiusa solo quando il quantile raggiunge effettivamente il minimo e inverte la tendenza verso l’alto; poiché tale inversione è essa stessa l’origine di una nuova operazione nella direzione opposta, l’uscita si inverte direttamente in essa.
  • Trigger di inversione all’estremo. Non fa ipotesi sull’estremo più lontano. La posizione viene chiusa alla prima prova concreta che il movimento su cui si stava puntando si è arrestato: una serie di passi nel bin quantile nella direzione opposta, un ritorno attraverso la zona mediana, o un singolo passo sufficientemente ampio da essere indicativo.
  • Uscita con crossover adattivo. La regola descritta nell’articolo, e ciò che l’EA implementa: il trigger di inversione durante l’espansione e la transizione, dove sono probabili attraversamenti parziali, passando al crossover completo una volta identificata la contrazione. Le fasi di inversione utilizzano sempre il trigger di inversione, in ogni regime.

Il test della lunghezza della serie è ciò che impedisce al trigger di inversione di attivarsi a causa del rumore. Una serie con segno di passi di intervallo si accumula mentre il frattile continua a muoversi nella stessa direzione e si azzerano quando la direzione cambia, quindi «due intervalli indietro» significa che il movimento ha davvero invertito la direzione piuttosto che essersi semplicemente fermato.

L’uscita di sicurezza. Al di sopra e prima di entrambe le uscite strategiche si trova un controllo del movimento avverso. Una posizione di ritorno alla media è, per definizione, fuori posizione per un certo periodo, quindi l’essere fuori posizione non può costituire il criterio di uscita; il vero segnale di allarme è trovarsi fuori posizione e osservare il frattile che continua ad allontanarsi ulteriormente. Questo è esattamente ciò che descrive un valore basso di D_k sul lato sbagliato della mediana, ed è l’unica uscita che ignora completamente l’impostazione del profitto minimo, poiché non cerca di raggiungere un obiettivo, ma di smettere di alimentare un trend che si è già rivoltato contro l’operazione.

Quando scatta in caso di perdita, blocca anche il rientro sullo stesso lato finché il frattile non riattraversa la mediana, in modo che la strategia non possa subito riproporre al mercato la stessa operazione in perdita. Se in quel momento il range si sta espandendo, l’EA prende invece la posizione opposta, partendo dal ragionamento che un segnale di ritorno alla media che continua a fallire è indice di un trend piuttosto che di un prezzo migliore. Queste due fasi di seguito del trend sono l’unica parte del sistema che non è simmetrica.


Configurazione consigliata

Impostazione
Valore consigliato
Note
Simbolo
EURUSD
Lo strumento di sviluppo e test. La scala dei frattili è auto-normalizzante, quindi le regole sono applicabili ad altri simboli senza necessità di ricalibrazione, ma le impostazioni riportate di seguito sono state testate solo su questo simbolo.
Intervallo temporale del grafico
H2
L'intervallo di tempo di test. La finestra è misurata in barre, quindi un intervallo di tempo più breve con lo stesso W descrive semplicemente un periodo di mercato più breve. Il tempo medio di detenzione su H2 era di circa un giorno.
Tipo di conto
Netting o hedging
L'EA mantiene al massimo una posizione alla volta e inverte la posizione chiudendo e riaprendo, quindi entrambi i tipi di conto sono compatibili.
Prerequisiti
RMA_Engine deve essere compilato
Compilare Indicators\RMA\RMA_Engine.mq5 prima di collegare l'EA. In assenza del file .ex5, la chiamata a iCustom fallisce e l'EA non si inizializza, visualizzando un messaggio che indica il nome del file mancante.
Cronologia richiesta
W più il lookback del regime
L'EA si blocca su qualsiasi barra per la quale il motore non è ancora in grado di fornire una risposta; pertanto, una cronologia breve comporta la perdita di segnali piuttosto che la generazione di segnali errati.
Importante: testare sempre prima su un conto demo. La sezione "Risultati" dell’articolo originale è stata lasciata come lavoro futuro, pertanto fornisce un quadro di riferimento e i suoi meccanismi, non un track record empirico. Ogni dato di performance riportato di seguito proviene da un’unica esecuzione storica di questa implementazione e costituisce un punto di partenza per i propri test, non un vantaggio convalidato derivante dalla ricerca. I rendimenti passati non garantiscono risultati futuri.


Caratteristiche principali

Fedele all’articolo

  • Sono implementate tutte e quattro le strategie incrociate, le due gambe di inversione e le due gambe di ritorno, non una coppia semplificata.
  • L’uscita adattiva del crossover alterna tra il crossover a distribuzione completa e il trigger di ritorno all’estremo a seconda del regime, esattamente come specificato nell’articolo.
  • Il frattile è la definizione riportata nell’appendice dell’articolo, ovvero la semplice CDF empirica della finestra. Laddove il testo dell’articolo e la sua appendice non concordano, prevale l’appendice e la discrepanza viene documentata nel codice sorgente anziché essere corretta in modo silenzioso.

Un unico calcolo, in un unico punto

  • Ogni numero letto dalle regole proviene da RMA_Engine tramite CopyBuffer, quindi il grafico e le operazioni non possono divergere. Non esiste una seconda implementazione della matematica per mantenere la sincronizzazione.
  • Le regole risiedono in una classe che non chiama mai `OrderSend`, non legge una posizione né stampa nulla. Le viene passata una struttura a barre a dieci campi e restituisce un’istruzione: è questo che rende la strategia testabile senza un broker.
  • L’immissione degli ordini, la contabilità e la gestione del rischio risiedono in una classe separata, tenuta distinta dalle regole per lo stesso motivo.

Decisioni basate esclusivamente sui dati definitivi

  • I buffer vengono letti a partire dalla posizione 1, mai da 0. La barra zero è ancora in fase di formazione e ogni regola è scritta per una barra il cui prezzo di chiusura è definitivo.
  • Una barra di riscaldamento, un gap nella cronologia o un motore che non ha ancora effettuato i calcoli producono tutti la stessa risposta: nessuna decisione su questa barra. Non si deduce nulla da una lettura mancante.
  • La questione se il conto fosse aperto viene risolta prima che qualsiasi operazione venga eseguita su di esso, quindi una barra è o una barra di uscita o una barra di entrata, mai entrambe.

Esecuzione che resiste a un broker reale

  • Un’operazione di chiusura e inversione richiede al broker di chiudere la posizione nel momento in cui è prevista l’operazione opposta, e il broker non sempre acconsente al primo tentativo. Le chiusure rifiutate vengono memorizzate e riprovate ad ogni tick fino a quando non vengono eseguite, anziché essere scartate, e un’inversione non viene mai sovrapposta a una posizione ancora in corso.
  • L’entrata viene registrata in base al prezzo effettivamente eseguito, non a quello richiesto, quindi lo slippage non influisce sui valori in pip che alimentano le regole di uscita e il punteggio di ottimizzazione.
  • La dimensione del lotto è limitata al minimo, al massimo e all’incremento del simbolo.
  • La posizione aperta viene salvata nelle variabili globali, in modo che una posizione che sopravvive al riavvio del terminale venga ripresa come l’operazione che era effettivamente, anziché come orfana.

Controlli operativi

  • Stop loss e take profit fissi opzionali in pip, un filtro di sessione opzionale che gestisce correttamente una finestra che si estende oltre la mezzanotte e un livellamento di fine sessione opzionale. Si tratta di controlli di implementazione piuttosto che di parte del framework: il documento si occupa del segnale e lascia la gestione del rischio all’operatore.
  • Un blocco di stato opzionale sul grafico che mostra il frattile, il regime e la fase attuali, con indicatori di entrata e uscita, oltre a una modalità verbosa che registra ogni rifiuto e il motivo dello stesso. Entrambe le opzioni sono disattivate per impostazione predefinita, quindi l’EA opera in modo silenzioso.
  • Un criterio di ottimizzazione personalizzato che restituisce i pip netti ponderati in base alla radice quadrata del numero di operazioni e della percentuale di vincita; in questo modo, una serie di quattrocento operazioni ha la precedenza su una di quaranta a parità di risultato netto, senza che il numero di operazioni prevalga in modo assoluto. Le serie con meno di dieci operazioni ottengono un punteggio pari a zero.


Risultati del backtest

Una singola esecuzione su EURUSD, H2, dal 01/05/2025 al 26/07/2026, circa quattordici mesi, su tick reali al 100% con un deposito di 10.000 USD a 1:500.

Parametro
Valore
Utile netto totale
362,51 su un deposito di 10.000
Totale operazioni
138
Fattore di profitto
1,15
Indice di Sharpe
0,82
Drawdown massimo del capitale proprio
463,87 (4,52%)
Operazioni in profitto
46,38%
Guadagno medio / perdita media
42,80 / -30,82
Tasso di successo posizioni lunghe / corte
46,58% / 46,15%

La percentuale di vincita si attesta appena sotto la metà, e il sistema rimane redditizio perché la vincita media è superiore alla perdita media: questo è il profilo di rendimento di una strategia di ritorno alla media che lascia che le inversioni di tendenza seguano il loro corso. Le posizioni lunghe e corte hanno un andamento quasi identico, come ci si aspetta da un framework simmetrico per sua stessa natura.

La serie di test non ha utilizzato i valori predefiniti forniti con il sistema. Sei parametri erano diversi e, caricando l’EA così come viene fornito, non sarà possibile riprodurre questi risultati. I valori testati erano: InpRegimeLookback 200 (predefinito 20), InpRangeHistoryLookback 400 (predefinito 100), InpExitTargetUpper 0,9 e InpExitTargetLower 0,1 (entrambi predefiniti a 0,0, il che seleziona la logica degli estremi anziché un obiettivo frattile assoluto), InpStopLossPips 50 (impostazione predefinita 0, senza stop) e InpUseTimeFilter impostato su true con le ore da 01 a 23 (impostazione predefinita disattivata). Tutti gli altri parametri sono stati lasciati ai valori predefiniti.

Curva di capitale del Strategy Tester per l'Expert Advisor RMA

La curva del capitale nel periodo di test: andamento costante con drawdown contenuti, piuttosto che un singolo periodo fortunato.

Rapporto del Strategy Tester per l'Expert Advisor RMA

Il rapporto completo dello Strategy Tester relativo alla simulazione, che mostra le impostazioni, le statistiche delle operazioni e le curve di saldo e di capitale.


Installazione e struttura dei file

Un Expert Advisor, un indicatore obbligatorio, un pannello opzionale e sette file di intestazione. La struttura delle cartelle è importante: l’EA carica il motore tramite il percorso relativo RMA\RMA_Engine e i file di intestazione sono inclusi come <RMA\...>, quindi ogni file deve trovarsi nella propria sottocartella RMA. Compilare gli indicatori prima dell’EA.

File
Ruolo
Descrizione
Experts\RMA\RMA.mq5
Orchestratore
Tutti gli input, la chiamata iCustom, la lettura dello stato del motore per ogni barra e l’ordine in cui vengono eseguiti il motore dei segnali, il gestore delle operazioni e la visualizzazione. Non contiene alcuna logica strategica propria.
Indicatori\RMA\RMA_Engine.mq5
Indicatore richiesto
Calcola tutte le serie RMA e pubblica diciannove buffer. Senza di esso, l’EA non si inizializzerà.
Indicatori\RMA\RMA_Panel.mq5
Pannello opzionale
Riproduce un gruppo di buffer del motore in una finestra secondaria con una propria scala, per le serie illeggibili sull'asse da 0 a 1 del motore. Solo visualizzazione.
Include\RMA\RmaTypes.mqh
Vocabolario condiviso
Le enumerazioni relative al regime e agli stati incrociati e la mappa dei buffer. L’unico punto in cui l’EA, il motore e i pannelli sono allineati.
Include\RMA\RmaCore.mqh
Nucleo numerico
L'SMA, la famiglia RMA, la distribuzione dei rendimenti normalizzati e la funzione frattile.
Include\RMA\RegimeDetector.mqh
Classificazione dei regimi
Espansione, contrazione e i due stati di transizione, ricavati dai rapporti di estremo relativo (Relative Extremum Ratios) e corroborati dalla pendenza, dallo z-score e dal coefficiente di variazione. È questo che determina la regola di uscita.
Include\RMA\AdverseMonitor.mqh
Coerenza direzionale
d_med_w, il frazile centrato sulla mediana, e D_k, la percentuale di rialzo dei suoi passi recenti. Alimenta l’uscita di sicurezza.
Include\RMA\SignalEngine.mqh
Le regole
Attivazione, le quattro fasi di ingresso, le tre uscite e il passaggio adattivo tra di esse, l’uscita di sicurezza, il blocco di rientro e l’inversione di tendenza. Accetta una barra, restituisce un’istruzione, non interviene su nient’altro.
Include\RMA\TradeManager.mqh
Esecuzione
Inserimento dell’ordine, limitazione del lotto, stop e target, sincronizzazione delle posizioni, chiusura riprovata, controlli di sessione, persistenza delle gambe, conteggio dei pip e punteggio di ottimizzazione.
Include\RMA\RmaDisplay.mqh
Stato sul grafico
Il blocco di stato e gli indicatori di entrata e uscita. Le etichette vengono create una sola volta e aggiornate in loco, quindi non ci sono oggetti duplicati né sfarfallii dovuti al ridisegno.


Parametri di input

Nove gruppi di input. I primi due vengono inoltrati al motore e modificano ciò che esso calcola; il resto regola le regole, gli ordini e la visualizzazione.

Gruppo
Parametri chiave
Valori predefiniti
Finestra
InpWindowSize, InpSmoothingPeriod
106 barre, 10
Rilevamento del regime
InpEpsilonLow, InpEpsilonHigh, InpSlopeThreshold, InpRegimeLookback, InpVariationRatioLow, InpZScoreExpansion, InpRangeHistoryLookback
0,15, 3,0, 0,0001, 20, 0,1, 1,0, 100
Movimento avverso
InpUseAdverseExit, InpAdverseLookback, InpAdverseThresholdDown, InpAdverseThresholdUp
vero, 10 barre, 0,3, 0,7
Entries
InpEntryUpperThreshold, InpEntryLowerThreshold, InpEntryMinDiff, InpCloseThreshold
0,9, 0,1, 0,0 (conta qualsiasi inversione di tendenza), 0,1
Uscite
InpExitTargetUpper, InpExitTargetLower, InpExitProfitMinPips
0,0, 0,0 (entrambi a zero selezionano la logica degli estremi), 0,0 (disattivato)
Trading
InpLotSize, InpMagicNumber, InpTradeComment
0,1 lotto, 20251230, "RMA"
Rischio
InpStopLossPips, InpTakeProfitPips, InpUseTimeFilter, InpStartHour, InpEndHour, InpEODClosePositions
0 (nessuno), 0 (nessuno), false, 8, 20, false
Sul grafico
InpShowDisplay, InpAttachEngine, InpShowPanels, InpPanelAdverse, InpPanelRmaValues, InpShowRegimeBand, InpVerbose
tutte disattivate per impostazione predefinita, quindi l’EA opera in modo silenzioso
Nota: gli input relativi alle due finestre e il gruppo regime vengono trasmessi direttamente a RMA_Engine; pertanto, modificandoli si modificano le serie su cui si basano le regole. Se si collega manualmente il motore al grafico, è necessario assegnargli gli stessi valori; in caso contrario, il grafico descriverà una finestra diversa da quella su cui si sta operando.


Basi di ricerca

L’implementazione segue:

  • Daniel Alexandre Bloch, A Course on Systematic Trading with RMA, disponibile su SSRN.

L’articolo fornisce il quadro di riferimento e i relativi meccanismi: la rappresentazione frattile, le quattro strategie incrociate e l’Adaptive Crossover Exit che seleziona tra di esse in base al regime. Non fornisce un track record, poiché la sezione dedicata ai risultati è lasciata come lavoro futuro nella versione in esame. Il valore offerto è una strategia espressa su una scala che ha lo stesso significato su ogni strumento, nonché una base per i propri test su altri simboli e intervalli di tempo o con la finestra calibrata per asset, come previsto dall’articolo.

Un articolo di approfondimento ne illustra i fondamenti matematici, guida l’implementazione di ogni modulo e spiega in dettaglio ciascuna delle quattro componenti e la logica di uscita: Implementazione del framework della media mobile relativa (RMA) di Bloch in MQL5.

Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/75473

Session Scalping Zones Session Scalping Zones

Indicatore di scalping basato sulla sessione per MetaTrader 5. Contrassegna automaticamente i massimi e i minimi della sessione asiatica, quindi genera segnali di scalping all’apertura di Londra quando il prezzo supera o ritesta tali livelli. L'indicatore traccia intervalli dinamici di sessione, invia avvisi e notifiche push e include filtri opzionali relativi a trend, volume e tempo. Funziona sui grafici M1, M5 e M15 per qualsiasi simbolo.

Market Session Separator Indicator Market Session Separator Indicator

Marks the start/end of up to three trading sessions (Asian, London, New York, or any custom windows) with vertical separators and/or shaded background boxes, repeated daily across a rolling recent window. Purely visual — no calculations, no signals, just clean session boundaries.

IronHawk Fibonacci Structure Map IronHawk Fibonacci Structure Map

Free MT5 indicator that automatically maps Fibonacci levels across multiple timeframes and highlights confluence zones, market structure, premium/discount areas and key price reactions.

RSI Histogram RSI Histogram

Si tratta di un indicatore personalizzato MQL5 per MetaTrader 5 denominato “RSI Histogram”. Visualizza la linea RSI standard in una finestra separata, oltre a una versione sotto forma di istogramma con codifica a colori degli stessi valori RSI, il cui colore varia in base allo slancio: