Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
ZigZag ideal - indicador para MetaTrader 4
- Visualizaciones:
- 2110
- Ranking:
- Publicado:
- 2016.06.29 16:01
- Actualizado:
- 2016.11.22 07:33
- ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Ventajas:
- La función más cara es iBarShift que sustituye totalmente a todos los ciclos en el código necesario para la recuperación de picos.
- Toda la información necesaria para construir ZZ para cada barra est´s accesible no sólo en cada momento sino también para cada código externo.
- No hay picos falsos
- Está disponible el método eficiente para encontrar picos
- Muy rápido
- Trabajos correctos en las inserciones del historial y cambio de TFs.
- Perfecto para uso en EA's.
Desventajas:
1. Requisitos de memoria. En otras implementaciones similares, este indicador utiliza 5 buffers en lugar de 2 (o incluso 1). Pero (en mi humilde opinión) es un buen precio para las ventajas #6 y #7. Ninguno de los zigzag rápidos que he visto pueden procesar inserciones del historial sin una reconstrucción completa. El mío lo hace. Por otra parte lo hace de manera eficiente
2. Líneas adicionales están disponibles. Esto es necesario para hacer que los datos no sean accesibles por ningún código externo. Estas líneas no deben ser visibles.
Principio:
El ZZ es dibujado por el principio de canalización.
El ancho de canal puede ser definido 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 (incluyendo la formación actual)
¡Atención! Este código puede funcionar incorrectamente si el Modo de barras de 0 es puesto en ON
Modo de barra 0:
Se establece con la variable DrawZeroBar. De forma predeterminada en OFF.
Se recomienda no utilizar esta opción, especialmente si el indicador se usa en un EA
Disfrutad ;). No dudar en preguntar cualquier duda.
Si encuentra algún error, por favor informadme. Gracias.
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/10671
Revisar los resultados del trabajo de su estrategia (del historial) por hora.
Cálculo del LRMA FastCon las ideas de los artículos, se implementa en este indicador 3 Métodos de aceleración de los indicadores en el ejemplo de "Regresión Lineal".
El script (en ausencia de comunicación) vuelve a examinar el servidor, pagina el historial, emula los ticks para los indicadores y los expertos.
VR---MOVING-AVERAGEUna versión mejorada del indicador estándar de media móvil, ahora con el timeframe por hora, puedes ver las medias de plazos superiores móviles.