Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 794

 
007yurik:

Amici, aiutate un manichino. L'idea è la seguente: Quando la variabile "Ind" raggiunge il livello impostato, passa ad aspettare che "Value" cambi direzione mentre aspetta che "Ind" non si riconcili più.


   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 è il modo giusto per farlo?

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

sostituire con

   bool pravda=false;

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

...


pivomoe:

...


Inserisci correttamente il codice:Inserisci correttamente il codice sul forum

 
007yurik:

Amici, aiutate un manichino. L'idea è la seguente: Quando la variabile "Ind" raggiunge il livello impostato, si passa ad aspettare che "Value" cambi direzione, senza controllare nuovamente "Ind" durante l'attesa.

Qual è il modo corretto di farlo?

Penso che ci sia un errore qui:

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

Deve essere così:

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

Credo che qui ci sia un errore:

Deve essere così:

Dove si trova sulla tastiera il simbolo del paragrafo? Pensavo fosse stato disattivato...

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

Credo che qui ci sia un errore:

Dovrebbe essere:

Questo non è generalmente il caso, si può andare avanti con
while(Value[2]<Value[1])
 
pivomoe:

sostituire con

Se l'ho fatto correttamente (il che è dubbio), si blocca, apparentemente non esce dal loop.
 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 ho fatto bene (il che è dubbio), si blocca, apparentemente non esce dal ciclo.
 if(pravda || Ind[0]<=-0.7)
 {
   pravda=true;         
 
pivomoe:
Ho provato, stessa cosa: quando Ind supera il livello, si blocca.
 
1
007yurik:
Provato, stessa cosa: quando Ind supera il livello, si blocca.

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

2. Sostituire while con if.

3. Quando if (dal passo 2) funziona, restituire pravda=falso.

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

Amici, aiutate un manichino. L'idea è la seguente: Quando la variabile "Ind" raggiunge un determinato livello, si passa ad aspettare che "Value" cambi direzione e che "Ind" non venga più controllato.




Qual è il modo giusto per farlo?

Sei sicuro che l'indicatore viene ricalcolato durante il ciclo while?