Versión beta del libro en línea sobre la programación de MQL4 - por Sergey Kovalev (SK.) - página 10

 
Lo siento, lo encontré.
Sí, el manual está muy bien, pero volviendo a mi petición anterior, es necesario tenerlo a mano para poder consultarlo puntualmente.
Lo ideal es que sustituya a la ayuda estándar en las nuevas versiones de MT.
 

a SK

double mi_búsqueda_y_etc()
{ double summ[]; //array dentro de la función
//.........
i=ArrayMinimum(summ,iter,0); // trazador: <posición inicial 0 de la función ArrayMinimum>

/segunda variante de error
static double summ[]; //
//.........
i=ArrayMinimum(summ,iter,0); // trazador: <posición inicial 0 de la función ArrayMinimum>
//es decir, error de direccionamiento dinámico del elemento inicial del array en el segundo tick
//.......................

//........................
//tiempo adecuado
double summ[1000]; //la especificación del tamaño explícito implica el tipo static
//.........
i=ArrayMinimum(summ,iter,0); // O.k.
//derecha dos
static double summ[1000]; //seguro al tamaño explícito
//.........
i=ArrayMinimum(summ,iter,0); // O.k.
}

 
No, no es necesario sustituir la ayuda estándar. Quédatelo. Los desarrolladores de software de idiomas normales separan la descripción del idioma de todos los diversos tutoriales para el mismo.
 
Korey:

a SK


No sé muy bien cuál es su pregunta. El conjunto de cadenas que representa es un código completo (entonces, ¿por qué se repite la inicialización?) o son cadenas de texto (entonces, ¿por qué hay llaves?). Envíe el código terminado y formule la pregunta. Utilice el botón MQL (en la línea superior de la ventana de edición) para publicar el código.
 
Renat:
¡Felicidades a Sergei Kovalev!

El lanzamiento del Tutorial MQL4 está previsto para el 1 de febrero, y ya se ha integrado en la página web MQL4.community. La traducción al inglés está muy avanzada.

Gracias por tus felicitaciones, Renat.

Me gustaría aprovechar esta oportunidad para decirles una vez más que es un gran honor para mí publicar el tutorial MQL4 en el sitio web de MetaQuotes Software Corp. Les agradezco sinceramente su confianza, su apoyo y sus ánimos. También agradezco a Stanislav Starikov y Rashid Umarov, de MetaQuotes Software Corp., sus valiosos consejos y su ayuda en la preparación del libro de texto.

 
a SK
El artículo muestra 4 variantes de inicialización de arrays con una misma llamada aArrayMinimum();
Se muestra que la inicialización de un array en un subprograma sin especificar el tamaño del array [] conduce al error "RunTime
- En las dos primeras variantes, el error se cita, en la traducción: "dirección incorrecta del comienzo de la matriz".
-las dos segundas variantes funcionan, se demuestra que especificar una dimensionalidad de [1000] hace que el array sea automáticamente estático.
Conclusiones:
1) Las matrices MQL4 no siempre son estáticas,
2) La definición de a[] estática, es decir, sin dimensionalidad explícita, no funcionará, pero no habrá mensaje de error. El error se muestra en tiempo de ejecución en el segundo y posterior tick en la ventana del Asesor Experto.
3) Los errores descritos de estática/dinámica aparecen si el array está definido en el sub/func, y son captados sólo por los que miran en la ventana de "Asesores Expertos",
y sólo cuando llega la segunda garrapata. Por ejemplo, el error no se detecta cuando se depura el indicador en el fin de semana sin utilizar el probador de estrategias.
4) La línea del libro de texto "Los arrays de MQL4 son siempre estáticos" puede estar relacionada con compilaciones anteriores.
 

