Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 429

 
Trader7777:

Les gars, s'il vous plaît, vérifiez la fonction, j'ai quelques doutes à son sujet.


Eh bien, si ça se ferme, c'est mieux de faire une boucle en arrière.
 
splxgf:

donc s'il y a une fermeture, il est préférable de faire une boucle en arrière.

Non, il faut fermer de l'ancien ordre à l'ordre nouveau.
 
Trader7777:

non, il faut fermer de l'ancien au nouvel ordre

Si vous changez l'ordre, ce sera de l'ancien au nouveau. Entre-temps, du nouveau à l'ancien, et même à travers l'un d'eux, cela peut arriver.
 
evillive:

Si vous changez l'ordre, ce sera de l'ancien au nouveau. Entre-temps, du nouveau à l'ancien, et parfois cela peut se faire à travers un seul.

Si vous faites for (int i = OrdersTotal()-1 ; i>0 ; i--) il se fermera du nouveau au vieux !
 
evillive:

Si vous changez l'ordre, ce sera de l'ancien au nouveau. Mais entre-temps, du nouveau à l'ancien, et parfois l'un après l'autre, cela peut arriver.

Je ne comprends pas, si vous êtes trop paresseux pour suggérer des erreurs, pourquoi m'imposer une fonction dont, selon mon TS, je n'ai pas besoin ?
 

Bonsoir...

cet indicateur https://www.mql5.com/ru/code/9767 dans mon EA sera-t-il correct ?

si(iCustom( NULL,0, "wave(MACD_FZR)",1,0)<Low[1] )

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "macd sample",16384,0,Green) ;

si(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

retour(0) ;

}

// vérification de la position courte (SELL)

si(iCustom( NULL, 0, "wave(MACD_FZR)",1,1)>High[1] )

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "macd sample",16384,0,Red) ;

 
Trader7777:

Je ne comprends pas, si vous êtes trop paresseux pour suggérer des erreurs, pourquoi m'imposer une fonction dont je n'ai pas besoin selon mon TS ?

Bien, alors regardez votre fonction, par exemple le premier ordre est pris et comme il correspond à la condition il est supprimé.... Sa place est prise par le deuxième ordre.

Lors de la boucle suivante, le troisième ordre est vérifié, et le deuxième sera sauté.

C'est pourquoi nous avons souligné que l'énumération est fausse...

Si votre propre commande est vraiment importante, nous pouvons décrémenter la variable de la boucle lors de sa suppression.

 
Trader7777:

Je ne comprends pas, si vous êtes trop paresseux pour suggérer des erreurs, pourquoi m'imposer une fonction dont, selon mon TS, je n'ai pas besoin ?

Je t'ai dit de le faire pendant. Comme (mise à jour 3) :

void CloseHalfOrders(int otype) {
   int count = 0;
   double CTexisting = CountTrades(otype), nCloseOrdersCnt = NormalizeDouble(CTexisting/2,1), price;
   int i = 0;
   while (i < OrdersTotal()) {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType() == otype) {
            if (otype == OP_BUY) price = Bid;
            else if (otype == OP_SELL) price = Ask;
            else return;//работаем только с OP_BUY/OP_SELL
            if (count < nCloseOrdersCnt) {
               OrderClose(OrderTicket(),OrderLots(),price,0,Lime);
               count++;
               Sleep(1000);
               i = 0;
               continue;
            } else i = OrdersTotal();
         }
      }
      i++;
   }
}
 

Ou

           OrderClose(OrderTicket(),OrderLots(),Bid,0,Lime);
           i--;
 
                    if (count<n)

Pourquoi k et n sont-ils comparés au nombre total de commandes clôturées ?