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

 
Bonjour à tous. Pouvez-vous me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
Pour l'instant, il ferme ceux qui ont été ouverts le plus récemment. Je veux qu'il ferme d'abord les premiers !
 
Rustam Bikbulatov:
Bonjour à tous. Pouvez-vous me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
Pour l'instant, il ferme ceux qui ont été ouverts le plus récemment. Je veux qu'il ferme d'abord les premiers !
for(int i=0; i<OrdersTotal(); i++)
 
Rustam Bikbulatov:
Bonjour à tous. Veuillez me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
Pour l'instant, il ferme ceux qui ont été ouverts le plus récemment. Vous voulez qu'il ferme les premiers en premier !
for( int i = 0; i < OrdersTotal(); i++ )
   {
    if( /*Функция закрытия. Если вернула истину*/ )
       i--;
   }

Essayez de cette façon. Au lieu des commentaires, vous devez utiliser la fonction pour clôturer l'ordre. Je n'ai pas vérifié sa fonctionnalité. Et là, je pense que nous devrons appeler la fonction qui calcule le montant des commandes à chaque fois, puisque le nombre de commandes va diminuer.

Nous pouvons également essayer une telle variante :

while( OrdersTotal() > 0 )
   /*Функция закрытия ордера*/
 
Vitaly Muzichenko:
for(int i=0; i<OrdersTotal(); i++)
il ne se ferme pas correctement)
 
Rustam Bikbulatov:
il se ferme de manière maladroite)
La bonne méthode consiste à se souvenir des commandes qui doivent être clôturées, à trier la liste selon vos besoins et à les clôturer dans cet ordre.

n'est pas correcte, mais pour l'instant (jusqu'à un certain build) elle fonctionne : à la fermeture réussie de i--



 
Rustam Bikbulatov:
Bonjour à tous. Pouvez-vous me dire comment modifier ce code for(int i=OrdersTotal()-1;i>=0;i--){
Pour l'instant, il ferme ceux qui ont été ouverts le plus récemment. Je veux qu'il ferme d'abord les premiers!

//+------------------------------------------------------------------+
//|           Закрыть все позиции начиная с первых                   |
//+------------------------------------------------------------------+

double CloseOrders()

{
  for(int i=0; i<OrdersTotal(); )
  {
    if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    break;
    
    if (OrderMagicNumber() != mn)
    break;
    
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
                          break;
    }
    
    if(result == false)
    {
      Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
      i++;
    }  
  }
return (True);
}
// End
 
Rustam Bikbulatov:
Il se ferme de manière maladroite).
L'option que j'ai suggérée est généralement incongrue pour la fermeture.
Si vous parlez de fermeture de l'ancien au nouveau, alors vous fermez la grille. Ayant une certaine expérience des grilles, tout ce que je peux dire avec certitude, c'est qu'il ne faut pas choisir en fonction de l'âge de la position, mais en fonction de son lot, et qu'il faut fermer d'un grand lot à un petit. Si la grille est à lot unique, il n'y a pas de différence dans l'ordre de fermeture. Utilisez des fonctions prêtes à l'emploi pour fermer, et n'inventez pas quelque chose qui a déjà été inventé)
 
Merci beaucoup les gars ! J'ai déjà réglé le problème ! !!
 
Vitaly Muzichenko:
L'option que j'ai suggérée est généralement incongrue pour la fermeture.
Si vous parlez de fermeture de l'ancien au nouveau, alors vous fermez la grille. Ayant une certaine expérience des grilles, tout ce que je peux dire avec certitude, c'est qu'il ne faut pas choisir en fonction de l'âge de la position, mais en fonction de son lot, et qu'il faut fermer d'un grand lot à un petit. Si la grille est à lot unique, il n'y a pas de différence dans l'ordre de fermeture. Utilisez des fonctions prêtes à l'emploi pour la fermeture, et n'inventez pas quelque chose qui a déjà été inventé).
C'est vrai. Tu as raison !
 
Messieurs les développeurs ! Bonne journée à tous. Je suis intéressé par une question sur la façon de créer un modèle de conseiller expert (script) lors de sa création. Peut-on modifier cette information quelque part et comment le faire ?