Me gustaría tener un conjunto de tutoriales de vídeo además de los tutoriales de texto. Disponer de un conjunto de videotutoriales. Falta, sobre todo, una primera lección: cómo descargar, instalar el programa y realizar la primera operación de Buy o Shell.

 
Korey:
a SK
El artículo muestra 4 versiones de inicialización de un array con una misma llamada aArrayMinimum();
Se muestra que la inicialización de un array en un subprograma sin especificar el tamaño del array [] conduce al error "RunTime
- En las dos primeras variantes, el error se cita, en la traducción: "dirección incorrecta del comienzo de la matriz".
-las dos segundas variantes funcionan, se demuestra que especificar una dimensionalidad de [1000] hace que el array sea automáticamente estático.
Conclusiones:
1) Las matrices MQL4 no siempre son estáticas,
2) La definición de a[] estática, es decir, sin dimensionalidad explícita, no funcionará, pero no habrá mensaje de error. El error se muestra en tiempo de ejecución en el segundo y posterior tick en la ventana del Asesor Experto.
3) Los errores descritos de estática/dinámica aparecen si el array está definido en el sub/func, y son captados sólo por los que miran en la ventana "Asesores Expertos",
y sólo cuando llega la segunda garrapata. Por ejemplo, el error no se detecta cuando se depura el indicador en el fin de semana sin utilizar el probador de estrategias.
4) La línea del libro de texto "Los arrays de MQL4 son siempre estáticos" puede estar relacionada con compilaciones anteriores.


Su razonamiento no es muy claro. Se declara un array sin dimensiones (de hecho, el programa sólo tiene el nombre del array, cuyos elementos no están definidos y para el que no se asigna memoria), y se intenta, mediante la función ArrayMinimum(), encontrar el valor mínimo entre los elementos que no existen. Por supuesto, el error se producirá independientemente de si el array está declarado como estático o no, y debe tratar el error de ejecución como una indicación de la propiedad del array de ser estático o no.

Los arrays en MQL4 son estáticos por definición. Significa (a menos que, por supuesto, haya al menos un elemento en el array) que los elementos del array se almacenan desde la última vez que la función (que declaró el array) fue terminada hasta la próxima vez que se llame, independientemente de si el identificador del array tiene la palabra clave static delante.

 
a SK
Qué me importa, llevamos mucho tiempo utilizando estos trucos de asignación de memoria.
No escribí sobre el contenido del array, sino sobre su direccionamiento, que no hay errores de compilación, ni de enlace, pero hay un ERROR DE DIRECCIÓN.
Es decir, el compilador me permitió definir un array [] en una subrutina para hacerlo crecer después, - eso es bueno (!),
es asignación de memoria dinámica por array.
Sin embargo, todos los punteros a esta matriz se enlazan como punteros directos (pero no punteros a punteros),
lo que lleva a un desajuste entre las direcciones estáticas enlazadas y la dirección de la matriz recién asignada cuando sigue la asignación de memoria dinámica.
Es decir, la referencia al array (puntero) en MQL4 es ahora estática, y funciona correctamente sólo cuando el array es realmente estático.
El compilador no entiende que el array será movido en el futuro sin el tamaño explícito dentro de la subrutina.
El programador pone static y piensa que todo es correcto, pero si no especifica un tamaño explícito - no hay array estático, y el array en realidad resultará ser dinámico (sin errores de compilación/carga).
El problema no es tan grande, normalmente todo el mundo mantiene las matrices a nivel global.
Pero es deseable escribir en el tutorial no que supuestamente todos los arrays son ya estáticos, sino que hay que escribir arrays locales estáticos con un tamaño explícito.
 
Korey:
a SK
El programador pone static y piensa que todo es correcto, pero si no especifica un tamaño explícito - no hay array estático, y el array en realidad resultará ser dinámico (sin errores de compilación/carga).

Un programador que sepa que todos los arrays en MQL4 son estáticos no pondrá static, simplemente porque no es necesario.

Pero es deseable escribir en el tutorial no que supuestamente todos los arrays son ya estáticos, sino que los arrays locales deben ser especificados como estáticos con un tamaño explícito.

Tal vez haya confundido los conceptos. En este caso, "estático" significa la propiedad de almacenar los valores de los elementos del array en el intervalo entre las ejecuciones de la función en la que se declara. Las matrices siempre conservan sus valores durante este tiempo, independientemente del hecho de que tengan static delante del nombre (aunque esto no es cierto para las variables locales; necesitan ser declaradas explícitamente como estáticas).

Sin embargo, es posible redimensionar un array en la primera dimensión con ArrayResize().