Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 794

 
007yurik:

Amigos, ayuden a un tonto. La idea es la siguiente: Cuando la variable "Ind" alcanza el nivel fijado, pasa a esperar que el "Valor" cambie de dirección mientras espera que el "Ind" deje de conciliar.


   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;
     }


¿Cuál es la forma correcta de hacerlo?

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

sustituir por

   bool pravda=false;

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

...


pivomoe:

...


Por favor, inserte el código correctamente:Inserte el código correctamente en el foro

 
007yurik:

Amigos, ayuden a un tonto. La idea es la siguiente: Cuando la variable "Ind" alcanza el nivel establecido, pasamos a esperar que el "Valor" cambie de sentido, sin volver a comprobar "Ind" mientras se espera.

¿Cuál es la forma correcta de hacerlo?

Creo que aquí hay un error:

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

Tiene que serlo:

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

Creo que hay un error aquí:

Tiene que serlo:

¿En qué parte del teclado está el símbolo de párrafo? Pensaba que se había apagado por completo...

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

Creo que hay un error aquí:

Debería serlo:

Por lo general, no es el caso, se puede arreglar con
while(Value[2]<Value[1])
 
pivomoe:

sustituir por

Si lo he hecho bien (lo cual es dudoso), se cuelga, al parecer no sale del bucle.
 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:
Si lo he hecho bien (que es dudoso), se cuelga, aparentemente no sale del ciclo.
 if(pravda || Ind[0]<=-0.7)
 {
   pravda=true;         
 
pivomoe:
Probado, lo mismo. Cuando Ind supera el nivel, se cuelga.
 
1
007yurik:
Probado, lo mismo. Cuando Ind supera el nivel, se cuelga.

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

2. Sustituye "mientras" por "si".

3. Cuando el if (del paso 2) funciona, devuelve pravda=false.

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

Amigos, ayuden a un tonto. La idea es la siguiente: Cuando la variable "Ind" alcanza un nivel determinado, pasamos a esperar a que el "Valor" cambie de dirección mientras esperamos a que el "Ind" no se vuelva a comprobar.




¿Cuál es la forma correcta de hacerlo?

¿Está seguro de que el indicador se recalcula durante el bucle while?
Razón de la queja: