Indicadores: Fractal_TL

 

Fractal_TL:

Indicador para el trazado automático de las líneas de tendencia en fractales en un timeframe determinado.


Autor: Almat Kaldybay

 

Hola.

Estoy interesado en su indicador. Pero necesito que las líneas "TL_Support" y "TL_Resistance" se construyan no por los dos últimos fractales, sino por el último y el siguiente más alto/bajo.

He hecho cambios en el código. Funciona bien online, pero en el tester se niega a funcionar. Hace la primera construcción y se congela. ¿Podríais decirme cómo hacer que el indicador con los cambios funcione en el tester de MT5?

Citaré el código a continuación, los cambios realizados se resaltarán en amarillo.

//+------------------------------------------------------------------+
//| Búsqueda de valores fractales|
//+------------------------------------------------------------------+
// --- Buscar el primer fractal superior
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- si un valor no vacío, termina el bucle
      if(FractalUp_base[n]!=EMPTY_VALUE)
         break;
     }
   UpFractal_1_base=FractalUp_base[n];// --- escribe el valor del precio del primer fractal en la variable
   UpperFractal_1_base=n;// --- escribe el índice del primer fractal en la variable
                         // --- 
// --- Buscar el segundo fractal superior
   for(n=UpperFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- si un valor no vacío, termina el bucle
      if(
         FractalUp_base[n]!=EMPTY_VALUE
         &&
         FractalUp_base[n]>UpFractal_1_base
         )
          break;
     }
   UpFractal_2_base=FractalUp_base[n]; // --- escribe el valor del precio del segundo fractal en la variable
   UpperFractal_2_base=n;// --- escribe el índice del segundo fractal en la variable
                         // ---
// --- Buscar el primer fractal inferior
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- si un valor no vacío, termina el bucle
      if(FractalDown_base[n]!=EMPTY_VALUE)
         break;
     }
   LowFractal_1_base=FractalDown_base[n];// --- escribe el valor del precio del primer fractal en la variable
   LowerFractal_1_base=n;// --- escribe el índice del primer fractal en la variable
                         // --- 
// --- Buscar el segundo fractal inferior
   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- si un valor no vacío, termina el bucle
      if(
         FractalDown_base[n]!=EMPTY_VALUE
         && 
         FractalDown_base[n]<LowFractal_1_base
         )
          break;
     }
   LowFractal_2_base=FractalDown_base[n];// --- escribe el valor del precio del segundo fractal en la variable
   LowerFractal_2_base=n;// --- escribe el índice del segundo fractal en la variable
//--- 
 

No lo he comprobado yo mismo, pero intenta añadir una condición mejor para dibujar las propias líneas, donde se crean los objetos. Por ejemplo, para una línea de apoyo:

//--- Crear línea de soporte
if (LowFractal_1_base<LowFractal_2_base)//si el precio del primer fractal encontrado es inferior al precio del segundo fractal encontrado, entonces traza una línea
{
   ObjectCreate(0,"TL_Support",OBJ_TREND,0,LowFractalTime_2_base[0],LowFractal_2_base,LowFractalTime_1_base[0],LowFractal_1_base);
   ObjectSetInteger(0,"TL_Support",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"TL_Support",OBJPROP_COLOR,Support_Color);
   ObjectSetInteger(0,"TL_Support",OBJPROP_STYLE,Support_Style);
   ObjectSetInteger(0,"TL_Support",OBJPROP_WIDTH,Support_Width);
}
 
Almat Kaldybay:

No lo he comprobado yo mismo, pero intenta añadir una condición mejor para dibujar las propias líneas, donde se crean los objetos. Por ejemplo, para una línea de apoyo:

Buenas tardes, gracias por tu comentario. La idea es buena, pero para las líneas de soporte la condición debería ser (según la lógica que intento implementar) la contraria, el mínimo del segundo fractal encontrado debería ser menor que el primero, todos los candidatos al segundo fractal cuyo mínimo sea mayor que el primero deberían ser ignorados

Y además, si vas por este camino, tendrás que rediseñar el bloque de dibujo, en realidad, y todo lo demás después de eso también. El hermoso código perderá su elegancia, IMHO.

Hay un factor más por el que escribí un comentario a este post - el programa funciona perfectamente bien, todo se dibuja perfectamente en citas reales, a tiempo, sin errores, pero en el probador no quiere. Y cuando algo no está claro, me alarma y me estresa, por eso quiero solucionarlo.

Adjunto el archivo del código editado, agradeceré enormemente si compañeros más competentes me indican la razón de tal comportamiento del tester.

Archivos adjuntos:
Fractal_TL.mq5  21 kb
 
Sergey Voytsekhovsky:

Buenas tardes, gracias por tu comentario. La idea es buena, pero para las líneas de soporte la condición debería ser (según la lógica que intento implementar) la contraria, el mínimo del segundo fractal encontrado debería ser inferior al primero, todos los candidatos al segundo fractal, cuyo mínimo sea superior al primero, deberían ser ignorados

Y también, si usted va de esta manera, usted tendrá que rediseñar el bloque de dibujo, en realidad, y todo lo demás después de eso también. Hermoso, IMHO, el código perderá su elegancia.

Hay un factor más por el que escribí un comentario a este post - el programa funciona perfectamente bien, todo se dibuja perfectamente en citas reales, a tiempo, sin errores, pero en el probador no quiere. Y cuando algo no está claro, me alarma y me estresa, por eso quiero resolverlo.

Adjunto el archivo del código editado, agradeceré enormemente si compañeros más competentes me indican la razón de tal comportamiento del tester.

Al parecer, hay un conflicto con el array FractalDown_base[]. Es extraño que no ocurra para los fractales superiores. De todas formas, he modificado un poco tu comparación:

   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- si un valor no vacío, termina el bucle
      if(FractalDown_base[n]!=EMPTY_VALUE 
      && FractalDown_base[n]<Low_base_tf[LowerFractal_1_base]
      )
      break;
     }

Es decir, he añadido la definición de Alto y Bajo y comparo ya con ellos. De esta forma todo funciona bien en el tester. Adjunto el fichero modificado.

Archivos adjuntos:
 
Almat Kaldybay:

Aparentemente, hay un conflicto con la matriz FractalDown_base[]. Extrañamente, no ocurre para los fractales superiores. De todos modos, he cambiado un poco su comparación:

Es decir, he añadido la definición de Alto y Bajo y comparo ya con ellos. De esta forma todo funciona bien en el tester. Adjunto el archivo modificado.

Buenas tardes, gracias por vuestro tiempo y atención. He subido el archivo adjunto. Desafortunadamente, el tester sigue funcionando incorrectamente, el indicador hace la primera construcción y ya no reconstruye las líneas de resistencia y soporte, no muestra fractales. Para probarlo, he puesto en el comentario High_base_tf[UpperFractal_1_base] y Low_base_tf[LowerFractal_1_base]. Cuenta correctamente, todo está bien con la lógica. Al parecer, el fallo se esconde en algún lugar en el dibujo.

El escaneo de pantalla, que muestra que se forman nuevos fractales, pero no se reconstruyen las líneas, se adjunta en el enlace.

***

Allí también se pueden ver las líneas Low_base_tf[LowerFractal_1_base] y sus valores, que se pueden comparar con los valores de LowFractal_1_base (para valores bajos, para valores altos de forma similar). Todo cuenta correctamente, pero NO hay nuevas construcciones.

 
Sergey Voytsekhovsky:


El escaneo de pantalla, que muestra que se han formado nuevos fractales, pero las líneas no se han reordenado - adjunto en el enlace.

***


Lamentablemente, el enlace ha sido eliminado.

 
Sergey Voytsekhovsky:

Lamentablemente, el enlace ha sido eliminado.

Los enlaces a sitios de terceros están prohibidos.

 
Vladimir Karputov:

No se permiten enlaces a sitios de terceros.

¿Cómo puedo publicar un escaneo de la pantalla del probador? Sólo puedo sacarla en PDF, y tengo entendido que este formato no se acepta en el foro.

 
Sergey Voytsekhovsky:

¿Cómo puedo publicar un escaneo de pantalla del probador? Sólo puedo sacarlo en PDF, y tengo entendido que este formato no se acepta en el foro.

Una captura de pantalla es una imagen. ¿Qué tiene que ver el pdf? Guarda la captura de pantalla como una imagen png y pega la imagen en tu post.

 
Vladimir Karputov:

Los enlaces a sitios de terceros están prohibidos.

Vladimir, buenas noches. Usted es un programador experimentado a juzgar por sus publicaciones y trabajos. ¿Podría por favor aconsejarme sobre la esencia de este hilo - el programa no funciona en el probador, pero funciona correctamente en los gráficos en línea. El autor no responde, aparentemente ocupado.