El MultiZigZag se basa en el algoritmo del zigzag que se incluyó en MetaTrader 4 entre 2005 y 2006.
Este algoritmo es verdaderamente impresionante, y ha sido utilizado en muchos indicadores personalizados. Inicialmente, fue traducido a MQL4 por Rosh, a quien agradecemos enormemente. Me gustaría saber quién fue el creador de este algoritmo. Si alguien tiene información, por favor, comparta el nombre (o apodo) del autor en los comentarios. También me gustaría conocer en qué lenguaje se escribió originalmente y en qué plataforma de trading fue utilizado.
Desventajas de la versión original (2005-2006):
- 1) Carga alta del procesador debido al recalculo completo del zigzag en cada tick. Las PCs de bajo rendimiento prácticamente se quedaban colgadas durante los movimientos intensos del mercado.
- 2) Dibujo inexacto. Las fracturas del zigzag quedaban "suspendidas en el aire" sin vinculación a los máximos y mínimos de la barra. Conceptualmente, el zigzag debe mostrar la posición exacta de los mínimos y máximos en el gráfico.
- 3) El zigzag comenzaba a "flotar" si intentabas retroceder en la historia, y se dibujaba sin vinculación visual al gráfico.
Esta nueva versión del zigzag elimina todas las desventajas mencionadas. Solo se recalculan los últimos tres segmentos del zigzag, y esto ocurre únicamente cuando los precios superan la parte calculada de la barra cero. Es decir, cuando el mínimo o máximo de la barra cero queda anulado, al aparecer una nueva barra, o al cargar la historia.
Cada uno de los tres zigzags utiliza dos buffers: uno para los máximos y otro para los mínimos. Esto permite mostrar el máximo y el mínimo en una sola barra. Hay dos buffers vacíos disponibles para quienes deseen escribir el código y añadir un cuarto zigzag. Esto puede ser una buena lección para los programadores novatos en MQL4, o se pueden utilizar para otros fines en caso de que el zigzag se integre en sistemas desarrollados.
El cálculo y el dibujo de los zigzags de marcos de tiempo más grandes se realizan sin utilizar la función icustom(). Para fines de automatización, podemos prescindir de los buffers del indicador. Esto nos permite calcular los zigzags para todos los marcos de tiempo simultáneamente y para cualquier número de símbolos, siempre que haya suficiente memoria RAM. Esta implementación permite buscar patrones (Gartley u otros) no solo en los marcos de tiempo actuales, sino también en cualquier marco de tiempo elegido y en varios marcos de tiempo a la vez.
Parámetros.
La mayoría de los parámetros externos son variables de tipo cadena.
Los parámetros, separados por comas, se escriben en cada variable de cadena para cada zigzag. El separador de los parámetros es la coma.
El primer dígito es para el primer zigzag, el segundo para el segundo, y el tercero para el tercero, separados por comas. ExtDepth, ExtDeviation y ExtBackstep son los parámetros estándar para el zigzag.
Si estableces ExtDepth=0, entonces el zigzag correspondiente no se mostrará.
ExtMaxBar - el número de barras sobre las que se calculará el zigzag.
GrossPeriod - los períodos de los gráficos especificados en minutos de los cuales se tomarán los datos para el cálculo del zigzag. Si especificas 0, el zigzag se calculará en el marco de tiempo actual.
Los siguientes valores son válidos: 0-1-5-15-30-60-240-1440-10080-43200.
ExtReCalculate - el número de extremums del zigzag que se recalculan en tiempo real, comenzando desde cero. Esto se utiliza para los zigzags de marcos de tiempo más grandes. Se recomienda no cambiar este parámetro.
Por defecto, los zigzags se muestran desde H1-H4-D1. Los zigzags se mostrarán desde el marco de tiempo de 1 minuto hasta el de un día. Solo se mostrará un zigzag dibujado con datos del marco de tiempo D1 en el marco de tiempo diario. Solo se dibujan los zigzags basados en marcos de tiempo más grandes o en el marco de tiempo actual.
En el ejemplo de la imagen, el zigzag de H1 se dibuja en color Aqua, el de H4 en rojo y el de D1 en amarillo.
