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

 
komposter:

Y si el indicador es de 5 búferes, entonces la primera llamada de iCustom calculará todos los búferes, las siguientes llamadas y solicitudes de otros búferes sólo leerán la información lista (hasta la aparición de nuevos datos para el cálculo).

Es decir, si el indicador ha sido llamado al menos una vez, ha recibido la información no sólo del buffer solicitado, sino de todos los buffers incluidos en el indicador? O bien, significa que el cálculo de otros búferes se encontrará en la memoria y no habrá ningún recálculo debido a ello - los datos se tomarán de la RAM, si no se ha llamado explícitamente antes (el programa (EA) no ha asignado la memoria explícitamente para el almacenamiento de los datos del indicador). He leído antes que cada vez que se llama al indicador, se recalcula - ¿no es así?

komposter:

Si tiene un indicador muy pesado, piense en su propio sistema de caché, de modo que en la primera llamada los datos se calculen y se escriban en el archivo, y en la siguiente sólo se lean. Yo lo he hecho así, es mucho más rápido.

Pero en el 95% de los casos no hace falta todo eso, el probador es lo suficientemente rápido como es, y en el 5 también puedes conectar la nube.

Buena suerte.

¿Sería más rápida la lectura desde un disco duro, o se hizo una unidad virtual en la memoria con los datos del indicador calculado?

Bueno, sólo estoy soñando con los cinco, por ahora sólo implemento ideas personalizadas en los cuatro.

Gracias por desearme suerte.

 
komposter:

Si tienes un indicador realmente pesado, diseña tu propio sistema de caché, de manera que en la primera ejecución los datos se calculen y se escriban en el archivo, y en las siguientes sólo se lean. Yo lo he hecho así, es mucho más rápido.

Pero en el 95% de los casos no hace falta todo eso, el probador es lo suficientemente rápido como es, y en el 5 también puedes conectar la nube.

Buena suerte.

No estoy hablando de un indicador, sino de un Asesor Experto, pero el tema está cerca. Mi scalper cuenta bastante, todo tipo de filtros, conversiones. He guardado mi modelo en Matlab y primero he calculado todas las matemáticas y las he introducido en un archivo .mat, y luego he utilizado esos datos para ejecutar una estrategia. Ahora tengo ganas de hacer lo mismo con MQL4 Strategy Tester, porque la optimización es simplemente irreal.
 
-Aleks-:

Es decir, si el indicador es llamado al menos una vez por el programa, éste ha recibido información no sólo del buffer solicitado, sino también de todos los incluidos en el indicador? O bien, significa que el cálculo de otros búferes se encontrará en la memoria y no habrá ningún recálculo debido a ello - los datos se tomarán de la RAM, si no se ha llamado explícitamente antes (el programa (Asesor Experto) no ha asignado la memoria explícitamente para el almacenamiento de los datos del indicador). He leído antes que cada vez que se llama al indicador se recalcula, ¿no funciona así?

El indicador no puede calcular sólo un buffer, considera todo lo que tiene dentro en cualquier llamada. A no ser que se pueda limitar el cálculo mediante parámetros, pero ese es otro tema.

El recálculo se realiza en cada llamada, pero normalmente sólo se recalcula la barra 0. Y si un EA está escrito de forma inteligente, estas llamadas no se producen en cada tick.

-Aleks-:

¿Sería más rápida la lectura desde un disco duro o ha creado un disco virtual en la memoria con datos indicadores calculados?

Leo desde un disco normal, pero no los valores de los indicadores en cada barra, sino la cadena "tiempo;señal"; estos datos son mucho menos necesarios.

Es poco probable que exista una solución universal para cualquier indicador, debe basarse en el problema global.

-Aleks-:

Sólo he soñado con el indicador cinco, sólo he realizado mis ideas sobre el indicador cuatro.

La única diferencia está en la parte comercial y en el trabajo con series temporales (incluyendo indicadores).

Y la nube es algo realmente poderoso.

 
VDev:
No hablo del indicador sino del Asesor Experto, pero el tema está cerca. Tengo un scalper que calcula bastante, todo tipo de filtros y transformaciones. He guardado el modelo en Matlab y primero he calculado todas las matemáticas y las he introducido en un archivo .mat y luego he utilizado esos datos para ejecutar una estrategia. Ahora tengo ganas de hacer lo mismo con MQL4 Strategy Tester, porque la optimización es simplemente irreal.

Apenas tiene sentido tener un caché para un indicador separado, también partí de los datos necesarios en el EA.

A grandes rasgos, se registraban las señales de listo, y luego sólo se leían y realizaban las entradas y el apoyo a la posición.

 
komposter:

El indicador no puede calcular sólo un búfer, calcula todo lo que hay dentro de él en cualquier llamada. A no ser que el cálculo pueda ser limitado por los parámetros, pero ese es otro tema.

El recálculo se realiza en cada llamada, pero normalmente sólo se recalcula la barra 0. Y si un EA está escrito de forma inteligente, entonces estas llamadas no se producen en cada tick.

Entonces, ¿resulta que si dirigimos un indicador con muchos búferes y recibimos la información de todos ellos desde uno de ellos, entonces será más rápido y más económico en términos de memoria que calcular tantas veces como información de sus diferentes búferes se necesite para este indicador?


Aun así, quizá alguien pueda hacer un experimento, ¡porque la idea me tiene ocupado! ¿O la investigación de la innovación sólo es interesante por una cuota?

 
El OnCalculate() del indicador sólo se llama la primera vez que se llama a iCustom() en un nuevo precio. Las siguientes llamadas a iCustom() sólo recuperarán los datos sin iniciar onCalculate(). Digamos que el precio cambia, la siguiente llamada a iCustom()inicia onCalculate(), las siguientes llamadas sólo reciben datos y así sucesivamente, hasta que el precio cambie, etc. (probado experimentalmente en este momento).
 
-Aleks-:

¿Así que al final resulta que si diriges un indicador con muchos buffers y obtienes información de uno de ellos sobre todos ellos, será más rápido y más económico en memoria que calcular tantas veces este indicador necesita información de sus diferentes buffers?

1 indicador para 5 tampones o 5 indicadores para 1 tampón es aproximadamente lo mismo.
Si sólo necesita información de 2 buffers, será más rentable llamar a 2 indicadores con 1 buffer que a un indicador con 5 buffers. Pero no es más rentable que un indicador con 2 buffers.


-Aleks-:

Aun así, quizá alguien pueda hacer un experimento, ¡porque la idea me tiene ocupado! ¿O la investigación de la innovación sólo es interesante por una cuota?

komposter:

Este enfoque reducirá el consumo de memoria del indicador (aproximadamente un múltiplo de la diferencia en el número de búferes antes y después), pero aumentará la carga en el procesador (y "construir" y "descomponer" tiene que hacerse constantemente).

Si no llega al límite de memoria (lo que es poco probable con los volúmenes actuales), sólo se ralentizará.

 

Siento que me están malinterpretando. :)

Pero entiendo que lo más probable es que sea yo quien no lo entienda.

Supongamos que llamamos al indicador personalizado en el código - tenemos que especificar el buffer de este indicador y luego, siguiendo el código, llamamos al indicador personalizado de nuevo con el mismo nombre que la primera vez pero con un buffer diferente.

Pregunta: ¿el indicador se calculará dos veces o sólo una?

 
-Aleks-:

...

La pregunta es si el indicador se calculará dos veces o sólo una?

Una vez.
 
Integer:
Una vez.
¿Así que una mezcla de los indicadores adecuados funcionará más rápido que el uso de los indicadores por separado, por lo que habrá menos solicitudes de información sobre cotizaciones?