Discusión sobre el artículo "Recetas MQL5 - Creando el búfer circular para calcular rápidamente los indicadores en la ventana móvil" - página 3

 
Vasiliy Sokolov:

Calcular sólo el último valor del indicador, y no recalcularlo completamente con la llegada de un nuevo tick, es algo tan estándar que resulta extraño que hayas empezado a hablar de ello. Es doblemente extraño que hables de ello como de un truco que has encontrado. En realidad, es un estándar para escribir todos los indicadores. También se menciona en la documentación. Es por eso que absolutamente todo el mundo utiliza el recálculo en la última barra / tick.


Voy a tratar de responder con más detalle:

Hay un indicador bastante pesado. Se solicita en el Asesor de Expertos en muy raras ocasiones, es decir, hasta que todas las condiciones se activan. Por ejemplo, cada, digamos, 300-1000 bares (de hecho, depende de una serie de condiciones, que se expresan en los operadores condicionales). Y si se obtiene el valor incluso una vez en cada barra, será más veces que la llamada indicador oculto en el cuerpo de los operadores condicionales.

if(условие1)
{
if(условие2)
{
if(условие3)
{
if(условие4)
{
 и тут вызываю индикатор(mql4), такая ситуация встречается совсем редко
}
}
}
}

más o menos así.

En principio, límite con este enfoque siempre debe ser igual a P.
 
forexman77:


Intentaré darte una respuesta más detallada:

hay un indicador bastante pesado. En el Asesor Experto se solicita muy raramente, es decir, hasta que se activan todas las condiciones. Por ejemplo, cada, digamos, 300-1000 barras (de hecho, depende de una serie de condiciones, que se expresan en operadores condicionales). Y si se obtiene el valor incluso una vez en cada barra, será más veces que la llamada al indicador oculto en el cuerpo de los operadores condicionales.

Este enfoque, por cierto, no siempre ahorra dinero. Porque las barras perdidas se siguen calculando al llamar al indicador.
 
Andrey Khatimlianskii:
Este enfoque, por cierto, no siempre da ahorros. Porque las barras omitidas se siguen calculando cuando se llama al indicador.


Pero si sé que la condición se cumplirá raramente, utilizo este método, y si el indicador se llama a menudo, es mejor contar toda la historia.

Y por supuesto, debería calcular sólo una nueva barra, ya que las antiguas ya son conocidas, está claro.

Ahora pensé que es necesario comenzar estrictamente desde P sin comparación

if (limit > P)limit=P;//эту строку вообще убрать и сделать сразу  limit=P;

Si en el ciclo el cálculo comienza desde P, y es igual a 10, por ejemplo, entonces el cálculo será a partir de 10 bar.

P=Period_+10;
  
limit=P;
for(int i=limit;i>=0;i--)

Pero, no es tan importante, podemos dejarlo como está. No vale la pena.

"Las barras perdidas se siguen calculando cuando se llama al indicador" ¿puedes ser más detallado?

Para ser honesto, ahora tengo tales indicadores sólo en una barra cero o la primera.

Por ejemplo, aquí está la parte principal del código de uno de ellos:

int start()
  {
    double summaP,d,Q;

   summaP=0.0;
   for (int k=0;k<Period_;k++)
   {
   d=MathAbs(Close[k]-Close[k+1]);
   summaP=summaP+d;
   }
   if(summaP==0.0) summaP=0.000000001;
   Q=Close[0]-Close[Period_];  
   ExtMapBuffer1[0]=Q/summaP;

   return(0);
  }

Es decir, estos son indicadores para el probador. Por supuesto, no se utilizarán para la visualización, no se puede ver nada en ellos).

Pero, un buffer de anillo será necesario si el indicador consiste en varios buffers, donde un array se construye a partir de otro.

 
forexman77:

"Las barras perdidas se siguen calculando cuando se llama al indicador" ¿puede ser más detallado?

Supongamos que el indicador fue llamado cuando había 1000 barras en el gráfico, las contó. La siguiente llamada - barras 1001, contó una barra.
Pero si la siguiente llamada será cuando las barras ya son 1500, contará todas las nuevas (499) barras.


forexman77:

Para ser honesto, ahora tengo tales indicadores significan sólo en una barra cero o la primera barra.

Entonces, ¿cuál es el punto de indicadores en absoluto? Transferir estos cálculos en forma de una función en el Asesor de Expertos, será aún más rápido.

 
forexman77:


Intentaré responder más detalladamente:

El indicador se calcula en cada barra, independientemente de si lo llama o no. Lea la especificación.

Si quieres una aceleración real, mueve los cálculos dentro del EA. No hay otra manera. Punto y aparte. Todos los mensajes acerca de cómo con éxito se puede insertar si son sólo divertido de leer.

Tu tema está fuera de lugar para este hilo. Vamos a terminar aquí.

 

Estimado Vasiliy

En primer lugar, gracias por este excelente artículo y sus implementaciones con diferentes indicadores.

Me gustaría preguntarle si sería posible publicar un ejemplo de código para la sección de cálculo de máximos y mínimos con la memoria cíclica. Me resulta difícil obtener los resultados correctos cuando el mercado está en marcha. Parece que pierdo el puntero al actualizar los precios cambiantes con la función OnChangeValue().

Gracias de antemano.

 
Savio Araujo:

Estimado Vasiliy

En primer lugar, gracias por este excelente artículo y sus implementaciones con diferentes indicadores.

Me gustaría preguntarle si sería posible publicar un ejemplo de código para la sección de cálculo de máximos y mínimos con la memoria cíclica. Me resulta difícil obtener los resultados correctos cuando el mercado está en marcha. Parece que pierdo el puntero al actualizar los precios cambiantes con la función OnChangeValue().

Gracias de antemano.


Vea este ejemplo: https://www.mql5.com/es/articles/3047#c6

 
Vasiliy Sokolov:

Véase este ejemplo: https://www.mql5.com/es/articles/3047#c6


Ya lo he visto. Como he comprobado los ejemplos que has proporcionado. Muestran el mismo problema que tuve cuando se trata de actualizar los valores mientras el mercado está en marcha. Compruebe el estocástico que ha proporcionado. Agregar un nuevo valor no es un problema, pero cuando tratamos de usar Stoch.ChangeLast() o OnChangeValue() en la clase CRiMaxMin, no funciona. No cambia el valor en consecuencia. Si pudieras comprobarlo o enviar un ejemplo de un código que funcione, estaría muy bien.

Muchas gracias.

 

Un gran artículo, ¡el hombre sabe programar!

¡¡¡¡¡Si la traducción al alemán no fuera tan horrible!!!!!

¿Dónde puedo encontrar la versión en inglés?

¿Puedo cambiarla en algún sitio?

 
En el enlacehttps://www.mql5.com/es/articles/3047 sustituya el ../es/.. por ../es/..
Die Rezepte MQL5 - Die Erstellung des Ringpuffers für eine schnelle Berechnung der Indikatoren im gleitenden Fenster
Die Rezepte MQL5 - Die Erstellung des Ringpuffers für eine schnelle Berechnung der Indikatoren im gleitenden Fenster
  • 2017.05.29
  • Vasiliy Sokolov
  • www.mql5.com
Der Ringpuffer — ist die einfachste und zugleich die wirksamste Organisationsart der Daten für die Berechnungen im gleitenden Fenster. Im Artikel ist beschrieben, wie dieser Algorithmus gestaltet ist, und es ist gezeigt, wie mit seiner Hilfe eine Berechnung im gleitenden Fenster ein einfacher und wirksamer Prozess sein wird.