Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1171

 
Igor Zakharov:

¿Incrementa la historia?

Probablemente sí. Pero no estoy 100% seguro. ¿Cómo se comprueba esto, cambiando el número de barras en las impresoras?

Igor Zakharov:

No tiene un recálculo para este caso.

Gracias, parece que sí.

Igor Zakharov:

Y los nuevos elementos delbúfer indicador que aparecen están llenos de basura.

Parece que no sólo los nuevos, sino también los antiguos. Tengo la sensación de que no sólo las flechas se dibujan al azar, sino que la línea del indicador se rompe cuando no debería. Por favor, indique cómo organizar el recálculo en caso de cambio de historial o dónde buscar, por ejemplo.

 
Alexey Viktorov:

He cometido un error al insertar este complemento por separado. Sólo debes poner las flechas cuando el buffer cambie. Al mismo tiempo, no olvides poner un valor vacío en el buffer en todos los demás casos.

Incluso sería mejor poner un valor vacío a la vez, y llenar uno de los búferes con una flecha cuando la tendencia cambia.

Gracias por su respuesta.

He comprobado el indicador original y resulta que no he sido yo quien ha metido la pata sino que originalmente estaba mal escrito. Es decir, incluso sin mis modificaciones también se bloquea al cambiar el historial.

 
Es la primera vez que hago una pregunta y no recibo respuesta. Algún tipo de ayuda selectiva para los recién llegados.
 
novichok2018:
Es la tercera vez que hago una pregunta y obtengo silencio como respuesta. Se trata de una especie de ayuda selectiva para los novatos.

lo primero que llama la atención es que crea un objeto gráfico de línea de tendencia con el nombre de LowLine y no lo borra después ni crea objetos similares con nombres diferentes...

No se puede ejecutar ObjectCreate() con el mismo nombre varias veces - sólo funcionará la primera vez, luego habrá un error.


También hay un problema con la determinación de los fractales, se intenta encontrar el fractal en la barra #2 después de la apertura de la barra, normalmente se realiza un ciclo en las barras con una llamada del indicador de fractal y se rompe el ciclo cuando se encuentra el primer fractal, y se obtiene el número de barra, en la que el fractal fue

 
Igor Makanu:

También hay un problema con la definición de los fractales, se intenta encontrar un fractal en la barra de apertura #2, normalmente se hace un ciclo en las barras con la llamada del indicador de fractal y se rompe el ciclo cuando se encuentra el primer fractal, y se obtiene el número de barra en la que estaba el fractal

Gracias.

Efectivamente, no entiendo cómo obtener los números de las barras en las que apareció el fractal, porque aparece dos barras después. Por eso lo cojo en la segunda barra. La alerta muestra el número de fractales en un período determinado, pero ¿cómo puedo establecer el punto del segundo fractal para dibujar la línea de tendencia? No está claro cómo hacerlo según su recomendación.

El indicador llamado fractal dibuja fractales en toda la historia disponible. Estoy tratando de resolver la tarea de dibujar la línea de tendencia por un fractal que cae dentro de un determinado período del día, teniendo en cuenta los fractales del día anterior y reconstruyendo automáticamente la línea de acuerdo con el último fractal. Y hay una falta de conocimiento.

 
novichok2018:

Gracias.

Realmente, no entiendo cómo obtener los números de las barras en las que apareció el fractal, ya que aparece con dos barras de retraso. Por eso lo cojo en la segunda barra. La alerta muestra el número de fractales en un período determinado, pero ¿cómo puedo establecer el punto del segundo fractal para dibujar la línea de tendencia? No está claro cómo hacerlo según su recomendación.

El indicador llamado fractal dibuja fractales en toda la historia disponible. Estoy tratando de resolver la tarea de dibujar la línea de tendencia por un fractal que cae dentro de un determinado período del día, teniendo en cuenta los fractales del día anterior y reconstruyendo automáticamente la línea de acuerdo con el último fractal. Y hay una falta de conocimiento.

¿Estás seguro de que tienes que coger la segunda barra?

Aquí están las pruebas:

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

MQL5: Ejemplos.

Vladimir Karputov, 2018.03.19 05:54

  • 2.3. iFractales. Dos factores importantes a tener en cuenta

Hay dos factores a tener en cuenta cuando se trabaja con fractales:

Factor uno

El fractal en las barras de "rates_total-5" a"rates_total-3" no puede ser redibujado - se desprende del diseño del indicador"Fractals.mq5" (el código abierto del indicador se encuentra en [carpeta de datos]\MQL5\NIndicadores\NEjemplos\Fractals.mq5) - ya que las barrasentre "rates_total-5" y"rates_total-3" ya están formadas

//---
   if(prev_calculated<7)
     {
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

Fractales

Fig. 1. Así funciona el indicador "Fractales". Numeración de archivos a partir de la posición del indicador "Fractals.mq5"

Significa que cuando recibimos datos en el Asesor Experto desde el indicador iFractals, en las barras "rates_total-5" y "rates_total-4" (numeración de las barras desde la posición del indicador "Fractals.mq5") habrá un fractal, que está garantizado que no se volverá a renderizar.


Y aquí está el momento, cuando el fractal se forma en la barra "rates_total-5" - en el momento, cuando hay una nueva barra a la derecha, 2 de enero, 03:00 (numeración de los archivos de la posición del indicador "Fractals.mq5") :

Fractales, 5 bar

Fig. 2. El momento en que se forma el fractal en la barra "rates_total-5"

El segundo factor

El indicador fractal utiliza EMPTY_VALUE en lugar de "0,0" como valor vacío. La excepción es la primera inicialización, cuando los buffers de los indicadores se inicializan con cero (esto no lo hace el indicador "Fractals.mq5", sino MQL5 al crear un array y vincularlo con un buffer de indicadores).


 
novichok2018:

Tampoco está claro cómo hacerlo a partir de su recomendación.

Aquí hay una función para encontrar un fractal, sólo para un Asesor Experto, me funcionó

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

 
Vladimir Karputov:

¿Estás seguro de que deberías coger la segunda barra?

Aquí están las pruebas:


Sí, gracias. No hay redistribución en la tercera barra. Sólo que eso no cambia la esencia del problema.

 
Igor Makanu:

Aquí hay una función para encontrar un fractal, sólo para un EA, me funcionó

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

Gracias, funciona.

No entiendo cómo reflejar la aparición de un nuevo fractal en el código. Porque barfrup_1 es siempre menor que barfrup_2, por lo que el salto en la numeración de barfrup_1 cuando aparece un nuevo fractal no da nada, porque sigue siendo menor que barfrup_2.

Una cosa más: no entiendo cómo extraer los valores altos de barfrup_1 y barfrup_2.

 
novichok2018:

Una cosa más: no entiendo cómo extraer valores altos para barfrup_1 y barfrup_2.

Lanza un indicador fractal en el gráfico y un EA de prueba con esta función

y desenrollar los valores encontrados pasando a mi funciónMODE_UPPER y MODE_LOWER

novichok2018:

Gracias, funciona.

Lo único que no entiendo es cómo representar la aparición de un nuevo fractal en el código.

Debe recordar la hora del compás; cuando aparezca un nuevo compás, la numeración cambiará, mientras que la hora de apertura del compás es siempre constante.

Es decir, cuando abra mi código, recuerde la hora de la barra en la que se detectó el fractal, luego ábralo de nuevo - encuentre la barra y compare la hora de la barra con la recordada - la hora es diferente, significa un nuevo fractal