Preguntas sobre el MQL4 - página 12

 
la única pregunta es, будет ли работать заметно быстрее, если обработку массивов вынести в DLL?
¿alguien tiene algún compilador instalado? ¡por favor, compruébalo! ¿no es así de aburrido?


Los accesos a las matrices son diez veces más lentos que las variables locales.


El tiempo de direccionamiento de un elemento del array no es SIEMPRE mayor que el tiempo de direccionamiento de una variable.
Las cifras específicas serán diferentes para los distintos compiladores, pero la tendencia debería mantenerse.

El compilador es Visual Studio 2005. El procesador es Athlon XP 2500+.
El tiempo de ejecución junto con la inicialización de la matriz es de 1,06-1,07 segundos.
Dim t1, t2 As Double t1 = DateAndTime.Timer() Dim x, y, z As Double Dim d, k As Double Dim Open(5001), Close(5001) As Double For d = 5000 To 1 Step -1 For k = 1 To 4999 z = Close(k) : y = Close(k + 1) : x = Close(k + 2) z = Open(k) : y = Open(k + 1) : x = Open(k + 2) Next Next t2 = DateAndTime.Timer() MsgBox(CStr(t2 - t1) + " segundos")



El mismo bucle, pero con

z = Cerrar(1) : y = Cerrar(1) : x = Cerrar(1) z = Abrir(1) : y = Abrir(1) : x = Abrir(1)


da de 0,37 a 0,4 segundos.

Y por último,

z = k : y = k : x = k z = k : y = k : x = k


0,56-0,6 с.

Así que me gustaría sacar la siguiente conclusión:
no se trata de un compilador ni de "array/no array", sino de una estructuración de datos adecuada y un código correcto.
P.D. Por supuesto, todas las tesis anteriores, excepto las medidas de tiempo, son mi opinión personal, profundamente subjetiva y modesta, como programador.

 
gracias!

sí, la optimización del código resultante en el compilador es una potencia después de todo...
no quiero entrar en detalles, pero parece que el copilador de visual studio optimiza los accesos a los arrays por sí mismo.
para que la prueba sea justa, es necesario introducir una variable, digamos, S; e insertar entre todas las asignaciones x,y,z algo así como S=S+x, S=S+y, S=S+z, y luego dar salida a S además del tiempo para obtener la velocidad "pura".

aunque el optimizador del compilador puede averiguar parcialmente esta trampa... :)
 
para asegurar la integridad de la prueba, necesitamos introducir una variable


Hace tiempo que descarté esos pensamientos. Incluso he hecho pruebas. Y he llegado a una conclusión:

El compilador realiza todas las operaciones prescritas y simplemente no tiene derecho a no realizarlas porque es simplemente imposible saber al 100% desde dónde pienso acceder a estas variables - en el mismo método, desde algún temporizador (y código estructuralmente no relacionado) o incluso desde algún otro proceso.
Por lo tanto, todo es justo. Comprobado.

P.D. Offtopics, lo siento. No pude resistirme.
 
sobre los accesos a los arrays...
¿cuál es el array especificado por el parámetro en ArrayCopySeries?

¿es un array normal de valores, o un array de punteros a valores?

(obviamente es una pregunta tonta, pero hace 10 años que no programo, y mucho menos en C, y mucho menos en Windows).

y ¿dónde leer sobre todo esto?
 
¿Hay alguna forma de determinar el estado del botón de activación del EA entre ticks?
Realmente necesito...

¿Hay alguna manera de... No lo sé. ¿Está permitida la invocación recursiva de start()?
 
¿entonces no se dispara deinit() cuando se apaga el botón?
 
¿Hay alguna forma de determinar el estado del botón de activación del EA entre ticks? <br / translate="no">

no hay manera. el EA no se iniciará si el botón está desactivado.

¿Está permitido el acceso recursivo a start()?

está permitido.
 
Slawa,
Gracias por su respuesta.


Bueno, eh... ¿Y ahora qué?
No sé... o ir por 5, pero ayer... y hoy por 3... los pequeños.

Tendré que conformarme con un montón de pequeños. No quería hacerlo. Bueno, y ahora qué... :(
Parece tan fácil...

(no me hagas caso, que la meditación ya salpica el teclado)
 
FirstVisibleBar() y BarsPerWindow() no se resaltan en color en ME.
¿Soy yo, o se supone que es así?
 
FirstVisibleBar() y BarsPerWindow() no se resaltan en color en ME. <br / translate="no"> ¿Soy yo o debería serlo?

Son y siempre han sido destacados con normalidad. Acabo de comprobar la construcción del 183 y el 187.