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

 
EVGENII SHELIPOV #:

Bonne journée messieurs les programmeurs !!!!

Je vais essayer une nouvelle fois de poser ma question, mais je l'ai un peu reformulée.

Dans une grille EA, nous devons trouver le ticket de l'avant-dernier ordre. Je pense que la solution -1 du ticket de l'ordre maximum ne fonctionne pas dans le testeur de stratégie, mais il peut en être ainsi sur les comptes démo et réels, il est difficile de voir pourquoi.

J'ai écrit le code de la fonction qui détermine l'avant-dernier ticket de commande. Cette logique est la suivante : si nous examinons tous les ordres ouverts dans la grille, nous trouverons le maximum suivant et ce sera le ticket d'ordre nécessaire.

Cependant, mon niveau de programmation n'est pas assez élevé et il y a une erreur dans le code. Le résultat de cette fonction est le ticket minimum. Ces deux fonctions sont le ticket maximum et l'avant-dernier ticket. La fonction "ticket max" fonctionne sans problème.

Veuillez indiquer la nature de l'erreur. Merci.

Cette deuxième image montre que vous n'avez pas besoin d'un ticket maximum ou d'un temps d'ouverture maximum, mais que vous devez choisir un prix d'ouverture minimum pour les ordres d'achat et un prix d'ouverture maximum pour les ordres de vente.
 
Alexey Viktorov #:
Cette deuxième image vous indique que vous ne recherchez pas un ticket maximum ou un temps d'ouverture maximum, mais que vous devez sélectionner le prix d'ouverture minimum pour les ordres d'achat et le prix d'ouverture maximum pour les ordres de vente.

Alexei j'ai les fonctions qui déterminent ces prix pourriez vous m'expliquer comment atteindre le billet que vous recherchez ?

 
Alexey Viktorov #:
Cette deuxième image montre que vous n'avez pas besoin d'un ticket maximum ou d'un temps d'ouverture maximum, mais que vous devez choisir un prix d'ouverture minimum pour les ordres d'achat et un prix d'ouverture maximum pour les ordres de vente.
//+----------------------------------------------------------------------------+
//| Определение цены открытия макс лота                                        |
//+----------------------------------------------------------------------------+
double PriceMaxOrder()
  {
   double max_price = 0 ;
   max_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() > max_ticket)
                    {
                     max_ticket = OrderTicket();
                     max_price = OrderOpenPrice();
                    }
                 }
              }
           }
        }
     }
   return(max_price);
  }
 
EVGENII SHELIPOV #:

Alexei j'ai les fonctions qui déterminent ces prix pourriez vous m'expliquer comment atteindre le billet que vous recherchez ?

Comme ça.

//+------------------------------------------------------------------+
//| Расчет тикета нижнего ордера BUY в сетке                         |
//+------------------------------------------------------------------+
int GetTicketMaxOrder(int Magic)// int Magic вставлен только для компиляции без ошибок.
 {
  int total = OrdersTotal(),
      my_ticket = 0;
  double minPrice = DBL_MAX;
  for(int cnt = total; cnt-- > 0;)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        if(OrderOpenPrice() < minPrice)
          my_ticket = OrderTicket();
       }
     }
   }
  return(my_ticket);
 }
/*****************************End program****************************/
 
Alexey Viktorov #:

Comme ceci

Alexey merci ! !! Mais avant d'entrer dans le vif du sujet, je voulais clarifier : cette fonction permet-elle de sélectionner le ticket de l'avant-dernier ordre ?

 
EVGENII SHELIPOV #:

Alexey merci ! !! Mais avant d'entrer dans le vif du sujet, je voulais clarifier : cette fonction permet-elle de sélectionner le ticket de l'avant-dernier ordre ?

Non, il trouve le ticket de commande ACHETER avec le prix le plus bas. A partir de maintenant, c'est à moi ou à Makar de me laisser m'entraîner.

 
Alexey Viktorov #:

Non, il trouve le ticket de commande ACHETER avec le prix le plus bas. A partir de maintenant, c'est à vous ou à Makar de vous entraîner.

Pour la deuxième journée, je ne me sens pas à la hauteur en votre compagnie. J'ai des fonctions pour calculer le ticket min/max, elles fonctionnent sans faille comme la machine de Kalashnikov, je ne les ai pas encore demandées, mais le deuxième jour elles m'ont transformé en ornière !

//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_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() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета минимального ордера в сетке                                  |
//+----------------------------------------------------------------------------+
int GetTicketMinOrder()
  {
   min_ticket=INT_MAX;
     {
      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() < min_ticket)
                     min_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(min_ticket);
  }

En tout cas, merci pour l'info.

 
EVGENII SHELIPOV #:

Oui Alexey je me sens le deuxième jour parmi vous pas tout à fait la personne adéquate. Les fonctions pour calculer le ticket min/max fonctionne sans problème comme la machine de Kalashnikov, je n'ai demandé à personne de s'en occuper, mais le deuxième jour, j'ai un hic ! !!

En tout cas, merci pour le tuyau.

Cette photo n'est-elle pas

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Toutes les questions des débutants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes.

EVGENII SHELIPOV, 2021.11.07 06:43

Bonne journée messieurs les programmeurs !!!!

Je vais essayer une nouvelle fois de poser ma question, mais en la reformulant légèrement.

Dans une grille EA, je dois trouver le ticket de l'avant-dernier ordre. Une solution de -1 à partir du ticket de l'ordre maximum ne fonctionne pas dans le testeur de stratégie, peut-être, mais il ne fonctionnera pas sur un compte démo ou réel, donc je joins une image, il sera clair pourquoi.

J'ai écrit le code de la fonction qui détermine l'avant-dernier ticket de commande. Cette logique est la suivante : si nous examinons tous les ordres ouverts dans la grille, nous trouverons le maximum suivant et ce sera le ticket d'ordre nécessaire.

Cependant, mon niveau de programmation n'est pas assez élevé et il y a une erreur dans le code. Le résultat de cette fonction est le ticket minimum. Ces deux fonctions sont le ticket maximum et l'avant-dernier ticket. La fonction définissant le ticket max fonctionne sans problème.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
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);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_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() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }

Veuillez indiquer la nature de l'erreur. Merci.


Les flèches indiquent-elles le ticket maximum ? Je vois ici des flèches pointant vers le deuxième prix de commande le plus bas. Qu'est-ce qui ne va pas ?
 
Alexey Viktorov #:

Est-ce que cette photo


les flèches indiquent le ticket maximum ? Je vois ici des flèches pointant vers le deuxième prix de commande le plus bas. Qu'est-ce qui ne va pas ?

Alexei, peux-tu agrandir l'image, s'il te plaît ?

 
EVGENII SHELIPOV #:

Alexei, peux-tu agrandir l'image, s'il te plaît ?

Voici l'ordrePREDICTE