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 2

 
Vasiliy Sokolov:

La primera vez entendí perfectamente lo que querías decir.

¿Qué es una "firma de cambio de valor"? Es un valor que cambia en la dinámica. Por lo tanto, es un indicador. No es necesario desarrollar un tampón anular para este fin, sino que basta con crear un algoritmo para calcular el propio "carácter de cambio" del que hablas a partir de varios de estos indicadores anulares.

La firma no es un valor. La firma es el carácter de cambio de un valor.

No es importante que se muestre en un gráfico o que se convierta en un indicador. Lo importante es que el programa pueda ver el carácter del cambio de valor en el periodo actual. Es importante construir un mecanismo para extraer esta firma de la matriz de datos, que es el buffer de anillo.

Este mecanismo es lo más complicado. Lo entenderás si intentas crearlo.

Si simplemente trazas una curva en un gráfico, nuestro cerebro ve la firma del propio cambio de valor. Está adaptado para hacer eso.

Pero intenta que un programa lo vea.

 

Para añadir:

Por el momento, los algoritmos de negociación sólo trabajan con valores específicos de los parámetros del entorno de mercado. No ven el "comportamiento" de los parámetros observados en diferentes escalas temporales.

Los Asesores Expertos no pueden extraer un concentrado significativo del historial de cambios en los valores registrados en matrices de datos (ring buffers, por ejemplo).

Las memorias cíclicas permiten "observar" los cambios en los valores en el periodo actual, pero sin extraer los caracteres de los cambios, su uso es ineficaz.

La presencia de un mecanismo para sintetizar firmas llevará a los Asesores Expertos en negociación a un nuevo nivel. El usuario podrá establecer la naturaleza de los cambios en los parámetros del mercado dentro de las condiciones comerciales de su programa.

El nivel y la calidad de un programa de este tipo estarán muy por encima de lo que hacemos ahora.

 

Interesante artículo.

Cuando calculo un indicador en MT4 por las últimas 50 barras, por ejemplo, en el tester dicho indicador funciona mucho más rápido que cuando se calcula por todas las barras.

Tengo la impresión de que en MT5 este enfoque(cálculo del indicador por las últimas n-barras) no es mucho más rápido. ¿Quién sabe sobre este tema, es así o estoy haciendo algo mal?

 
forexman77:

Interesante artículo.

Cuando calculo un indicador en MT4 por las últimas 50 barras, por ejemplo, en el tester dicho indicador funciona mucho más rápido que cuando se calcula por todas las barras.

Tengo la impresión de que en MT5 este enfoque(cálculo del indicador por las últimas n-barras) no es mucho más rápido. ¿Quién sabe sobre este tema, es así o estoy haciendo algo mal?

No entiendo muy bien lo del cálculo. Cualquier indicador requiere n periodos para su cálculo. Si n=50, entonces se calcula sobre las últimas 50 barras. ¿Y cuál es el cálculo en todas las barras?
 
Vasiliy Sokolov:
No entiendo muy bien lo del cálculo. Cualquier indicador requiere n períodos para su cálculo. Si n=50, entonces se calcula en las últimas 50 barras. ¿Y cuál es el cálculo en todas las barras?


El cálculo en las últimas n barras es el cálculo en 50 barras, y el cálculo en todas las barras es el cálculo en toda la historia disponible en el terminal(Bars-Period_). En MT4 utilizo tal construcción:

P=Period_+10;
  
limit=Bars-counted_bars-1;
if (limit > P)limit=P;//es decir, si el límite es mayor que P, entonces calculamos a partir de la barra con el número P
for(int i=limit;i>=0;i--)

El indicador se llama en el Asesor Experto, no en cada barra, sino cuando se disparan varias condiciones(la llamada al indicador está en el cuerpo de varios operadores condicionales).

En MT5, la velocidad de optimización con este enfoque no disminuye mucho.

 
forexman77:

Interesante artículo.

Cuando calculo un indicador en MT4 por las últimas 50 barras, por ejemplo, en el tester dicho indicador funciona mucho más rápido que cuando se calcula por todas las barras.

Tengo la impresión de que en MT5 este enfoque(cálculo del indicador por las últimas n-barras) no es mucho más rápido. ¿Quién sabe sobre este tema, es así o estoy haciendo algo mal?

La única diferencia es la velocidad del cálculo inicial para 1000 barras, que es preparado por el probador. Entonces cualquier indicador escrito económicamente funcionará igual de rápido, tanto en MT4 como en MT5.

 
Andrey Khatimlianskii:

Sólo difiere la velocidad del cálculo inicial para 1000 barras preparadas por el probador. Entonces cualquier indicador escrito económicamente funcionará igual de rápido, tanto en MT4 como en MT5.

Hablando de velocidad, MQL no se hace con un dedo, y sus cálculos son muy rápidos. Tan rápido que no es fácil superar a una solución estándar. Tomemos el ejemplo de ArrayMaximum/ArayMinimum. Ambas funciones encuentran el máximo y el mínimo buscando completamente en el array pasado. Es imposible reducir este cálculo porque los elementos del array pasado son siempre desconocidos. El artículo presenta una variante optimizada de la búsqueda de extremos. Debido a que los valores en ella llegan secuencialmente, es posible reducir la búsqueda escribiendo un algoritmo optimizado. Sin embargo, las ventajas de tal optitización sólo aparecerán en series suficientemente grandes. Si la serie no es grande, 5-10-20 elementos, entonces ambos algoritmos funcionan igual de bien. Quiero decir que por defecto los desarrolladores proporcionan soluciones muy rápidas, y por regla general es imposible mejorarlas, por eso aconsejo encarecidamente a los principiantes que no utilicen trucos con construcciones de programación, que piensan que pueden acelerar el código.
 
Vasiliy Sokolov:
utilizar giros con construcciones de programación que piensan que pueden acelerar el código.

En MT4 con la ayuda de este giro, la optimización es muchas veces más rápido y no me parece, puedo verlo. Es muy posible que estoy haciendo algo mal en MT5.

Tal vez no es el indicador en absoluto, pero la EA.

 
forexman77:

En MT4 con la ayuda de este giro, la optimización es muchas veces más rápido y no lo creo, puedo verlo. Es muy posible que estoy haciendo algo mal en MT5.

Tal vez no es el indicador en absoluto, pero la EA.

Vasily se dirigía a los principiantes. El 90% de los usuarios de MT tester y optimiser no lo necesitarán realmente.
 
forexman77:


El cálculo en las últimas n barras es el cálculo en 50 barras, y el cálculo en todas las barras es el cálculo en toda la historia disponible en el terminal(Bars-Period_). En MT4 utilizo tal construcción:

El indicador se llama en el Asesor Experto, no en cada barra, sino cuando se disparan varias condiciones(la llamada al indicador está en el cuerpo de varios operadores condicionales).

En MT5, la velocidad de optimización con este enfoque no disminuye mucho.

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 te hayas puesto a discutirlo. Es doblemente extraño que hables de ello como de algún 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.