Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 201

 
Alexsandr San:

Você o quer para mt4 ou mt5? o código que coloquei aqui, eu o apaguei. eu não notei imediatamente que o mt4 foi discutido aqui

MQL4

 
Speculator:

MQL4

Aqui, um monte de coisas boashttps://www.mql5.com/ru/forum/131859/page6#comment_3359705
 
Olá, é possível receber notificações por telefone/email no MT4 quando o terminal é desligado, mas com um servidor VPS conectado?
 
Alexsandr San:

Aconselho-o - há muitas coisas boas para encontrarhttps://www.mql5.com/ru/forum/131859/page6#comment_3359705

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
Existe alguma maneira de ver no que o código resultante se desdobrará ao aplicar macros?
 

Uma pergunta mais específica e talvez interessante:

Uso a mesma construção em diferentes funções

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

No entanto, algumas funções são do tipo void e outras devolvem um valor, então eu devolvo zero delas:

return(0);

Posso fazer uma macro mágica que me substitua em cada caso?

 
Yurij Kozhevnikov:

Uma pergunta mais específica e talvez interessante:

Eu uso a mesma construção em diferentes funções

No entanto, algumas funções são do tipo void e outras devolvem um valor, então eu devolvo zero delas:

Posso fazer tal macro mágica, que em cada caso me substituiria a variante necessária?

Usando o retorno em uma macro é uma arma apontada para sua própria perna, e quando combinada com - se transforma em um canhão))) Mas se você realmente quiser:

#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);
...

Não o testei, mas deve funcionar. Também transformou a arma de volta em uma pistola)))

 

Obrigado!

Assim, passo no último parâmetro ou um valor para retorno, ou um branco, que se transformará em

return ;

e um espaço não significa nada. É claro, como esqueci que ele pode ser usado sem meus parênteses favoritos.

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

A propósito, você poderia dizer por que esta construção está dentro de um loop, que pode ser executado apenas uma vez? É uma arma, transformada novamente em uma arma? Existem situações possíveis como a repetição infinita ou algo parecido?

 
Yurij Kozhevnikov:

Obrigado!

Assim, passo no último parâmetro ou um valor para retorno, ou um branco, que se transformará em

e um espaço não significa nada. É claro, como esqueci que ele também pode ser usado sem meus parênteses favoritos.

Da mesma forma, você pode me dizer por que esta construção está enfiada dentro de um laço que só pode ser executado uma vez? É uma arma transformada de volta em arma? Possíveis situações como repetição infinita ou algo parecido?

se (condição) CHECK_READ(h,r,0); caso contrário CHECK_READ(h,r,1);
Implante a macro sem o invólucro do entretanto e veja o que acontece))))
 
Vladimir Simakov:
se (condição) CHECK_READ(h,r,0); caso contrário CHECK_READ(h,r,1);
Implante a macro sem o invólucro do entretanto e veja o que acontece))
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;
  };

Parece ser esse o caso, se eu entendi corretamente o princípio de substituição.

Ponto-e-vírgula extra após parênteses curvos. E não está claro a que mais se refere agora.

É uma pena que aparentemente não exista uma maneira fácil de automatizar a expansão macro para ver o que acontece. A menos que você possa fazer seu próprio roteiro.

Obrigado! Há uma razão pela qual não há ponto-e-vírgula depois de um tempo na macro.