Single Arrow Scanner
- Indicadores
-
Ahmed Hamed Hamed Eadwan
SPANISH TRANSLATION — ESPAÑOL
===============================
TITLE:
Desarrollador MQL5 y Trader | Fundador de R protocols
ABOUT:
Hola, soy Ahmed — un trader y desarrollador MQL5 basado en
los Emiratos Árabes Unidos, y fundador de R protocols. - Versión: 1.0
- Activaciones: 5
Un archivo. Una flecha. Una decisión.
SingleArrow MTF es un indicador profesional y autónomo de señales de divergencia para MetaTrader 5. Combina un motor ZigZag propio de tiempo lineal, un filtro de divergencia Williams %R con separación de tramos, una capa opcional de protección de pivotes, un panel de acuerdo multi-temporal y soportes/resistencias automáticos — todo compilado en un solo archivo, sin indicadores externos, sin librerías y sin DLL.
Para quién es
- Traders discrecionales que quieren flechas de divergencia limpias y basadas en reglas, en lugar de osciladores en bruto.
- Desarrolladores de EAs que necesitan una fuente de señales legible por máquina y transparente en repintado (búferes + canal GlobalVariable).
- Backtesters y estrategas que necesitan un flujo de señales confirmado y estable en el historial (modo Confirm).
La arquitectura en una imagen
- Capa de estructura: el motor ZigZag interno extrae pivotes del precio.
- Capa de análisis: el filtro de divergencia Williams %R valida cada par de pivotes con separación de tramos.
- Capa de presentación: flechas, panel MTF, niveles S/R, alertas y contadores de transparencia.
1) El motor ZigZag interno (¿por qué no el de la plataforma?)
- Tiempo lineal O(n): todo el historial cargado se procesa en una sola pasada; cada tick nuevo cuesta O(1) de trabajo, así que el indicador sigue ligero con ticks rápidos e historial profundo.
- Trío clásico, núcleo moderno: Deviation / Depth / Backstep conservan su significado habitual, mientras la gestión interna de pivotes (supresión acotada de Backstep, inserción segura de pivotes al inicio) está implementada desde cero y endurecida contra casos límite.
- Sin iCustom ni búferes faltantes: el motor va integrado, por lo que el pipeline de señal nunca depende de que haya otro indicador en el gráfico o en la carpeta del terminal. El EX5 compilado funciona en cualquier sitio, incluidas las rentas del Market.
- Determinista: parámetros idénticos producen pivotes idénticos en cualquier gráfico, símbolo y build del terminal.
2) Divergencia Williams %R con separación de tramos
Un cruce de nivel del oscilador, por sí solo, aquí no es señal. El indicador compara piernas de precio (movimientos de pivote a pivote) con piernas del oscilador en el mismo tramo:
- Divergencia bajista: el precio marca un máximo más alto mientras la pierna de Williams %R marca un máximo más bajo → flecha de venta en el máximo confirmado.
- Divergencia alcista: el precio marca un mínimo más bajo mientras la pierna de Williams %R marca un mínimo más alto → flecha de compra en el mínimo confirmado.
- Separación de tramos: los vaivenes dentro de una pierna quedan excluidos de la comparación, de modo que un pico ruidoso a media pierna no puede falsificar ni ocultar una divergencia — y nunca se comparan dos pivotes consecutivos de la misma dirección, la fuente clásica de falsas señales en combos ZigZag/divergencia más baratos.
- Solo un pivote que cumple las reglas estructurales del ZigZag y la prueba de divergencia WPR produce una flecha. Cada flecha es una decisión completa, no una pista en bruto.
3) Modos de señal: Confirm vs Live (lea esto con atención)
Confirm (por defecto, InpConfirmBars > 0) — flujo estable en el historial. El indicador espera N velas (InpConfirmBars) antes de pintar la flecha: una divergencia candidata queda pendiente hasta que el pivote que la causó se confirma con la acción del precio siguiente. Una vez comprometida, la flecha queda congelada: nunca se mueve, nunca desaparece y nunca cambia de dirección*. Con InpConfirmBars = 0 pasa a modo Live.
Live — la lectura más temprana posible. La flecha se muestra dentro de la vela en formación. Por diseño puede desplazarse o desvanecerse mientras la vela no termina; los contadores de transparencia integrados informan de cada evento de este tipo (sección 7).
*Matriz de garantía de no repintado (modo Confirm):
- Deviation/Depth/Backstep = Manual → garantizado, sin condiciones.
- Depth/Backstep adaptativos por ATR + bloqueo de pivotes activado → garantizado.
- Adaptativos + bloqueo desactivado → el indicador activa el bloqueo automáticamente y le avisa, precisamente para preservar la garantía.
Esta garantía condicional se declara con honestidad en los metadatos del producto y se hace cumplir mediante validación de entradas al arrancar.
4) Bloqueo de pivotes
Los pivotes confirmados se congelan en un registro interno; recálculos posteriores, picos de volatilidad o ediciones de parámetros no pueden moverlos. Es el mecanismo que hace posible la garantía del modo adaptativo, y se recomienda siempre que use Live.
5) Parámetros ZigZag adaptativos por ATR
La volatilidad cambia entre sesiones y símbolos. En vez de reajustar Deviation/Depth/Backstep a mano, el modo adaptativo los escala con el ATR actual dentro de límites configurables (por ejemplo, DepthMax acota el Depth adaptativo). La estructura sigue siendo útil en oro, cripto, índices y FX sin tutelar cada símbolo.
6) Panel multi-temporal
El mismo motor corre en segundo plano sobre hasta 23 temporalidades adicionales (M5/M15/H1/H4/D1 por defecto, totalmente configurables vía InpMTFTimeframes, con InpMTFLookback como ventana de análisis). El panel en el gráfico muestra señal en vivo/confirmada, estado de divergencia y estado del pivote por temporalidad, para que opere solo cuando su timeframe concuerda con el panorama mayor — p. ej., tomar flechas alcistas de M15 cuando H1/H4 muestran contexto alcista.
7) Herramientas de transparencia (para desarrolladores de EAs)
- SA_RepaintBars (búfer 5): contador continuo de eventos de repintado en Live — 0 por diseño en Confirm.
- SA_PostCommitBars (búfer 6): contador continuo de ajustes post-confirmación — audita el propio modo Confirm.
- Son contadores vivos monótonos, no series históricas: solo su valor actual (últimas 2–3 velas) tiene sentido. Lea la barra 0 o las Global Variables espejadas SA_REP_ / SA_POST_ + símbolo + temporalidad; nunca barra el historial.
- SA_PivotState (búfer 3) indica además si el pivote de esta barra está confirmado (1) o aún formándose (0).
8) Soportes/resistencias automáticos
El indicador agrupa pivotes (del timeframe del gráfico, o de todos los timeframes monitorizados vía InpSRUseAllTF) en niveles de soporte/resistencia rankeados con etiquetas de número de toques, dibujados como líneas horizontales, rayos o zonas sombreadas (InpSRMode 0/1/2). Los niveles dan contexto inmediato: una flecha alcista formándose en un soporte rankeado aporta más información que una flecha en medio de la nada.
9) Alertas
Alertas opcionales disparan ante señales recién confirmadas mediante los ganchos de alerta/push/correo de la plataforma. Los textos de alerta son solo en inglés por diseño, en coherencia con las normas del Market.
10) Referencia completa de ajustes (agrupada)
- Motor de señal: InpConfirmBars (0 = Live, N = Confirm), InpLiveMargin, InpLockPivots + InpLockAfterBars, InpShowDiag.
- ZigZag: InpDepth / InpBackstep / InpDeviation; Manual vs adaptativo por ATR por parámetro vía InpDevMode / InpDepthMode / InpBackstepMode, más InpATRPeriod, InpATRMult, InpDepthATRMult, InpDepthMin/InpDepthMax, InpBackstepATRMult, InpBackstepMin/InpBackstepMax.
- Divergencia: InpWPRPeriod, InpUseDivergence, InpLookback — validado contra el mínimo interno del motor; los valores inválidos se rechazan al arrancar con un mensaje claro en inglés.
- Panel MTF: InpMTFEnabled, InpMTFTimeframes (p. ej. "M5,M15,H1,H4,D1", hasta 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) Instalación y primer uso
- Instale desde la pestaña Market de su terminal (rentas y licencias vitalicias las gestiona MetaTrader 5).
- Adjúntelo a cualquier gráfico y temporalidad.
- Empiece con los valores por defecto en Confirm, observe el panel y luego ajuste el trío ZigZag o active el modo adaptativo por ATR.
12) Guías prácticas
- Intradía: flechas de M15 filtradas por el acuerdo del panel de H1; entradas en Confirm en retrocesos hacia los S/R proyectados.
- Swing: pivotes de H4 como contexto, flechas de H1 como gatillos.
- EA: lea los búferes de señal en la barra 1 para flechas comprometidas; vigile la actividad Live con los contadores de transparencia en la barra 0.
13) Rendimiento y requisitos
- MetaTrader 5, cualquier símbolo, cualquier temporalidad. Sin DLL, sin archivos externos, sin indicadores extra.
- Núcleo de tiempo lineal con manejo incremental de ticks — diseñado para flujo rápido de ticks sin congelar el gráfico.
- Desinicialización limpia: los objetos del gráfico se eliminan al desadjuntar o cambiar de temporalidad.
14) Qué no es este producto
No coloca operaciones, no gestiona dinero y no garantiza beneficios. La divergencia es una lectura probabilística y contextual. En modo Live, el repintado es por diseño y siempre lo reportan los contadores.
15) Historial de cambios
- v1.03: validación unificada del Lookback con el mínimo interno del motor (elimina casos silenciosos sin señal); inserción de pivotes al inicio endurecida; reconstrucción S/R reforzada.
- v1.01: primera publicación en el Market.
16) Preguntas frecuentes
- ¿Repinta? En Confirm, bajo las condiciones de garantía (sección 3), no. En Live, los cambios son por diseño y se cuentan con transparencia.
- ¿Funciona en cualquier símbolo? Sí; el modo adaptativo por ATR está construido precisamente para mantener la estructura útil entre símbolos.
- ¿Puede usarlo mi EA? Sí — búferes de señal, canal GlobalVariable y contadores de repintado lo hacen amigable para EAs.
- ¿Por qué una flecha y no muchas pistas? Cada flecha pasó la validación de estructura + divergencia; menos señales y de mayor calidad, por diseño.
- ¿Necesito el ZigZag de la plataforma en mi gráfico? No. El motor va integrado.
17) Integración iCustom y conexión con EAs (búferes, código, Global Variables)
SingleArrow MTF publica 7 búferes, legibles por cualquier EA vía iCustom() + CopyBuffer() — MetaTrader carga el indicador automáticamente en la primera llamada iCustom; sin adjuntarlo manualmente.
// 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 de vida del handle: créelo una vez en OnInit y libérelo con IndicatorRelease() en OnDeinit; nunca iCustom por tick.
- Flujo comprometido en la barra 1: lea SA_Signal / SA_Buy / SA_Sell en la última vela cerrada para un flujo estable y coherente con el backtest; SA_PivotState separa pivotes confirmados (1) de la punta en formación (0).
- Los contadores son valores vivos monótonos: los búferes 5/6 (y las Global Variables SA_REP_/SA_POST_) solo tienen sentido en las últimas 2–3 velas — lea la barra 0, nunca barra el historial.
- Consejo de rendimiento solo-EA: pase InpDashEnabled=false e InpSREnabled=false para omitir todo el dibujo de objetos y dejar el handle puramente computacional.
- Dos instancias en el mismo símbolo+temporalidad comparten el único canal de Global Variables; solo afecta a la lectura de conveniencia, nunca al cálculo de señales.
