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

 
DhP:


Recalculez à chaque tick le nombre d'ordres en attente.

S'il y en a moins, cela signifie qu'un ordre en attente est devenu un ordre au marché.

Tous ceux qui restent (et qui sont devenus inutiles) peuvent être supprimés.


Au moment de la suppression, les deux ordres sont des ordres de marché. Mais même si le dernier ordre en attente est supprimé ou déclenché, son ticket est toujours déclenché et génère une erreur. Et l'avant-dernier est toujours en attente.
 
Andreev:

Merci pour le lien ! !! Je vais m'en occuper :) Avec le temps, ainsi que le numéro magique et par type de commande (bylimit ou selllimit) est une bonne idée. Mais vous ne m'avez probablement pas bien compris. Mon problème n'est pas de marquer l'ordre, mais de savoir COMMENT LE SUPPRIMER. Je ne peux supprimer que le dernier ordre en attente, quelle que soit la façon dont je définis l'avant-dernier.
// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
Comme je l'ai compris dans votre premier message "J'utilise l'exemple suivant pour définir, mais il ferme seulement le dernier ordre en attente au lieu du premier, bien que toutes les conditions soient remplies pour le premier ordre en attente. Aidez-moi à trouver error !!!!!!!!!!!!!" - vous devez supprimer tous les ordres en attente restants, après avoir transformé certains d'entre eux en ordres de marché - ce code doit être écrit dans vos conditions de trading et aller de l'avant....
 
Roman.:
Comme je l'ai compris dans votre premier message "J'utilise l'exemple suivant pour la définition, mais il ne ferme que le dernier ordre en attente au lieu du premier, bien que toutes les conditions soient remplies pour le premier ordre en attente. Aidez-moi à trouver error !!!!!!!!!!!!!" - vous devez supprimer tous les ordres en attente restants, après avoir transformé certains d'entre eux en ordres de marché - ce code doit être entré dans vos conditions de trading et aller de l'avant....

Merci ! !! Je ne m'attendais pas à ce que ce soit si compliqué :))))
 
Roman.:
Comme je l'ai compris dans votre premier message "J'utilise l'exemple suivant pour la définition, mais il ne ferme que le dernier ordre en attente au lieu du premier, bien que toutes les conditions soient remplies pour le premier ordre en attente. Aidez-moi à trouver error !!!!!!!!!!!!!" - vous devez supprimer tous les ordres en attente restants, après avoir transformé certains d'entre eux en ordres de marché - ce code doit être entré dans vos conditions de trading et aller de l'avant....

J'ai pensé que ça pourrait prendre quelques lignes... :)
 
Andreev:

Au moment de la suppression, les deux commandes sont négociables. Mais même si le dernier ordre en attente est supprimé ou se déclenche, le ticket qui l'a déclenché affichera toujours une erreur. L'avant-dernier sera toujours là.


Je ne peux même pas imaginer comment c'est possible.

Si, après avoir recalculé les ordres en attente, le conseiller expert ne parvient pas à trouver un ordre, il émet immédiatement une commande pour supprimer les autres.

L'opération de suppression des ordres en attente non nécessaires doit nécessairement précéder (précéder) toute opération d'ouverture.

 
Roman.:

Comme je l'ai compris dans votre premier message "J'utilise l'exemple suivant pour la définition, mais il ne ferme que le dernier ordre en attente au lieu du premier, bien que toutes les conditions soient remplies pour le premier ordre en attente. Aidez-moi à trouver error !!!!!!!!!!!!!" - vous devez supprimer tous les ordres en attente restants, après avoir transformé certains d'entre eux en ordres de marché - ce code doit être écrit dans vos conditions de trading et aller de l'avant....

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))
      {
         continue;
      }

      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber))
      {
         continue;
      }

      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))
      {
         continue;
      }
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          
          
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
          
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
   }
Avez-vous déjà essayé d'écrire des codes de manière compacte ?

Voici votre code :

// ------------------------------------------------Ищете Ваши отложенники---------------------------------

   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))                            continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType == OP_BUY) || (orderType == OP_SELL))                    continue;
      ticket = OrderTicket( );                         // Номер ордера
      orderLots = OrderLots();                         // Lots   
      SL =  OrderStopLoss();                           // Значение StopLoss ордера
      TP = OrderTakeProfit();                          // Значение TakeProfit ордера
      if (ticket>0) {
         while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
            Sleep(100);
            OrderDelete(ticket,CLR_NONE); // и удаляете их                       
         }
      return (0);
      }
 
Andreev:

J'ai pensé qu'il serait possible d'ajouter quelques lignes ... :)

Eh bien. artmedia70 (24.07.2011 20:01) a tout emballé en presque deux lignes. Comme vous le souhaitiez)))
 

Aidez-moi, s'il vous plaît, où est-ce que je fais une erreur ? L'idée est que sur la barre où l'ordre a été fermé, l'ordre ne doit pas être ouvert.


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
if ((условие 1)&&(условие 2)&&(OrderCloseTime()!=Time[0]))
 {
 OrderSend...; 
 }

Mais dans le testeur, après la clôture de l'ordre, les conditions sont toujours remplies et un autre ordre est ouvert dans la même direction.

 
artmedia70:
N'avez-vous jamais essayé d'écrire des codes de manière compacte ?

Voici votre propre code :

J'ai... :-))) C'est une habitude de Pascal... La lisibilité est pire... Surtout pour ceux qui ne sont pas trop "initiés"... :-))) Et vous avez besoin d'une indentation dans les opérations dans les boucles et conditions imbriquées à la largeur de la tabulation ou 3 espaces - en dernier recours... :-))
 
LazarevDenis:

Aidez-moi, s'il vous plaît, où est-ce que je fais une erreur ? L'idée est que sur la barre où l'ordre a été fermé, l'ordre ne doit pas être ouvert.


Mais dans le testeur, après la clôture de l'ordre, les conditions sont toujours remplies et un autre ordre est ouvert dans la même direction.


Pour vous aider, allez sur Google à l' adresse et cherchez quelque chose comme : ouvrir et fermer un ordre sur une barre site:mql4.com - et vous aurez de la chance.
Raison: