Teoría de la aceleración del EA cuando se utiliza un indicador personalizado (función - iCustom) - página 3

 
-Aleks-:
Por lo tanto, el batiburrillo de indicadores necesarios funcionará más rápido que el uso de los indicadores por separado: la información sobre las cotizaciones se solicitará con menos frecuencia...

No es imprescindible. Asegúrese de que los cálculos no se duplican. Si los cálculos preliminares de dos indicadores son iguales, deben combinarse en uno solo. No hay que pegar todos los indicadores en uno solo.

No hay problemas para solicitar los presupuestos. No hay que pedirlas, vienen solas.

 

Intenté usar un tiempo de retraso para recalcular el indicador:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
 static datetime   prevtime;
  datetime per=15; //задержка секунд
   
   if((TimeCurrent()-prevtime)<per) 
   {
   return(rates_total); //прошло мало секунд - поэтому выходим
   }
 
//--- main cycle  
....................

prevtime=TimeCurrent();
return(rates_total);
 }

Al probar en "OHLSnaM1" casi no hay diferencia, quizás probar en "todos los ticks" sea más rápido.

 

mi impresión de cómo funciona iCustom (si no ha cambiado nada en los últimos 2 meses)
cuando se llama al indicador desde iCustom
todos los búferes de un posible historial y los resultados almacenados en la caché se calcularán, y la caché se vinculará a los parámetros y al nombre del indicador

si la próxima vez llama al mismo indicador y los mismos parámetros para la segunda matriz de índices - el resultado volverá de la caché (+ corrección para los nuevos datos de la historia)
si se llama al mismo indicador, pero se cambia sólo un parámetro - se realizará el cálculo completo de todos los búferes para la posible historia y el ahorro de otro caché, pero con un enlace a los nuevos parámetros.


Puede especificar la cantidad de historial que debe descargarse del Asesor Experto, si hace tal parámetro en el indicador, pero en esta llamada debe pasar siempre el mismo número - el tamaño del historial.
(afectará a la velocidad de la primera llamada de iCustom).

Puede intentar eliminar el cálculo de los búferes innecesarios, si es posible, tanto en el indicador como a través de los parámetros del indicador, como en el ejemplo con el tamaño del historial
(disminuir el tamaño de la caché - aumentar la velocidad de cálculo)

 

Gracias a todos por la información.

Quiero aclarar, si en un indicador con 5 búferes gráficos para utilizar no un búfer gráfico, pero una matriz ordinaria - para dar salida a los datos a través de un búfer gráfico, como he sugerido, la velocidad del indicador durante la optimización será más rápido, porque se asignará menos memoria para el indicador, y por lo tanto menos tiempo para trabajar con él?

Si se realiza la optimización y no se modifican los ajustes del indicador en cada pasada, ¿se recalcula el indicador?

 
-Aleks-:

Gracias a todos por la información.

Quiero aclarar, si en un indicador con 5 búferes gráficos para utilizar no un búfer gráfico, pero una matriz ordinaria - para dar salida a los datos a través de un búfer gráfico, como he sugerido, la velocidad del indicador durante la optimización será más rápido, porque se asignará menos memoria para el indicador, y por lo tanto menos tiempo para trabajar con él?

Si se realiza la optimización y no se modifican los ajustes del indicador en cada pasada, ¿se recalcula el indicador?

El buffer es un array, sólo conveniente para mostrar datos.

Durante la optimización, el indicador se recalcula cada vez.

 
komposter:

Un buffer es un array, sólo conveniente para mostrar datos.

Entiendo el array, pero el array para calcular un indicador puede ser mucho más pequeño, a menudo dinámico.

Por ejemplo en la historia de 1000 barras - el indicador personalizado dibuja 3 SMAs - 5/8/10.

En el caso estándar tendremos un buffer gráfico para casi 3000-10-8-5

Y si usamos mi método

para calcular la SMA(5) necesitamos una matriz de tamaño (perdón por la terminología) de 4 barras

para calcular la SMA(8) necesito una matriz de (disculpen la terminología) 7 barras de tamaño

para calcular la SMA(10) necesitamos una matriz de (perdón por la terminología) 9 barras

y un array de gráficos de 1000 barras, el resultado es que se necesitan 1000+4+7+9 ya que los arrays simplemente se sobreescribirán.

¿En qué me equivoco?

 
-Aleks-:

Gracias a todos por la información.

Quiero aclarar, si en un indicador con 5 búferes gráficos para utilizar no un búfer gráfico, pero una matriz ordinaria - para dar salida a los datos a través de un búfer gráfico, como he sugerido, la velocidad del indicador durante la optimización será más rápido, porque se asignará menos memoria para el indicador, y por lo tanto menos tiempo para trabajar con él?

Si se realiza la optimización y no se modifican los ajustes del indicador en cada pasada, ¿se recalcula el indicador?

Es más importante entender que cuando llame al indicador de nuevo, no se recargará en el segmento de memoria (superposición). Todo lo demás no es nada comparado con esto.
 
-Aleks-:

Entiendo el array, pero el array para calcular el indicador puede ser mucho más pequeño, a menudo dinámico.

Por ejemplo en la historia de 1000 barras - el indicador personalizado dibuja 3 SMAs - 5/8/10.

En el caso estándar tendremos un buffer gráfico para casi 3000-10-8-5

Y si usamos mi método

para calcular la SMA(5) necesitamos una matriz de tamaño (perdón por la terminología) de 4 barras

para calcular la SMA(8) necesito una matriz de (disculpen la terminología) 7 barras de tamaño

para calcular la SMA(10) necesitamos una matriz de (perdón por la terminología) 9 barras

y un array de gráficos de 1000 barras, el resultado es que se necesitan 1000+4+7+9 ya que los arrays simplemente se sobreescribirán.

¿En qué me equivoco?

Si necesitas un valor en una barra, realmente no necesitas un buffer. Tampoco el indicador ;)

Y si necesita un valor de indicador en cada barra, a menudo es más económico calcular todo, y luego calcular adicionalmente sólo la nueva barra.
Y no todos los algoritmos son tan sencillos como la SMA, simplemente no se pueden calcular "para 5 barras". Echa un vistazo al zig-zag al menos.

Lo que más me confunde es que no intentas aplicar las respuestas en la práctica. Parece que no hay ninguna tarea práctica, sólo trucos teóricos.
Entonces no entiendo por qué participo en ella.

 

Por cierto, MT4 se las arregla muy bien con el cálculo de sólo una parte de la historia y no consume memoria para todo el buffer, si el bucle pasa por las últimas 1000 barras (incluso si hay 50000 barras "en la ventana").

Sin embargo, me encontré con este problema en MT5 - asigna la memoria para todas las 50000 barras incluso si sólo se cuentan las últimas 100.

 
komposter:

Si necesitas un valor en una barra, realmente no necesitas un buffer. Tampoco el indicador ;)

¿Por qué un bar? Sólo decía que para calcular el valor de un indicador rara vez se necesita conocer todos sus indicadores para todo el historial temporal. Por eso escribí que los buffers (arrays) se utilizarán sólo para el cálculo, mientras que el resultado del cálculo de 3 MAs se almacenará en unbuffer gráfico.

En cuanto a Zig-zag - esto es un dolor de cabeza para mí ahora - requiere una serie de respuestas, pero voy a abrir un hilo separado.

komposter:

Lo que más me confunde es que no intentas aplicar las respuestas en la práctica. Da la sensación de que no hay ninguna tarea práctica, sólo especulaciones teóricas.

Entonces no entiendo por qué participo en ella.

El caso es que yo no soy programador, mis investigaciones me ayudarán a redactar la especificación de los requisitos. Ahora estoy desarrollando un indicador, que será un componente del motor del EA - tiene muchos buffers, así que estoy pensando en cómo acelerar el EA no integrando el indicador en el código, sino por otros métodos.

Y también esperaba que alguien estuviera interesado en probar dicho algoritmo en la práctica, para comparar la velocidad de funcionamiento...


komposter:

Por cierto, MT4 es perfectamente capaz de calcular sólo una parte de la historia y no come memoria para todo el buffer, si el bucle pasa por las últimas 1000 barras (aunque haya 50000 en la "ventana").

Sin embargo, me encontré con este problema en MT5 - asigna memoria para todas las 50000 barras, incluso si sólo cuento las últimas 100.

Es un hecho triste para 5. ¿Los desarrolladores no explican el significado sagrado de esto?