Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 794

 
007yurik:

Amigos, ajudem um boneco. A ideia é a seguinte: Quando a variável "Ind" atingir o nível definido, mudar para esperar que "Value" mude de direcção enquanto espera que "Ind" deixe de se reconciliar.


   if(Ind[0]<=-0.7)
     {
      while(Value[3]>Value[2]<Value[1])
        {
         if(CopyBuffer(InpInd2_Handle,1,SignalBar,3,Value)<=0)
           {
            Recount=true;
            return;
           }
        }
      if(BuyPosOpen) BUY_Open=true;
     }


Qual é a forma correcta de o fazer?

   if(Ind[0]<=-0.7)
     {

substituir por

   bool pravda=false;

   if(pravda || Ind[0]<=-0.7)
     {
      pravda=true;
 
007yurik:

...


pivomoe:

...


Por favor insira o código correctamente:Insira o código correctamente no fórum

 
007yurik:

Amigos, ajudem um boneco. A ideia é a seguinte: Quando a variável "Ind" atinge o nível definido, mudamos para esperar que o "Valor" mude de direcção, sem verificar novamente o "Ind" enquanto se espera.

Qual é a forma correcta de o fazer??

Penso que há aqui um erro:

while(Value[3]>Value[2]<Value[1])

Tem de ser:

while(Value[3]>Value[2] §§ Value[2]<Value[1])
 
Ivan Ivanov:

Penso que há aqui um erro:

Tem de ser:

Onde no teclado está o símbolo do parágrafo? Pensei que tinha sido incapacitado...

while(Value[3]>Value[2] §§  Value[2]<Value[1])
 
Ivan Ivanov:

Penso que há aqui um erro:

Deveria ser:

Este não é geralmente o caso, pode sobreviver com
while(Value[2]<Value[1])
 
pivomoe:

substituir por

Se o fiz correctamente (o que é duvidoso), ele pendura, aparentemente não sai do laço.
 bool pravda=false;

   if(pravda || Ind[0]<=-0.7)
   pravda=true;
   
   {   
      
      while(Value[2]<Value[1])
         {
         if(CopyBuffer(InpInd2_Handle,1,SignalBar,3,Value)<=0) {Recount=true; return;}                 
          }
          
         if(BuyPosOpen) BUY_Open=true;     
                                                  
         if(SellPosClose) SELL_Close=true;
         UpSignalTime=datetime(SeriesInfoInteger(Symbol(),InpInd_Timeframe,SERIES_LASTBAR_DATE))+TimeShiftSec;
         }
 
007yurik:
Se o fiz bem (o que é duvidoso), fica pendurado, aparentemente não sairá do ciclo.
 if(pravda || Ind[0]<=-0.7)
 {
   pravda=true;         
 
pivomoe:
Experimentei-o, a mesma coisa. Quando o Ind ultrapassa o nível, fica pendurado.
 
1
007yurik:
Experimentei-o, a mesma coisa. Quando o Ind excede o nível, ele pende.

1. Tornar bool pravda global.(https://www.mql5.com/ru/docs/basis/variables/global)

2. Substituir while por if.

3. Quando (a partir do passo 2) funcionar, devolver pravda=false.

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
007yurik:

Amigos, ajudem um boneco. A ideia é a seguinte: Quando a variável "Ind" atinge um determinado nível, mudamos para esperar que o "Valor" mude de direcção enquanto esperamos que o "Ind" não seja verificado novamente.




Qual é a forma correcta de o fazer??

Tem a certeza de que o indicador é recalculado durante o laço?