Single Arrow MTF
- Indicatori
-
Ahmed Hamed Hamed Eadwan
ITALIAN TRANSLATION — ITALIANO
================================
TITLE:
Sviluppatore MQL5 e Trader | Fondatore di R protocols
ABOUT:
Ciao, sono Ahmed — un trader e sviluppatore MQL5 basato negli
Emirati Arabi Uniti, e fondatore di R protocols. - Versione: 1.0
- Attivazioni: 5
Un file. Una freccia. Una decisione.
SingleArrow MTF è un indicatore professionale e autonomo di segnali di divergenza per MetaTrader 5. Combina un motore ZigZag proprietario a tempo lineare, un filtro di divergenza Williams %R con separazione delle gambe, uno strato opzionale di protezione dei pivot, un pannello di accordo multi-timeframe e supporti/resistenze automatici — tutto compilato in un unico file, senza indicatori esterni, librerie o DLL.
A chi è destinato
- Trader discrezionali che vogliono frecce di divergenza pulite e basate su regole, invece di oscillatori grezzi.
- Sviluppatori di EA che necessitano di una fonte di segnali leggibile dalla macchina e trasparente sul repaint (buffer + canale GlobalVariable).
- Backtester e strateghi che necessitano di un flusso di segnali confermato e stabile sullo storico (modalità Confirm).
L'architettura in un'immagine
- Strato di struttura: il motore ZigZag interno estrae i pivot dal prezzo.
- Strato di analisi: il filtro di divergenza Williams %R valida ogni coppia di pivot con separazione delle gambe.
- Strato di presentazione: frecce, pannello MTF, livelli S/R, avvisi e contatori di trasparenza.
1) Il motore ZigZag interno (perché non quello della piattaforma?)
- Tempo lineare O(n): l'intero storico caricato è elaborato in un solo passaggio; ogni nuovo tick costa O(1) di lavoro, quindi l'indicatore resta leggero su tick veloci e storico profondo.
- Terna classica, cuore moderno: Deviation / Depth / Backstep mantengono il loro significato abituale, mentre la gestione interna dei pivot (soppressione limitata del Backstep, inserimento sicuro dei pivot in testa) è implementata da zero e irrobustita contro i casi limite.
- Niente iCustom, niente buffer mancanti: il motore è incorporato; la pipeline del segnale non dipende mai dalla presenza di un altro indicatore sul grafico o nella cartella del terminale. L'EX5 compilato funziona ovunque, inclusi i noleggi Market.
- Deterministico: parametri identici producono pivot identici su ogni grafico, simbolo e build del terminale.
2) Divergenza Williams %R con separazione delle gambe
Un semplice incrocio di livello dell'oscillatore qui non è un segnale. L'indicatore confronta le gambe di prezzo (movimenti da pivot a pivot) con le gambe dell'oscillatore sullo stesso tratto:
- Divergenza ribassista: il prezzo segna un massimo più alto mentre la gamba del Williams %R segna un massimo più basso → freccia di vendita sul massimo confermato.
- Divergenza rialzista: il prezzo segna un minimo più basso mentre la gamba del Williams %R segna un minimo più alto → freccia di acquisto sul minimo confermato.
- Separazione delle gambe: le oscillazioni interne a una gamba sono escluse dal confronto; un picco rumoroso a metà gamba non può falsificare né nascondere una divergenza — e due pivot consecutivi nella stessa direzione non vengono mai confrontati, la classica fonte di falsi segnali delle combo ZigZag/divergenza più economiche.
- Solo un pivot che supera le regole strutturali dello ZigZag e il test di divergenza WPR produce una freccia. Ogni freccia è una decisione completa, non un suggerimento grezzo.
3) Modalità di segnale: Confirm vs Live (leggere con attenzione)
Confirm (predefinita, InpConfirmBars > 0) — flusso stabile sullo storico. L'indicatore attende N candele (InpConfirmBars) prima di disegnare la freccia: una divergenza candidata resta in attesa finché il pivot che l'ha causata non è confermato dall'azione del prezzo successiva. Una volta impegnata, la freccia è congelata: non si muove mai, non scompare mai e non cambia mai direzione*. Con InpConfirmBars = 0 passi in modalità Live.
Live — la lettura più precoce possibile. La freccia è mostrata dentro la candela in formazione. Per progettazione può spostarsi o svanire finché la candela non è terminata; i contatori di trasparenza integrati riportano ogni evento di questo tipo (sezione 7).
*Matrice di garanzia di non-repaint (modalità Confirm):
- Deviation/Depth/Backstep = Manual → garantito, senza condizioni.
- Depth/Backstep adattivi ATR + blocco dei pivot attivo → garantito.
- Adattivi + blocco disattivo → l'indicatore attiva il blocco automaticamente e ti avvisa, proprio per preservare la garanzia.
Questa garanzia condizionale è dichiarata onestamente nei metadati del prodotto ed è imposta dalla validazione degli input all'avvio.
4) Blocco dei pivot
I pivot confermati sono congelati in un registro interno; ricalcoli successivi, picchi di volatilità o modifiche dei parametri non possono spostarli. È il meccanismo che rende possibile la garanzia della modalità adattiva, ed è consigliato ogni volta che usi Live.
5) Parametri ZigZag adattivi ATR
La volatilità cambia tra sessioni e simboli. Invece di ritoccare Deviation/Depth/Backstep a mano, la modalità adattiva li scala sull'ATR corrente entro limiti configurabili (per es. DepthMax limita la Depth adattiva). La struttura resta significativa su oro, cripto, indici e FX senza assistenza manuale per simbolo.
6) Pannello multi-timeframe
Lo stesso motore gira in background su fino a 23 timeframe aggiuntivi (M5/M15/H1/H4/D1 di default, interamente configurabili via InpMTFTimeframes, con InpMTFLookback come finestra di analisi). Il pannello sul grafico mostra segnale live/confermato, stato di divergenza e stato del pivot per ciascun timeframe, così operi solo quando il tuo timeframe concorda con il quadro maggiore — per es. prendere frecce rialziste M15 quando H1/H4 mostrano un contesto rialzista.
7) Strumenti di trasparenza (per sviluppatori di EA)
- SA_RepaintBars (buffer 5): contatore continuo degli eventi di repaint in Live — 0 per progettazione in Confirm.
- SA_PostCommitBars (buffer 6): contatore continuo degli aggiustamenti post-conferma — audita la stessa modalità Confirm.
- Sono contatori vivi monotoni, non serie storiche: ha senso solo il valore corrente (ultime 2–3 candele). Leggi la barra 0 o le Global Variables speculari SA_REP_ / SA_POST_ + simbolo + timeframe; mai scandire lo storico.
- SA_PivotState (buffer 3) dice inoltre se il pivot di questa barra è confermato (1) o ancora in formazione (0).
8) Supporti/resistenze automatici
L'indicatore clusterizza i pivot (dal timeframe del grafico, o da tutti i timeframe monitorati via InpSRUseAllTF) in livelli di supporto/resistenza classificati con etichette di conteggio tocchi, disegnati come linee orizzontali, raggi o zone ombreggiate (InpSRMode 0/1/2). I livelli danno contesto immediato: una freccia rialzista che si forma su un supporto classificato porta più informazione di una freccia nel mezzo del nulla.
9) Avvisi
Avvisi opzionali scattano sui segnali appena confermati tramite gli hook di alert/push/mail della piattaforma. I testi degli avvisi sono solo in inglese per progettazione, in coerenza con le regole del Market.
10) Riferimento completo delle impostazioni (raggruppato)
- Motore di segnale: InpConfirmBars (0 = Live, N = Confirm), InpLiveMargin, InpLockPivots + InpLockAfterBars, InpShowDiag.
- ZigZag: InpDepth / InpBackstep / InpDeviation; Manual o adattivo ATR per parametro via InpDevMode / InpDepthMode / InpBackstepMode, più InpATRPeriod, InpATRMult, InpDepthATRMult, InpDepthMin/InpDepthMax, InpBackstepATRMult, InpBackstepMin/InpBackstepMax.
- Divergenza: InpWPRPeriod, InpUseDivergence, InpLookback — validato contro il minimo interno del motore; valori non validi respinti all'avvio con messaggio chiaro in inglese.
- Pannello MTF: InpMTFEnabled, InpMTFTimeframes (es. "M5,M15,H1,H4,D1", fino a 23), InpMTFLookback, InpDashEnabled, InpDashCorner, InpDashX/Y, InpDashFontSize.
- S/R: InpSREnabled, InpSRLevelsCount, InpSRTolPts, InpSRMinTouches, InpSRSupportClr/InpSRResistClr, InpSRShowLabel, InpSRMode (0=HLine, 1=Ray, 2=Zone), InpSRUseAllTF.
11) Installazione e primo avvio
- Installa dalla scheda Market del tuo terminale (noleggi e licenze a vita gestiti da MetaTrader 5).
- Allega a qualsiasi grafico e qualsiasi timeframe.
- Parti con i valori predefiniti in Confirm, osserva il pannello, poi regola la terna ZigZag o attiva la modalità adattiva ATR.
12) Guide pratiche
- Intraday: frecce M15 filtrate dall'accordo del pannello H1; ingressi in Confirm sui pullback verso gli S/R proiettati.
- Swing: pivot H4 come contesto, frecce H1 come trigger.
- EA: leggi i buffer di segnale sulla barra 1 per le frecce impegnate; monitora l'attività Live con i contatori di trasparenza sulla barra 0.
13) Prestazioni e requisiti
- MetaTrader 5, qualsiasi simbolo, qualsiasi timeframe. Niente DLL, niente file esterni, niente indicatori extra.
- Cuore a tempo lineare con gestione incrementale dei tick — progettato per flussi di tick veloci senza congelamenti del grafico.
- Deinizializzazione pulita: gli oggetti del grafico sono rimossi al distacco/cambio timeframe.
14) Che cosa non è questo prodotto
Non piazza operazioni, non gestisce denaro e non garantisce profitti. La divergenza è una lettura probabilistica e contestuale. In modalità Live il repaint è intenzionale ed è sempre riportato dai contatori.
15) Registro delle modifiche
- v1.03: validazione unificata del Lookback con il minimo interno del motore (elimina i casi silenziosi senza segnale); inserimento dei pivot in testa irrobustito; ricostruzione S/R rinforzata.
- v1.01: prima pubblicazione sul Market.
16) FAQ
- Repainta? In Confirm, sotto le condizioni di garanzia (sezione 3), no. In Live le modifiche sono intenzionali e contate con trasparenza.
- Funziona su ogni simbolo? Sì; la modalità adattiva ATR è costruita proprio per mantenere la struttura significativa tra i simboli.
- Il mio EA può usarlo? Sì — buffer di segnale, canale GlobalVariable e contatori di repaint lo rendono amichevole per gli EA.
- Perché una freccia invece di tanti suggerimenti? Ogni freccia ha superato la validazione struttura + divergenza; meno segnali ma di qualità maggiore, per progettazione.
- Serve lo ZigZag della piattaforma sul mio grafico? No. Il motore è incorporato.
17) Integrazione iCustom e collegamento EA (buffer, codice, Global Variables)
SingleArrow MTF pubblica 7 buffer, leggibili da qualsiasi EA via iCustom() + CopyBuffer() — MetaTrader carica l'indicatore automaticamente alla prima chiamata iCustom; senza allegarlo a mano.
// BUFFER MAP (index -> content) // 0 SA_Buy BUY arrow price (0.0 = none) // 1 SA_Sell SELL arrow price (0.0 = none) // 2 SA_Signal +1 buy / -1 sell / 0 none // 3 SA_PivotState 1 = confirmed pivot, 0 = still forming // 4 SA_WPR Williams %R value // 5 SA_RepaintBars live-repaint counter (0 by design in Confirm) // 6 SA_PostCommitBars post-commit counter (audits Confirm mode) int h = iCustom(_Symbol, PERIOD_CURRENT, "SingleArrow_MTF", 34, // InpDepth 8, // InpBackstep 13, // InpDeviation 14, // InpWPRPeriod 5000, // InpLookback false, // InpUseDivergence 1); // InpConfirmBars (0 = Live, 1+ = Confirm) double sig[]; ArraySetAsSeries(sig, true); CopyBuffer(h, 2, 0, 3, sig); // buffer 2 = SA_Signal if(sig[1] == 1) { /* confirmed buy on last closed bar */ } if(sig[1] == -1) { /* confirmed sell on last closed bar */ } // Repaint counters via Global Variables (no CopyBuffer needed): double rep = GlobalVariableGet("SA_REP_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT)); double post = GlobalVariableGet("SA_POST_" + _Symbol + "_" + IntegerToString((int)PERIOD_CURRENT));
// FULL iCustom SIGNATURE (positional order - every declared input) iCustom(symbol, timeframe, "SingleArrow_MTF", 34, // InpDepth int default 34 8, // InpBackstep int default 8 13, // InpDeviation int default 13 14, // InpWPRPeriod int default 14 5000, // InpLookback int default 5000 false, // InpUseDivergence bool default false 1, // InpConfirmBars int default 1 (0 = Live) 12, // InpLiveMargin int default 12 true, // InpShowDiag bool default true 0, // InpDevMode enum 0=Manual 1=ATR-Adaptive 14, // InpATRPeriod int default 14 0.15, // InpATRMult double default 0.15 0, // InpDepthMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpDepthATRMult double default 1.0 15, // InpDepthMin int default 15 80, // InpDepthMax int default 80 0, // InpBackstepMode enum 0=Manual 1=ATR-Adaptive 1.0, // InpBackstepATRMult double default 1.0 3, // InpBackstepMin int default 3 30, // InpBackstepMax int default 30 false, // InpLockPivots bool default false 3, // InpLockAfterBars int default 3 true, // InpMTFEnabled bool default true "M5,M15,H1,H4,D1", // InpMTFTimeframes string 1200, // InpMTFLookback int default 1200 true, // InpSREnabled bool default true 5, // InpSRLevelsCount int default 5 15, // InpSRTolPts int default 15 2, // InpSRMinTouches int default 2 clrDodgerBlue, // InpSRSupportClr clrOrangeRed, // InpSRResistClr true, // InpSRShowLabel bool default true 0, // InpSRMode int 0=HLine 1=Ray 2=Zone false, // InpSRUseAllTF bool default false true, // InpDashEnabled bool default true CORNER_LEFT_UPPER, // InpDashCorner 10, // InpDashX int default 10 30, // InpDashY int default 30 7); // InpDashFontSize int default 7
- Ciclo di vita dell'handle: crealo una volta in OnInit e liberalo con IndicatorRelease() in OnDeinit; mai iCustom per tick.
- Feed impegnato sulla barra 1: leggi SA_Signal / SA_Buy / SA_Sell sull'ultima candela chiusa per un flusso stabile e coerente col backtest; SA_PivotState separa i pivot confermati (1) dalla punta in formazione (0).
- I contatori sono valori vivi monotoni: i buffer 5/6 (e le Global Variables SA_REP_/SA_POST_) hanno senso solo sulle ultime 2–3 candele — leggi la barra 0, mai scandire lo storico.
- Tip di performance solo-EA: passa InpDashEnabled=false e InpSREnabled=false per saltare ogni disegno di oggetti e tenere l'handle puramente computazionale.
- Due istanze sullo stesso simbolo+timeframe condividono l'unico canale Global Variables; riguarda solo la lettura di comodo, mai il calcolo del segnale.
