Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 869

 
Artyom Trishkin:
La sección de ayuda te dice para qué sirve. Y, sí, es correcto que un parámetro introducido por el usuario no puede ser cambiado programáticamente. Al menos algo puede pertenecer al usuario :)

Si realmente quieres, puedes)

 
Vitaly Muzichenko:

Si realmente quieres, puedes)

Puede, por supuesto, si lo reasigna. Pero el valor introducido por el usuario permanecerá inalterado.
 

A menudo me encuentro con un problema. El compilador jura con un error de "variable ya definida" en el código:

if (n<10)
 {
  int a=10;
 }
else
 {
  int a=5;
 }

La guía de referencia en https://docs.mql4.com/ru/basis/variables/local dice:

Las variables declaradas dentro de un bloque (a nivel interno) tienen el ámbitodel bloque.

Si los bloques están anidados yel identific ador del bloque externo tiene el mismo nombre que el identificador del bloque interno, el identificador del bloque externo es "invisible" (oculto) hasta que el bloque interno se complete.

Pero incluso el ejemplo del mismo libro de referencia no compila con el mismo error de "variable ya definida":

int i=5;      // локальная переменная функции
     {
      int i=10;  // переменная функции 
      Print("В блоке i = ",i); // результат  i = 10;
     }
   Print("Вне блока i = ",i);  // результат  i = 5;

El mismo problema con los ciclos:

int i=10;
for (int i=1;i<10;i++) ...

¿Cómo podemos evitar este problema y hacer que el ejemplo del directorio compile sin el error "variable ya definida"?

 
The_Sheikh:

A menudo me encuentro con un problema. El compilador jura con un error de "variable ya definida" en el código:

La guía de referencia en https://docs.mql4.com/ru/basis/variables/local dice:

Las variables declaradas dentro de un bloque (a nivel interno) tienen el ámbitodel bloque.

Si los bloques están anidados yel identific ador del bloque externo tiene el mismo nombre que el identificador del bloque interno, el identificador del bloque externo es "invisible" (oculto) hasta que el bloque interno se complete.

Pero incluso el ejemplo del mismo libro de referencia no compila con el mismo error de "variable ya definida":

El mismo problema con los ciclos:

¿Cómo podemos evitar este problema y hacer que el ejemplo del directorio compile sin el error "variable ya definida"?

#propiedad estricta
 
The_Sheikh:

¿Cómo puedo evitar este problema y conseguir que el ejemplo del directorio compile sin el error "variable ya definida"?

no todos los ejemplos del libro de referencia funcionan correctamente durante mucho tiempo

por alcance en tus ejemplos - la visibilidad dentro de un solo operador es local, definitivamente debería funcionar así:

void OnStart()
  {
   for(int i=0;i<10;i++)
     {
      double x=i;
     }

   for(int i=0;i<10;i++)
     {
      double x=i;
     }
  }

es decir, la visibilidad dentro de una sentencia for es local, las variables i y x se perderán al salir de ella

 

Intenté buscar el último pico del indicador Peak Repainter para que fuera procesado por EA:

   GV_trendD1 = StringConcatenate(GVn," дневной тренд");
   if (!GlobalVariableCheck(GV_trendD1))
      {
      double   fUP,fDN;

      for (int f=0; f<=400 && !IsStopped(); f++)
         {
         fUP = iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",0,f);
         if (fUP>=15) {GlobalVariableSet(GV_trendD1,1);break;}
         else {fDN = iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",1,f); if (fDN>=15) {GlobalVariableSet(GV_trendD1,-1);break;}}
         }
      }

El resultado es que se escribe 1 en la variable global, aunque en realidad debería ser -1.

¿Qué ocurre? ¿Con el código? ¿Con el indicador?

El indicador se utiliza con la configuración por defecto.

Archivos adjuntos:
 
Alexey G. Smolyakov:

Intenté buscar el último pico del indicador Peak Repainter para que fuera procesado por EA:

El resultado es que se escribe 1 en la variable global, aunque en realidad debería ser -1.

¿Qué ocurre? ¿Con el código? ¿Con el indicador?

El indicador se utiliza con una configuración por defecto.

¿Por qué se llama así el indicador?

iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",0,f);
 
Artyom Trishkin:

¿Por qué el nombre del indicador?

Simplemente guardo los indicadores para diferentes EAs en diferentes directorios. Y les cambio el nombre ligeramente para que estén agrupados.

¿Afecta el nombre a algo?

 
Alexey G. Smolyakov:

Simplemente mantengo los indicadores para diferentes EAs en diferentes directorios. Y les cambio el nombre ligeramente para que se agrupen.

¿Afecta el nombre a algo?

Así es, todo el acceso a los archivos en MT4 tiene lugar dentro de la carpeta MQL4, la salida de Asesores Expertos/Scripts/Indicadores fuera de esta carpeta está excluida por razones de seguridad

 
Igor Makanu:

afecta, todo el acceso a los archivos en MT4 tiene lugar dentro de la carpeta MQL4, la salida de EAs/scripts/indicadores fuera de esta carpeta está excluida por razones de seguridad

Ruta completa de la carpeta MQL4\Nde los indicadores utilizados. Parece que no hay salida fuera de la carpeta. Pero esto es una anomalía - otros Asesores Expertos trabajan con sus indicadores en carpetas similares sin problemas. Pero cuál es el problema de este indicador, no lo entiendo. He mirado su código pero no tengo suficientes conocimientos y experiencia para entenderlo. Tengo la sospecha de que sólo cuenta el último compás o algo así.