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

 
hoz:

J'ai déjà compris que le tableau est préférable ici)))) Et dans cette variante, ce que j'ai décrit ci-dessus n'est pas exact ? (Purement par intérêt. Je pense que tout est déjà clair)

C'est ce que j'avais en tête. Alors... la direction à prendre pour penser...

int i_magic=123;
int OrdersMassive[7];
//+----------------------------------------------------------------------------+
int start() {
   FindOrders(OrdersMassive);
   int i, num=0;
   for (i=0; i<=7; i++) {
      Print("Количество "+GetNameOP(i)+" = "+OrdersMassive[i]);
      num+=OrdersMassive[i];
      }
   Print("Всего ордеров = "+(num-OrdersMassive[6]));
   return(0);
}
//+----------------------------------------------------------------------------+
void FindOrders(int &mass[]) {
   int i, t, k=OrdersTotal()-1;
   ArrayInitialize(mass,0);
   for (i=k; i>=0; i--) {
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderMagicNumber()!=i_magic)    continue;
      if (OrderSymbol()!=Symbol())        continue;
      t=OrderType();
      mass[t]=mass[t]+1;
      }
}   
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
   switch (op) {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("Buy Limit");
      case OP_SELLLIMIT: return("Sell Limit");
      case OP_BUYSTOP  : return("Buy Stop");
      case OP_SELLSTOP : return("Sell Stop");
      case 6           : return("Неторговое изменение баланса");
      default          : return("Не знаю, чё за тип такой...");
   }
}
//+----------------------------------------------------------------------------+

Et ce que vous avez là, je ne l'ai pas vraiment regardé...

 
r772ra:

Que pensez-vous de ça ?

Ma version de la fonction est plus courte ... :)

//+----------------------------------------------------------------------------+
void FindOrders(int &mass[]) {
   int i, t, k=OrdersTotal()-1;
   ArrayInitialize(mass,0);   
   for (i=k; i>=0; i--) {
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderMagicNumber()!=i_magic)    continue;
      if (OrderSymbol()!=Symbol())        continue;
      t=OrderType();
      mass[t]=mass[t]+1;
      }
}   
//+----------------------------------------------------------------------------+
 
r772ra:

Peut-être bien.

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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);
}

Ça ne marche pas non plus. J'avais un défaut là. C'est comme ça maintenant :

//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
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++;
      else 
      {
         pr("Позиций в рвнке нет!");
      }
      
      pr ("FindOrders(): " + "t = " + t);
      pr ("FindOrders(): " + "p = " + p);
   }
}

Lorsqu'il n'y a pas d'ordres sur le marché, les compteurs ne se mettent pas à zéro. C'est des conneries. Qu'est-ce qui ne va pas ici ? Je vais regarder ce qu'Artem a écrit.

 
hoz:

Ça ne marche pas non plus. J'avais un défaut là. C'est comme ça que ça se passe maintenant :

Quand il n'y a pas d'ordres sur le marché, les compteurs n'apparaissent pas à zéro. C'est des conneries. Qu'est-ce qui ne va pas ici ? Je vais regarder ce qu'Artem a écrit.


Enlevez ça de la boucle.

pr ("FindOrders(): " + "t = " + t);
pr ("FindOrders(): " + "p = " + p);
Je suppose que c'est le résultat de l'information.
 
r772ra:


Enlevez ça de la boucle

Je suppose que c'est le résultat de l'information.


C'est vrai. Eh bien, ce qui m'est arrivé. Quelques erreurs stupides. Je creuse dans le C++ depuis un mois. Et maintenant, j'ai de telles erreurs idiotes en µl. Mon cerveau doit être brûlé :(
 
En général, est-il possible de rechercher des ordres à chaque tick? Ou est-il préférable d'exécuter sur chaque barre ? Je n'ai toujours pas en tête ce qui est mieux dans un cas et dans l'autre.
 
hoz:
En général, est-il possible de rechercher des ordres à chaque tick ? Ou est-il préférable d'exécuter sur chaque barre ? Je ne sais toujours pas ce qui est mieux dans un cas et ce qui est mieux dans un autre.
Si une position est fermée dans une barre pendant le suivi par l'ouverture de la barre, le conseiller expert ne sera pas informé des changements dans le nombre de positions jusqu'à l'ouverture de la barre suivante.
 
hoz:


t est le nombre de toutes les commandes.

p est le nombre d'ordres en attente

Si la condition est vraie :

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. Cela signifie que nous devons incrémenter les deux compteurs. Et si la condition est vraie :

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.


t = OrdersTotal() ;

pourquoi compter ???? compté ???

 

Bonjour, je recherche des erreurs dans cette fonction.

L'idée est que les ordres en attente qui n'ont pas été ouverts soient supprimés deux jours après avoir été placés.

min=1440 ;

if(OrdersTotal()<1)
{return;
 }
  for(int i=OrdersTotal()-1;i>=0;i--)
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol())
       {
        if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
        {
          if(TimeCurrent()-OrderOpenTime()>min)            
            {
            OrderDelete(OrderTicket());
          return;
          }
        }
      }
    }
return;}
 
pako:



Merci, pako.