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

 
hoz:


C'est déjà un signe de somnolence chez moi.

Mais là encore, ce n'est pas vraiment le sujet. J'utilise le hibou dans le testeur. Dans la capture d'écran, comme vous pouvez le voir, il n'y a pas d'ordres en attente ou d'ordres au marché.

Tant la fonction séparée que le commentaire standard que j'ai dupliqué la fonction séparée pour afficher les valeurs requises montrent qu'il y a des ordres au marché et des ordres en attente en permanence.

Voici comment fonctionne la fonction :

Je l'appelle dès le début, où initialement je remets également les valeurs du compteur à zéro :

En fait, t++ fonctionne dans les deux cas.
 
Forexman77:

J'ai un peu retravaillé votre EA, des commentaires dans le code. Faites attention à la formation du signal et de l'arrêt. Je les ai mis spécialement sans réfléchir. Modifiez-le à votre goût si nécessaire.

Dossiers :
 
artmedia70:
Eh bien, le t++ fonctionne dans les deux cas.


La seule option est celle-ci ?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else if (OrderType() < 2)
          t++;
      else 
      {
         Print("Позиций в рвнке нет!");
      }
      
      pr ("FindOrders(): " + "t = " + t);
      pr ("FindOrders(): " + "p = " + p);
   }
}

Ça ne ressemble pas à grand-chose. Ce n'est pas optimisé. La répétition de t++ n'est pas heureuse...

 
hoz:


La seule option est celle-ci ?

Ça ne ressemble pas à grand-chose. Ce n'est pas optimisé. La répétition de t++ n'est pas heureuse...

Et pourquoi voudriez-vous augmenter t dans tous les cas ? En fait, qu'y a-t-il de toute façon ?

if (OrderType() > 1 && OrderType() < 6)
      {
          p++;
          t++;
      }
      else t++;

Si le type d'ordre est supérieur à 1 et inférieur à 6, augmenter p, augmenter t

Sinon (même si le type d'ordre est==6), nous augmentons à nouveau t

C'est étrange, n'est-ce pas ?

 
artmedia70:

Pourquoi voudriez-vous augmenter t de toute façon ? En fait, qu'y a-t-il de toute façon ?

Si le type d'ordre est supérieur à 1 et inférieur à 6, nous augmentons p, augmentons t

Sinon (même si le type d'ordre==6), nous augmentons à nouveau t

C'est étrange, n'est-ce pas ?




Pendant que j'écrivais votre commentaire, j'avais déjà réécrit le mien. Ci-dessus, la version corrigée.
 
hoz:

Pendant que j'écrivais votre commentaire, j'avais déjà réécrit le mien. Le texte ci-dessus est la version corrigée.
Pourquoi devrais-je augmenter t si l'ordre est en attente, puis augmenter t à nouveau si l'ordre suivant est un ordre de marché ?
 
Créez un tableau de six éléments. Passez-le à la fonction par référence. Une fois qu'un ordre a été sélectionné et qu'il correspond à tous les filtres (symbole, magik), incrémentez la cellule du tableau adressée par le type d'ordre. Après l'exécution de la fonction, vous aurez le nombre de commandes triées par leur type dans le tableau.
 
artmedia70:
Et pourquoi devrions-nous augmenter t, si l'ordre est en attente, puis augmenter t à nouveau, si l'ordre suivant est un ordre de marché ?


t est le nombre de tous les ordres.

p - nombre d'ordres en attente

Si la condition :

if (OrderType() > 1 && OrderType() < 6)

est vrai, alors t et p sont tous deux incrémentés, puisque tout ordre du type 2 à 5 est à la fois un ordre en attente et un ordre général. Cela signifie que nous devons incrémenter les deux compteurs. Et si la condition est vraie :

else if (OrderType() < 2)

Dans ce cas, il n'y a pas d'ordre en attente mais il y a un ordre au marché. Cela signifie que nous allons augmenter le compteur t, c'est-à-dire le compteur du nombre total de commandes.

Et s'il n'y a rien, alors nous imprimerons qu'il n'y a pas de commande.

 
artmedia70:
Créez un tableau de six éléments. Passez-le à la fonction par référence. Une fois qu'un ordre a été sélectionné et qu'il correspond à tous les filtres (symbole, magik), incrémentez la cellule du tableau adressée par le type d'ordre. Après l'exécution de la fonction, vous aurez le nombre de commandes triées par leur type dans le tableau.

J'ai déjà compris que le tableau est plus préférable ici)))) Y a-t-il une incohérence dans la variante ci-dessus ? (Juste par intérêt, tout semble être clair maintenant).
 
hoz:

Qu'ici le tableau sera préférable, j'ai déjà compris)))) Et dans cette variante, ce que j'ai décrit ci-dessus est inexact ? (Juste par intérêt, je pense que tout est déjà clair).

Que pensez-vous de ça ?

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders(int& t, int& p)
{
   t = 0;
   p = 0;
 
   for (int i=OrdersTotal() - 1; i>=0; i--)
      {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderType() > 1 && OrderType() < 6)   p++;
      if (OrderType() < 6)  t++;
       }
  pr ("FindOrders(): " + "t = " + t);
  pr ("FindOrders(): " + "p = " + p);
}