Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 201

 
Alexsandr San:

¿lo quieres para mt4 o mt5? el código que puse aquí, lo borré. no me di cuenta inmediatamente de que se hablaba de mt4 aquí

MQL4

 
Speculator:

MQL4

Aquí, un montón de cosas buenashttps://www.mql5.com/ru/forum/131859/page6#comment_3359705
 
Hola, ¿es posible recibir notificaciones por teléfono/correo electrónico en MT4 cuando el terminal está apagado, pero con un servidor VPS conectado?
 
Alexsandr San:

Te aconsejo - hay un montón de cosas buenas para encontrarhttps://www.mql5.com/ru/forum/131859/page6#comment_3359705

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
¿Hay alguna forma de ver en qué se convertirá el código resultante al aplicar las macros?
 

Una pregunta más concreta y quizás interesante:

Utilizo la misma construcción en diferentes funciones

if(FileReadStruct(handle,temp_rate)!=60)
{
  IsError=true;
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError());
  return;
}

Sin embargo, algunas funciones son de tipo void y otras devuelven un valor, por lo que devuelvo cero de ellas:

return(0);

¿Puedo hacer una macro mágica que me sustituya por la correcta en cada caso?

 
Yurij Kozhevnikov:

Una pregunta más concreta y quizás interesante:

Utilizo la misma construcción en diferentes funciones

Sin embargo, algunas funciones son de tipo void y otras devuelven un valor, por lo que devuelvo cero de ellas:

¿Puedo hacer una macro mágica de este tipo, que en cada caso me sustituya la variante necesaria?

Usar return en una macro es un arma amartillada apuntando a su propia pierna, y cuando se combina con if - se convierte en un cañón))) Pero si realmente quieres hacerlo:

#define  CHECK_READ(dHndl,dRate,dRet)  do \
if(FileReadStruct(dHndl,dRate)!=60){    \
  IsError=true;   \
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); \
  return dRet;} while(false)
  
...
CHECK_READ(handle,temp_rate,);
...
CHECK_READ(handle,temp_rate,0);
...

No lo he probado, pero debería funcionar. También volvió a convertir el arma en una pistola))

 

Gracias.

Así que paso el último parámetro, ya sea un valor de retorno, o un espacio en blanco, que se convertirá en

return ;

y un espacio no significa nada. Por supuesto, cómo se me olvidó que se puede utilizar sin mis corchetes favoritos.

return(x);
return x; //равноценны

Por cierto, ¿podrías decir por qué esta construcción está dentro de un bucle, que sólo se puede ejecutar una vez? ¿Es una pistola, convertida de nuevo en pistola? ¿Existen posibles situaciones como la recursión infinita o algo así?

 
Yurij Kozhevnikov:

Gracias.

Así que paso el último parámetro, ya sea un valor de retorno, o un espacio en blanco, que se convertirá en

y un espacio no significa nada. Por supuesto, cómo se me olvidó que también se puede utilizar sin mis corchetes favoritos.

Del mismo modo, ¿puede decirme por qué esta construcción está metida dentro de un bucle que sólo puede ejecutarse una vez? ¿Es una pistola convertida de nuevo en pistola? ¿Posibles situaciones como la recursión infinita o algo así?

if (condition) CHECK_READ(h,r,0); else CHECK_READ(h,r,1);
Despliegue la macro sin la envoltura do-while y vea lo que sucede))
 
Vladimir Simakov:
if (condition) CHECK_READ(h,r,0); else CHECK_READ(h,r,1);
Despliegue la macro sin la envoltura do-while y vea lo que sucede))
if (condition) if(FileReadStruct(h,r)!=60){   
  IsError=true;   
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
  return 0;}; else if(FileReadStruct(dHndl,dRate)!=60){    
  IsError=true;   
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
  return dRet;};

=

if (condition) 
 if(FileReadStruct(h,r)!=60)
 {   
  IsError=true;   
  Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
  return 0;
 }; 
 else 
  if(FileReadStruct(dHndl,dRate)!=60)
  {    
   IsError=true;   
   Print(__FUNCSIG__," Не удалось прочитать данные из файла по причине ошибки ",GetLastError()); 
   return dRet;
  };

Ese parece ser el caso, si entiendo correctamente el principio de sustitución.

Puntos y comas superfluos después de las llaves. Y no está claro a qué más se refiere ahora.

Es una pena que aparentemente no haya una forma fácil de automatizar la expansión de la macro para ver qué pasa. A menos que puedas hacer tu propio guión.

Gracias. Hay una razón por la que no hay punto y coma después de "while" en la macro.