MT4 iMAOnArray y iBandsOnArray efecto del número de elementos en los cálculos - página 7

 
Alexey Viktorov:

¿Estás diciendo que después de if(rates_total-i >= rates_total-100);, cuando sólo quedan 100 barras por calcular, la función iMAOnArray() recalcula primero la matriz ALL?

No, sólo la mitad.
 
Alexey Viktorov:

¿Estás diciendo que después de if(rates_total-i >= rates_total-100);, cuando sólo quedan 100 barras por calcular, la función iMAOnArray() recalcula primero toda la matriz?

iMAOnArray

Devuelveel valordelindicador técnico Moving Average calculado sobre los datos almacenados en el array.

doubleiMAOnArray(
doublearray[],// array
inttotal,// número de elementos
intma_period,//periodo
intma_shift,// desplazamiento de la media
intma_method,// método de promediación
int cambio//desplazamiento
);

Parámetros

array[]

[in] Array con datos.

total

[in]Número de elementos a calcular. 0 significa todos los elementos de la matriz.

Así es, la primera llamada de iMAOnArray con 0 en el valor del tamaño calcula incondicionalmente todo el array, y luego parece que sólo se calculan los últimos o como mucho los 2 últimos valores, aunque quién sabe, puede recalcular todo... Por eso se está ralentizando. Por eso no importa el número de barras que quieras obtener por desplazamiento, de todas formas se cuenta todo el array.

 
Sergey Efimenko:

iMAOnArray

Devuelveel valordelindicador técnico Moving Average calculado sobre los datos almacenados en el array.

doubleiMAOnArray(
doublearray[],// array
inttotal,// número de elementos
intma_period,//periodo
intma_shift,// desplazamiento de la media
intma_method,// método de promediación
int cambio//desplazamiento
);

Parámetros

array[]

[in] Array con datos.

total

[in]Número de elementos a calcular. 0 significa todos los elementos de la matriz.

Así es, la primera llamada de iMAOnArray con 0 en el valor del tamaño seguramente calculará todo el array, y luego parece que sólo se calculan los últimos o como mucho los 2 últimos valores, aunque quién sabe, puede recalcular todo... Por eso se está ralentizando. Por eso no importa el número de barras que quieras obtener por desplazamiento, de todas formas se cuenta todo el array.

Así que me he equivocado. ¿Y por qué no hay frenos sin sus complejos cálculos?
 
Alexey Viktorov:
Entonces me he equivocado. Entonces, ¿por qué no hay desfase sin sus complicados cálculos?
Esa es la cuestión: ¿por qué se ralentiza cuando se llama desde el código, pero no cuando sólo se superpone al gráfico? Sólo los desarrolladores sabrán dónde encontrar la respuesta. Tengo un montón de indicadores complicados en mis gráficos y algunos de ellos incluso utilizan bucles recursivos y se supone que "piensan en largo", mientras que esta es una tarea simple que toma mucho tiempo para calcular.
 
Sergey Efimenko:
Esa es la cuestión, por qué se retrasa cuando se llama desde el código, pero no cuando sólo se superpone en el gráfico. Sólo los desarrolladores saben dónde buscar la respuesta. Tengo muchos indicadores complicados en mis gráficos y algunos de ellos incluso utilizan bucles recursivos y se supone que "piensan en largo", pero esta es una tarea sencilla que tarda mucho en calcularse.

No me refiero a una simple superposición de gráficos. Me refiero a ese código de prueba. Se llama allí, no se superpone.

Aun así, creo que he superado la mierda de copiar parte de la matriz. E incluso MODE_LWMA recalcula de la misma manera que contando todo el array.


El rojo se calcula sobre todo el historial. El verde son los últimos 50 compases.

 
Alexey Viktorov:

...

Aun así, creo que he superado la mierda de copiar parte de la matriz. E incluso MODE_LWMA recalcula de la misma manera que contando todo el array.

...

También lo ha vencido.

 
Alexey Viktorov:

No me refiero a una simple superposición de gráficos. Me refiero a ese código de prueba. Se llama allí, no se superpone.

Aun así, creo que he superado la mierda de copiar parte de la matriz. E incluso MODE_LWMA recalcula de la misma manera que contando todo el array.


El rojo cuenta toda la historia. El verde son los últimos 50 compases.

Me da la impresión de que estás leyendo mis posts palabra por palabra, si no frase por frase. ¿Ganar qué? Escribí que tuve una idea así (código similar con limitación de cálculo de barras) inmediatamente y lo probé y no obtuve ningún aumento de rendimiento porque el array se sigue calculando por completo (total=0), el hecho de que se copien (rellenen el buffer) sólo los últimos 100 elementos, no cambia la ralentización de los cálculos, frena el hecho de no conseguir elementos en el buffer, y el cálculo de la media del array, que o bien se calcula por completo (total=0) o bien da resultados sólo de los primeros N elementos (total=N), y que necesitan los últimos, mientras que el cambio de dirección de indexación no da el efecto deseado.
 
Sergey Efimenko:
Tengo la impresión de que lees mis posts palabra por palabra o incluso frase por frase. ¿Ganar qué? Escribí que tenía una idea de este tipo (código similar con la limitación de cálculo de barras) inmediatamente, e inmediatamente lo probé y no obtuve ningún aumento de rendimiento, porque El array se sigue calculando en su totalidad (total=0), el hecho de que se copien (rellenen el buffer) sólo los últimos 100 elementos no quita freno a los cálculos, no es meter elementos en el buffer, es el cálculo de la media del array, que o bien se calcula en su totalidad (total=0) o bien muestra resultados sólo los primeros N elementos (total=N), y los últimos son necesarios, el cambio de sentido de indexación no da el efecto deseado.

Al parecer, mis mensajes también se leen... El código anterior no encaja, he descubierto dónde se ha producido el error. La última captura de pantalla muestra un enfoque diferente, aunque sólo se cuentan las últimas 50 barras.

No publiqué el código de inmediato esperando reacciones como "no va a funcionar de todos modos" porque... El código no es secreto, si quieres comprobar cómo funcionará con tu indicador, házmelo saber.

Dmitry Fedoseev:

También ganó.

Y tú sólo puedes armar un escándalo. Cuenta con cuántos miembros del foro te comunicas con este tono de voz, como ahora conmigo. Vete, Satanás.
 
Alexey Viktorov:

...

Lo único que puedes hacer es armar un escándalo. Cuenta con cuántos usuarios del foro has hablado con ese tono de voz como lo estás haciendo conmigo ahora. Vete, Satanás.

Así es como he estado hablando con gente como tú. Hay una coalición de ustedes aquí, lo sé.

Incluso ayer escribiste aquí sobre el fracaso del enfoque de la copia de matrices. Se apuntó a la LWMA y funcionó. ¿No tienes suficiente pereza para comprobarlo con EMA, y la hueste del poder sagrado? ¿Pusiste una vela en la iglesia?

Sigues resoplando y resoplando, y cada vez dices: "Oh, debo haber cometido un error.

Una pelea. Si tuvieras un poco de sentido común, hace tiempo que habrías visto que el asunto de este tema está resuelto.

Quisiste lucirte una vez más, pero te volaron los cuernos e inmediatamente te lamentaste con Satanás. ¡Hombre!

 
Alexey Viktorov:

Al parecer, mis mensajes también se leen... El código anterior no encaja, he descubierto dónde se ha producido el error. La última captura de pantalla muestra un enfoque diferente, aunque sólo se cuentan las últimas 50 barras.

No publiqué el código de inmediato esperando reacciones como "no funcionará de todos modos" porque... El código no es secreto, si quieres comprobar cómo funcionará con tu indicador, dímelo.

¿Debía adivinar que hay un código diferente? Arriba hay una captura de pantalla también, donde se cuentan las últimas 100 barras, pero en realidad se cuentan todas las barras, pero sólo 100 se copian en el buffer. Sí y ¿por qué no publicar el código de una vez? No habría habido tal respuesta. Habría respondido de forma sustantiva, no entiendo cuál es el objetivo. En el código se puede ver inmediatamente lo que sucede, lo que cuenta y si hay los defectos mencionados. ¿Y qué te da la pantalla? Nada más que el resultado, y sobre el resultado ya dicho, se puede llegar de diferentes maneras, pero no todas ellas son aceptables para la tarea que nos ocupa: reducir el tiempo de cálculo.
Razón de la queja: