Errores, fallos, preguntas - página 2276

 

Cuando necesito rellenar una parte de un array grande con un único valor Z, utilizo la construcción

ArrayInitialize(ar,Z);     // промежуточный массив размер массива ar = 1000 
ArrayCopy(arr,ar,5000);    // основной массив заполняется значением Z c 5000 по 5999 элемент


Muchos comerciantes dirán que por qué es tan complicado, que puede ser más sencillo:

ArrayFill(arr,5000,1000,Z);

Pero por alguna razón desconocida, la primera variante que utiliza una matriz intermedia se ejecuta notablemente más rápido que la segunda

2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 338
2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 111
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 301
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 122
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 334
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 142
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 364
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 156

Ya escribí sobre este tema a CA hace un par de años. Recibí una respuesta diciendo que había encontrado y solucionado el problema y que estaría bien en la siguiente compilación.

Pero el problema persiste.

Tengo la misma prueba en MT4:

2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayInitialize + ArrayCopy = 113
2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayFill = 78
Archivos adjuntos:
 
Nikolai Semko:

Cuando necesito rellenar una parte de un array grande con un único valor Z, utilizo la construcción


Muchos comerciantes dirán que por qué es tan complicado, que puede ser más sencillo:

Pero por alguna razón desconocida, la primera variante que utiliza una matriz intermedia se ejecuta notablemente más rápido que la segunda

Ya escribí sobre este tema a CA hace un par de años. Recibí una respuesta diciendo que había encontrado y solucionado el problema y que estaría bien en la siguiente compilación.

Pero el problema persiste.

Tengo la misma prueba en MT4:

Tal vez este sea un buen lugar para comprobarlo.

 
Artyom Trishkin:

Tal vez este sea un buen lugar para comprobarlo.

¡Qué peculiaridad y sutileza!
La importante función estándar de trabajar con matrices en el lenguaje de negociación algorítmica más rápido del mundo es 4 veces más lenta que en el obsoleto lenguaje MQL4.
Sólo aquí.

Es un claro bogey.
¿Se imaginan cuántos programas van a fallar cuando se arregle?
 
Nikolai Semko:

¡Qué peculiaridad y sutileza!
La importante función estándar de trabajar con matrices en el lenguaje de negociación algorítmica más rápido del mundo es 4 veces más lenta que en el anticuado lenguaje MQL4.
Sólo aquí.

Es un claro bogey.
¿Se imaginan cuántos programas se verán afectados cuando se arregle?

Bien.

Pero, como característica actual, ¿es algo malo?
 
Artyom Trishkin:

Bien.

Pero, como característica actual, ¿es algo malo?
Sí, probablemente he planteado el problema de forma incorrecta. Parecía que estaba hablando de su solución.
Por supuesto que no. Estaba tratando de formular el problema. La opción de la matriz intermedia no es en absoluto una solución al problema, ya que tarda más en ejecutarse de lo que debería basándose en la lógica de la memoria, y además conlleva un consumo de memoria adicional.
 
Artyom Trishkin:

Bien.

Pero, como característica actual, ¿es algo malo?

Una anécdota.

Un anciano va al médico. Dice:

- Doctor, me duele la espalda.

- Inclínate. ¿Duele?

- Duele.

- ¡Inclínate más!

- Ya está, eso se siente mejor...

- ¡Allí! ¡Así es como se camina!

)))))

 
Nikolai Semko:

Cuando necesito rellenar una parte de un array grande con un único valor Z, utilizo la construcción


Muchos dirán que por qué es tan complicado: puede ser más sencillo:

Pero por alguna razón desconocida, la primera variante que utiliza una matriz intermedia funciona mucho más rápido que la segunda

No lo entiendo. ¿Por qué necesitas llenar parte de un gran array con un único valor Z? O, ¿qué datos asignas al array, con qué propósito? ¿Valores de cierre, AVG, RSI? ¿Pero no están presentes en la memoria de MetaTrader después de cargar el indicador? Estuve jugando con la matriz 0 y 1 y finalmente obtuve la palabra SOS, es decir, asigné el valor 0 a S y el 1 a O. Por supuesto, podría introducir Help para obtener un mejor resultado en el segundo tamaño de la matriz. A continuación, comprueba el tiempo de llenado para el tamaño de cada matriz. Luego suma todo y divide por 4.
 
Bob1Thec:
No puedo entenderlo. ¿Por qué necesitas llenar parte de un gran array con un único valor Z? O, ¿qué datos asignas al array, con qué propósito?
El fondo monocromático (incluyendo la transparencia) de una imagen se hace de esta manera.
 
fxsaber:
El fondo monocromático (incluyendo la transparencia) de una imagen se hace de esta manera.

más precisamente un fondo degradado

 
Nikolai Semko:

más precisamente un fondo degradado

No tengo ni idea de qué juega aquí el llenar un array con un solo valor.