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

 
MakarFX #:

Je vais essayer de le joindre, merci. Juste une question : comment traiter les ordres de vente ?

 
EVGENII SHELIPOV #:

Je vais essayer de le faire, merci. Juste une question : comment traiter les ordres de vente ?

Semyon Semyonych...
   double GetBuyOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
   double GetSellOrderSwap()
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_SELL)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:
Semyon Semyonych...

Makar, pourquoi est-ce si compliqué de tout regrouper dans une seule fonction ? Ou y a-t-il quelque chose que je ne comprends pas ?

 
int GetMagic(Order &order)
{
  int magic = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
    if(OrdersTotal() >= 1)
      for(;;){
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --)
          if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) != false)
            if(magic != OrderMagicNumber())
              return magic;
            
      }
    else if (OrdersTotal() == 0)
      return (magic + 1);
  return magic;
}
Le remplacer par == n'aide pas. Dans les deux cas, aucun fil ne va là (j'ai vérifié avec print)
 
Nerd Trader #:
Il est dit dans le commentaire qu'il envoie le majic au tableau d'écriture, ne laissez pas cela vous induire en erreur, tant que le majic retourne au retorn.

Je ne comprends pas bien la logique générale, j'essaie de séparer les fonctions

  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
  int order_magic = GetMagic(order);

  if(order.is_init == true)
  {
    int order_send = OrderSend(Symbol(), order.cmd, 0.01, order.open_price, 10, 
    order.sl_price, order.tp_price, "", order_magic, 0, order.arrow_color);

    if(order_send == -1){
      Print(order.error_text," | ",GetLastError()," db_last.third ",db_last.third,
        " | db_last.size_open_to_low ",db_last.size_open_to_low," | order.sl_price: ",
        order.sl_price," | order.cmd ",order.cmd);
      ResetLastError();
      return;
    }
  }
   //+---
   int GetMagic(Order &order)
   {
     int magic = 0;
     for(int i = OrdersTotal(); i > 0 ; i --)
      {
       if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
          if(magic == OrderMagicNumber()) magic+=1;
          else magic=0;
         }
      }
     return (magic);
   }
 
EVGENII SHELIPOV #:

Makar, pourquoi est-ce si compliqué de tout regrouper dans une seule fonction ? Ou y a-t-il quelque chose que je ne comprends pas ?

   double GetOrderSwap(int ot=-1)// 0-Buy; 1-Sell
     {
      double order_swap = 0;
      for(int i = OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType()==ot||ot<0)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
      return(order_swap);
     }
 
MakarFX #:

Makar, tu fais le bébé avec moi.

Merci, Makar. J'ai changé un peu la fonction, et ça marche.

 
MakarFX #:

Je ne comprends pas bien la logique générale, j'essaie de séparer les fonctions

Maintenant GetMagic devrait générer une magie unique au moment de l'envoi d'un ordre en attente et la renvoyer par retorn. Dans votre version, il n'y a qu'une seule boucle, donc lorsque la commande se termine, else sera exécuté de toute façon, et magic == OrderMagicNumber() sera toujours vrai. Je veux que magic != OrderMagicNumber() quand ce n'est pas vrai, cela signifie que magic est unique et qu'il est incrémenté par lui-même dans le premier for(; ;).
 
Nerd Trader #:

Vérifiez votre message personnel.

 
Bonjour, Je suis confronté au problème suivant : EA a ouvert un ordre en attente, mais le terminal ne le suit pas et il n'est pas présent dans l'historique des transactions. Veuillez me conseiller si quelqu'un a rencontré un tel problème.
Raison: