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

 
EVGENII SHELIPOV #:

Alexei, agrandissez l'image s'il vous plaît.

Zoomé en avant. J'ai vu exactement ce que la flèche indique sur l'avant-dernier prix de l'ordre et sur le ticket de l'ordre qui ne correspond pas à l'avant-dernier critère d'ordre. Exécutez mon code et vous verrez le ticket de la commande la plus basse. Vous pouvez terminer cette fonction si vous voulez obtenir non pas la commande BUY du bas, mais la deuxième.

 
Alexey Viktorov #:

Zoomé en avant. Ce que j'ai vu, c'est la flèche pointant vers le deuxième prix le plus bas de la commande et vers le ticket de la commande ne répondant pas à l'avant-dernier critère de commande. Si vous exécutez mon code, vous verrez le ticket de la commande la plus basse. Vous pouvez développer cette fonction pour obtenir non pas l'ordre BUY ci-dessous, mais le second.

Je ne peux que demander où il y a une erreur dans le code pour la détermination de l'avant-dernier ticket de commande.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
 
EVGENII SHELIPOV #:

Je ne peux que poser ma question : où se trouve l'erreur dans le code permettant de déterminer le ticket de l'avant-dernière commande ???

L'erreur est que le prix de l'ordre n'est en aucun cas pris en compte.

Quelque part dans votre dialogue, il est conseillé de mettre le tout dans un tableau et de le trier pour obtenir tous les tickets par nombre. Mais en réponse, je ne comprends pas comment faire.

Comme ceci

//+------------------------------------------------------------------+
//| Расчет тикета второго снизу ордера BUY в сетке                   |
//+------------------------------------------------------------------+
int GetTicketMaxOrder()
 {
  int total = OrdersTotal(),
      arrSize = 0;
  double arr[][2];
  for(int cnt = 0; cnt < total; cnt++)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol())// && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        arrSize = ArrayRange(arr, 0);
        ArrayResize(arr, arrSize+1);
        arr[arrSize][0] = OrderOpenPrice();
        arr[arrSize][1] = OrderTicket();
       }
     }
   }
  ArraySort(arr);
  return((int)arr[1][1]);
 }
/*****************************End program****************************/
 
EVGENII SHELIPOV #:

Je ne peux répondre que par ma question : où se trouve l'erreur dans le code permettant de déterminer le ticket de l'avant-dernière commande ???

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }

Et une autre erreur grossière est que pendant que vous recherchez des ordres dans la boucle, vous appelez une fonction qui à son tour recherche également des ordres... Et lorsque l'exécution du code revient à la fonction, un autre ordre est déjà sélectionné... Et OrderTicket() renvoie un résultat tout à fait différent de celui que vous attendiez.

 
Alexey Viktorov #:

L'erreur est que le prix de l'ordre n'est en aucun cas pris en compte.

Quelque part dans votre boîte de dialogue, il est conseillé de mettre le tout dans un tableau et de le trier pour obtenir tous les tickets par nombre. Mais en réponse, je ne comprends pas comment faire.

Comme ceci

Alexey, pouvez-vous commenter les erreurs dans le journal ?

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5 : position de départ incorrecte 0 pour la fonction ArraySort

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5 : tableau hors de la plage dans 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 La passe de test a été interrompue en raison d'une erreur critique dans l'EA.


 
EVGENII SHELIPOV # :

Alexey, pourriez-vous commenter les erreurs dans le log

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5 : position de départ incorrecte 0 pour la fonction ArraySort

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5 : tableau hors de la plage dans 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 La passe de test a été interrompue en raison d'une erreur critique dans l'EA.


Ces erreurs ne proviennent pas de mon code. Je ne parle pas couramment la langue aglits, j'utilise le traducteur interne de ce site. Voici comment cela se traduit.

position de départ 0 incorrecte pour la fonction ArraySort - position de départ 0 incorrecte pour la fonction ArraySort

tableau hors limites dans 'eGriD2.mq4' (664,18) - tableau hors limites dans 'eGriD2.mq4' (664,18)

Le passage du test a été arrêté en raison d'une erreur critique dans l'EA

Donc le code dans le studio.

ps ; Cependant, si vous appelez cette fonction lorsqu'il y a moins de deux commandes, il y aura ces erreurs. Je ne l'ai pas protégé contre ......... mais je suppose que j'aurais dû.

C'est exactement la raison pour laquelle je n'ai absolument aucune envie d'aider qui que ce soit... Vous comptez sur une application réfléchie de mes conseils et ..........

 
Bon après-midi. Pouvez-vous me dire comment implémenter une recherche minimum/maximum pour n barres ?
 
Snajper007 #:
Bon après-midi. Pouvez-vous me dire comment implémenter une recherche minimum/maximum pour n barres ?
iHighest

iLowest

 
MakarFX

Voici une autre question. Il existe un indicateur qui dessine une fractale. Comment puis-je vérifier s'il y a un signal dans n barres ?

 
Snajper007 #:

Voici une autre question. Il existe un indicateur qui dessine une fractale. Comment puis-je vérifier s'il y a un signal dans n barres ?

Tout d'abord, cela dépend de l'indicateur qui dessine les fractales.
Raison: