
Ventajas:
- La función más costosa es iBarShift, que reemplaza todos los ciclos en el código necesarios para la recuperación de picos.
- Toda la información necesaria para construir el ZigZag para cada barra está disponible no solo en cada momento, sino también para cualquier código externo.
- No hay picos suspendidos.
- Un método eficiente para encontrar picos está disponible.
- Es muy rápido.
- Funciona correctamente en inserciones históricas y al cambiar de marcos temporales.
- Perfecto para usar en un sistema de trading.
Desventajas:
1. Requisitos de memoria. Este indicador utiliza 5 buffers en lugar de 2 (o incluso 1) como en otras implementaciones similares. Pero, a mi parecer, este es un buen precio por las ventajas #6 y #7. Ninguno de los ZigZags rápidos que he visto puede procesar inserciones históricas sin una reconstrucción completa. El mío lo hace y de manera eficiente.
2. Se disponen de líneas adicionales. Esto es necesario para hacer los datos visibles para cualquier código externo. Estas líneas nunca deberían ser visibles.
Principio:
El ZigZag se dibuja mediante el principio de canalización.
El ancho del canal se puede definir en puntos (XLab_ZZ) o en porcentaje (XLab_ZZP).
Recuperación de picos:
extern int ChannelWidth = 100; #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red #property indicator_width1 3 datetime LastTime; int init() { LastTime = 0; return(0); } bool GetValue(double dir, int bar, int prevBar, double& peak, int& peakBar, datetime& peakTime) { if (dir < 0) { datetime t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar); int i = iBarShift(Symbol(), 0, t); if (i == prevBar) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1); i = iBarShift(Symbol(), 0, t); } double v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i); if (v == EMPTY_VALUE) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 2, bar + 1); i = iBarShift(Symbol(), 0, t); v = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 1, i); } peak = v; peakBar = i; peakTime = t; } else if (dir > 0) { t = iCustom(Symbol(), 0,"XLab_ZZ", ChannelWidth, 3, bar); i = iBarShift( Symbol(), 0, t); if (i == prevBar) { t = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1); i = iBarShift( Symbol(), 0, t); } v = iCustom( Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i); if (v == EMPTY_VALUE) { t = iCustom( Symbol(), 0, "XLab_ZZ", ChannelWidth, 3, bar + 1); i = iBarShift( Symbol(), 0, t); v = iCustom( Symbol(), 0, "XLab_ZZ", ChannelWidth, 0, i); } peak = v; peakBar = i; peakTime = t; } else { return (false); } return (true); } int start() { if (LastTime == Time[0]) return (0); LastTime = Time[0]; double dir = iCustom(Symbol(), 0, "XLab_ZZ", ChannelWidth, 4, 1); double rdir = -dir; if (dir == EMPTY_VALUE) return (0); double v1, v2, v3, v4, v5; int i1, i2, i3, i4, i5; datetime t1, t2, t3, t4, t5; GetValue(dir, 1, 0, v1, i1, t1); GetValue(rdir, i1, 0, v2, i2, t2); GetValue(dir, i2, i1, v3, i3, t3); GetValue(rdir, i3, i2, v4, i4, t4); GetValue(dir, i4, i3, v5, i5, t5); SetPt("1", v1, t1); SetPt("2", v2, t2); SetPt("3", v3, t3); SetPt("4", v4, t4); SetPt("5", v5, t5); Print(v1, " ", v2, " ", v3, " ", v4, " ", v5, " ", i1, " ", i2, " ", i3, " ", i4, " ", i5); return(0); } void SetPt(string name, double price, datetime time) { ObjectCreate(name, OBJ_ARROW, 0, time, price); ObjectSet(name, OBJPROP_ARROWCODE, 108); ObjectSet(name, OBJPROP_PRICE1, price); ObjectSet(name, OBJPROP_TIME1, time); }
Este ejemplo es un indicador que marca (una vez por barra) los primeros cinco picos (incluido el actual en formación).
¡Atención! Este código puede funcionar incorrectamente si el Modo de Barra 0 está activado.
Modo de Barra 0:
Se establece con la variable DrawZeroBar. Desactivado por defecto.
No se recomienda usar esta opción, especialmente si el indicador se utiliza en un sistema de trading.
¡Disfruta usándolo! ;) No dudes en preguntar cualquier duda.
Si encuentras algún error, por favor infórmame. Gracias.
Publicaciones relacionadas
- MetaCOT 2 CFTC ToolBox: Herramientas Esenciales para Análisis en MT4
- ID Lite Info MA: Tu Nuevo Aliado en MetaTrader 5
- Mejora tu Análisis con Líneas de Cuadrícula Horizontal en Gráficos
- Líneas Verticales: Potencia tu Análisis en MetaTrader 4
- Niveles Históricos Fuertes: Herramienta Clave para Traders de MetaTrader 5