Questions des débutants MQL5 MT5 MetaTrader 5 - page 794

 
007yurik:

Mes amis, aidez un mannequin. L'idée est la suivante : Lorsque la variable "Ind" atteint le niveau fixé, passer à l'attente d'un changement de direction de la "Valeur" en attendant que "Ind" ne se réconcilie plus.


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


Quelle est la bonne façon de procéder ?

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

remplacer par

   bool pravda=false;

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

...


pivomoe:

...


Veuillez insérer le code correctement :Insérer le code correctement sur le forum

 
007yurik:

Mes amis, aidez un mannequin. L'idée est la suivante : Lorsque la variable "Ind" atteint le niveau fixé, nous passons à l'attente du changement de direction de la "Valeur", sans vérifier à nouveau "Ind" pendant l'attente.

Quelle est la bonne façon de procéder ?

Je pense qu'il y a une erreur ici :

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

Il doit l'être :

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

Je pense qu'il y a une erreur ici :

Il doit l'être :

Où se trouve le symbole du paragraphe sur le clavier ? Je pensais qu'il avait été désactivé...

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

Je pense qu'il y a une erreur ici :

Il devrait l'être :

Ce n'est généralement pas le cas, vous pouvez vous en sortir avec
while(Value[2]<Value[1])
 
pivomoe:

remplacer par

Si je l'ai fait correctement (ce qui est douteux), il se bloque, apparemment il ne veut pas sortir de la boucle.
 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 je l'ai fait correctement (ce qui est douteux), il se bloque, apparemment il ne veut pas sortir du cycle.
 if(pravda || Ind[0]<=-0.7)
 {
   pravda=true;         
 
pivomoe:
J'ai essayé, même chose. Quand Ind passe le niveau, ça se bloque.
 
1
007yurik:
J'ai essayé, même chose. Quand Ind dépasse le niveau, ça se bloque.

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

2. Remplacez "while" par "if".

3. Lorsque if (de l'étape 2) fonctionne, renvoyer pravda=false.

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

Mes amis, aidez un mannequin. L'idée est la suivante : Lorsque la variable "Ind" atteint un niveau donné, on passe à l'attente d'un changement de direction de la "Valeur" en attendant que "Ind" ne soit pas vérifié à nouveau.




Quelle est la bonne façon de procéder ????

Êtes-vous sûr que l'indicateur est recalculé pendant la boucle while ?