La razón de salirse de los límites es que las matrices se llenan con valores gradualmente en diferentes funciones, y en este proceso, se accede a una celda a través de otra celda. Algunas funciones son llamadas dos veces y llenan el array secuencialmente. Pero, si hay basura en las celdas, hay un exceso en el primer llenado.
Supongo que el problema se puede solucionar borrando las matrices de antemano, pero claro, esto es un dolor de cabeza adicional. Lástima.
Acostúmbrate.
Siempre declaro un array, establezco el tamaño esperado, lo lleno de valores (lo inicializo). A menudo es mejor inicializar con un valor distinto de cero - es más fácil encontrar un error de esa manera.
Nunca he trabajado seriamente con MT5, y ahora estoy transfiriendo un gran proyecto a él de una vez. Naturalmente, hay dificultades, una de las cuales es que la matriz siempre está fuera de alcance. Resulta que MT4 no tenía ese problema, también porque las matrices no tenían que ser borradas a propósito después del anuncio. Pero en MT5 es necesario. Mi tecnología requiere el llenado gradual del núcleo junto con los cambios de su tamaño. El tamaño exacto de algunas matrices no se conoce de antemano. Si no hubiera basura en las celdas, todo habría funcionado hace tiempo.
Es decir, hay basura en las matrices, por un lado, y error crítico de rebasamiento, por otro. Es como una condición draconiana...
Quiero entender por qué han tenido que eliminar el borrado automático de las matrices y reducir las variables declaradas a cero, como en MT4?
Si podemos tolerar las variables, tendremos que enfrentarnos al problema de la recogida constante de basura en arrays grandes, y tendremos que limpiarlos no sólo al declararlos, sino también al redimensionarlos... ¿Por qué?
También se encontró con dificultades similares al principio.
En mi opinión, los arrays se rellenan de una manera específica, esto debería tenerse en cuenta en los bucles a menudo.
Peter, no sé a qué te refieres.
todo sobre el mismohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823
ahora la culpa es de MQL5... ;)

- 2019.02.28
- www.mql5.com
todo sobre el mismohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823
ahora la culpa es de MQL5... ;)
Sí. No estoy acostumbrado a MQL4.
Nikolay, no te preocupes por MQL4, todo está bien allí. El iniciador del tema rellena las matrices a su gusto. Eso es todo.
Bueno, sí. No estoy acostumbrado a MQL4.
Por supuesto que sí.
Cualquier programador que se respete a sí mismo y a sus programas no dejará que las cosas se le escapen. En MQL4, si no usas #property strict, puedes referirte a un array con tamaño 10 por índice 20. Y no pasará nada: el programa seguirá funcionando, pero será el programador quien decida qué usar a continuación. Si es inteligente, seguramente comprobará y controlará todo, para no obtener valores fuera de la matriz, pero si lo hace "a lo bruto", no piensa en ese control, y "lo principal es que funcione, pero cómo funciona...".
La mayoría de los usuarios, que no se han molestado con esto, se han quejado del "malo, malvado y complicado MQL5", porque no les permite falsear sus propias creaciones como antes. Pero los que originalmente pensaron y crearon un código con comprobaciones y control de los datos recibidos, no notaron ninguna diferencia en la complejidad de los lenguajes, y ahora se preguntan - "dónde está la complejidad - es lo mismo...".
Nunca he trabajado seriamente con MT5, y ahora estoy transfiriendo un gran proyecto a él de una vez.
Grave diferencia en las matrices al reescribir
Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading
Características del lenguaje mql4, sutilezas y trucos
fxsaber, 2019.02.12 13:12
Características de ArrayResize para matrices multidimensionalesvoid OnStart() { int Array[][2]; Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14 Print(ArraySize(Array)); // 14 }

- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Nunca he trabajado seriamente con MT5, y ahora estoy transfiriendo un gran proyecto a él de una vez. Naturalmente, hay dificultades, una de las cuales es salirse constantemente del conjunto. Resulta que MT4 no tenía ese problema, también porque las matrices no necesitaban ser borradas a propósito después del anuncio. Pero en MT5 es necesario. Mi tecnología requiere el llenado gradual del núcleo junto con los cambios de su tamaño. El tamaño exacto de algunas matrices no se conoce de antemano. Si no hubiera basura en las celdas, todo habría funcionado hace tiempo.
Es decir, hay basura en las matrices, por un lado, y error crítico de rebasamiento, por otro. Es como una condición draconiana...
Quiero entender por qué han tenido que eliminar el borrado automático de las matrices y reducir las variables declaradas a cero, como en MT4?
Si podemos tolerar las variables, tendremos que enfrentarnos al problema de la recogida constante de basura en arrays grandes, y tendremos que limpiarlos no sólo al declararlos, sino también al redimensionarlos... ¿Por qué?