Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1682

 
Un peu retravaillé, maintenant do while au lieu de la boucle for principale, mais toujours pas d'occurrence de la première condition dans la deuxième boucle imbriquée !
int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}
 
MakarFX #:

Vraiment ? !))

L'avez-vous essayé ?

J'ai un changement de couleur qui fonctionne de cette façon depuis longtemps, mais pas sur la ligne, bien que cela ne devrait faire aucune différence.

                     if(SymOpen < SymClose) {
                       CColor=Mirroring?BearBarColor:BullBarColor;
                        SetIndexStyle(32+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(32+(num*8), SubSymbol);
                        SetIndexStyle(33+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(33+(num*8), SubSymbol);
                        SetIndexStyle(34+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(34+(num*8), SubSymbol);
                        SetIndexStyle(35+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(35+(num*8), SubSymbol);

PS. J'ai regardé mon autre code, il change la couleur de la ligne ici.

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);
 
Vitaly Muzichenko #:

J'ai un changement de couleur qui fonctionne de cette façon depuis longtemps, mais pas sur la ligne, bien que cela ne devrait faire aucune différence.

PS. J'ai regardé mon autre code, il change la couleur de la ligne.

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);

Modifie la ligne entière, pas la section désirée

 
MakarFX #:

Change toute la ligne, pas la section de droite

Eh bien, il a écrit que vous devez changer la ligne entière

 
Donc, j'ai adapté le code pour le test, essayez de l'exécuter et vous obtenez une boucle infinie sur le deuxième ordre :(
Dossiers :
 
Nerd Trader #:
Donc, j'ai adapté le code pour le test, essayez de l'exécuter et vous obtenez une boucle infinie sur le second ordre :(

Je m'interroge ! Pourquoi ?

Pourquoi cela, quel sens sacré cela a-t-il ?

int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}

---

Vous cherchez par numéro, alors cherchez par numéro.

Si vous avez 2 mandats, il les passera en revue, mais il ne trouvera pas le 3ème, ou le 23ème.

---

Vous n'avez pas l'air d'avoir bien compris la tâche à accomplir, c'est donc la solution.

 
Nerd Trader #:

la boucle n'est pas réglée correctement :

for(int i = OrdersTotal(); i > 0 ; i --){

ça devrait être comme ça :

for(int i = OrdersTotal()-1; i >= 0 ; i --){
 
Aleksei Stepanenko #:

la boucle n'est pas réglée correctement :

ça devrait être comme ça :

Oui ! Ça marche ! Mais pourquoi plus tôt encore, la deuxième boucle for est entrée et si j'insère la ligne suivante Print() - elle sera exécutée (infiniment) mais n'ira pas plus loin ? En tout cas, merci, maintenant je peux au moins aller dormir.
 
Vitaly Muzichenko #:

Je m'interroge ! Pourquoi ?

Pourquoi cela, quel sens sacré cela a-t-il ?

---

Vous cherchez par numéro, alors cherchez par numéro.

Si vous avez 2 mandats, il les passera en revue, mais il ne trouvera pas le 3ème, ou le 23ème.

---

Vous n'avez pas l'air d'avoir bien compris la tâche à accomplir, c'est donc la solution.

C'est juste que le majik doit être unique, c'est-à-dire qu'il ne doit pas avoir de correspondance avec les autres.
 
Aleksei Stepanenko #:

la boucle n'est pas réglée correctement :

ça devrait être comme ça :

Quelle est la différence ? Et la numérotation des ordres ne part-elle pas de zéro plutôt que de un ?