MetaTrader 4 Build 529 beta liberado con nuevo compilador - página 17

 
Barbarian:

¿Funcionaba antes? No puedo entender para qué declaras la variable i:


En las variables globales, inicializo i una vez y luego la uso en todos los bucles, es más conveniente y más fácil ...
 
ALXIMIKS:

¿Se supone que cuando se cambian los parámetros de un indicador que ya está en marcha y funcionando, haciendo doble clic sobre él,

el indicadorno actualiza las variables estáticas, por lo tanto, no se redibuja?


Las variables estáticas conservan su valor al reiniciar el programa. Los valores no se guardan sólo cuando el programa se retira del gráfico y se vuelve a unir. Para restablecer las variables estáticas en la reinicialización, utilizo esta construcción:

bool g_init;

void OnInit()
{
   g_init = true;
}

void MyFunction()
{
   static int myStatic;
   if (g_init)
   {
      myStatic = 0;
      g_init = false;
   }
}
 
VOLDEMAR:
Así es como funciona...

No funciona así.


En el segundo caso, el ámbito del array declarado en la función es una función.

En el código

for(i=Coment-1; i>=1; i--){info[i]=info[i-1]; cv  [i]=cv  [i-1];}info[0]=txt;cv[0]=et;


¿estás seguro de que inicializas todos los elementos del array con los valores txt y et? Tal vez las últimas 2 asignaciones deberían ir antes del bucle y el bucle debería construirse de forma diferente. ¿O es tal idea?

 
Scriptong:


Las variables estáticas conservan su valor al reiniciar un programa. Los valores no se conservan sólo cuando el programa se retira del gráfico y se vuelve a colocar. Para restablecer las variables estáticas en la reinicialización, utilizo la siguiente construcción:


¿Así que ahora tengo que buscar en la biblioteca y reescribir todo? Es absurdo, porque todo estaba bien en el 509, y aquí ......
 
alexvd:


En el segundo caso, el ámbito de un array declarado en una función es una función.

En el código.


¿Estás seguro de que estás inicializando todos los elementos del array con txt y et? Probablemente las 2 últimas asignaciones deberían ir antes del bucle. ¿O es una idea?


El texto se desplaza primero un nivel en el bucle, luego se asignan los valores nulos al nuevo texto...

Estas matrices sólo se utilizan en las funciones que he presentado anteriormente ...

Antes, en las builds 509 y anteriores, todo funcionaba en ambos casos... Ahora sólo en el primer caso ...

 
ALXIMIKS:

¿Qué sentido tiene revisar la biblioteca y reescribir todo? Es absurdo, porque todo estaba bien en el 509 y ahora es ......


Simplemente es mejor inicializar todas las variables que se van a utilizar en el código al principio del mismo...

Esto simplifica el trabajo, y hace posible ver y restablecer correctamente las variables al inicio del programa y el uso posterior ...

 
ALXIMIKS:

¿Se supone que cuando se cambian los parámetros de un indicador que ya está en marcha y funcionando, haciendo doble clic sobre él,

Siemprehe sido así (509 build, seguro).

Que yo recuerde siempre fue así (en la build 509 seguro). Es un error.

VOLDEMAR:

He notado una cosa extraña en diferentes ordenadores, uno con XP y otro con W 7

Cuando se inicializa un array dentro de una función, el array no se rellena con todo el valor, sólo con el valor 0 ...

Al inicializar un array a nivel global más allá de todas las funciones, los arrays se llenan completamente como debe ser ...

Ya se ha dicho mil veces: inicializa las matrices y las variables explícitamente, no esperes las "bendiciones del cielo".

En el caso de la declaración local, sólo tienes suerte y no reciben basura. Pero yo no contaría con ello.

 
Tenga en cuenta que el nuevo compilador y el nuevo entorno de ejecución controlan la calidad del código de forma mucho más estricta. Mucho código de MQL4 ha sido escrito por desarrolladores de terceros con las manos abajo, y ahora estos fallos serán inmediatamente visibles.
 

Corríjanme si me equivoco.

Utilizo una función de la biblioteca en un indicador, esta función declara algunas variables estáticas que participan en el cálculo de la matriz del indicador.

Si quiero cambiar los parámetros del indicador para corregir el cálculo del mismo (en función de las variables estáticas),

pasar la bandera a la función de la biblioteca que se encarga de la reinicialización (debe ampliar los parámetros de entrada de cada función que tenga variables estáticas)

hacer la puesta a cero de las variables estáticas en el cuerpo, y no olvidar eliminar la bandera antes de completar el cálculo.

Sería mucho más fácil si las variables estáticas tuvieran algún parámetro, establecido durante su declaración, responsable de que estas variables se pongan a cero durante la reinicialización.

 
Renat:
Tenga en cuenta que el nuevo compilador y el nuevo tiempo de ejecución son mucho más estrictos en el control de la calidad del código. Una gran cantidad de código MQL4 fue escrito por los desarrolladores de terceros y ahora estos defectos serán inmediatamente visibles.
¿Se ha actualizado también el Manual MQL4 (que está en el editor)?
Razón de la queja: