¿Compensación forzada de matrices en MT5?

 

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é?

 

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.

 
Bien, no nos quejemos. )) Sólo hay que acostumbrarse. ))
 

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.

 
Peter, no sé a qué te refieres.
Hay un array dinámico, hay el tamaño actual de este array, hay un control de desbordamiento.
Personalmente, trato de evitar el control de desbordamiento, y lo uso sólo en la etapa de diseño, porque si el algoritmo es correcto sin errores, los desbordamientos no se producen. ¿Por qué necesita controles innecesarios?
Si se produce un desbordamiento, busque errores. Te ayuda un depurador con puntos de interrupción o sin puntos de interrupción, porque el programa se detiene en modo depuración cuando se produce un desbordamiento y puedes mirar las variables.
Y si hay basura, es tu basura que no has limpiado.
 
Реter Konow:

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.

 
Nikolai Semko:
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
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Igor Makanu:

todo sobre el mismohttps://www.mql5.com/ru/forum/293630/page179#comment_10802823

ahora la culpa es de MQL5... ;)

Correcto. No estoy acostumbrado a MQL4.
¿Qué, realmente, no hay necesidad de controlar los desbordamientos allí? Pero es terrible, ¿no? ¿Cómo se detectan los errores?
 
Nikolai Semko:
Sí. No estoy acostumbrado a MQL4.
¿De verdad que no es necesario controlar los desbordamientos? Pero eso es terrible, ¿no? ¿Cómo se detectan los errores?

Nikolay, no te preocupes por MQL4, todo está bien allí. El iniciador del tema rellena las matrices a su gusto. Eso es todo.

 
Nikolai Semko:
Bueno, sí. No estoy acostumbrado a MQL4.
¿De verdad que no es necesario controlar los desbordamientos? Pero eso es terrible, ¿no? ¿Cómo se detectan los errores?

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...".

 
Реter Konow:

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 multidimensionales
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}