Questions des débutants MQL5 MT5 MetaTrader 5 - page 548

 
edutak:

Je ne voudrais pas montrer le code, car la première version s'est avérée très résistante. Il a survécu pendant 10 ans sans optimisation. Maintenant, je veux le rendre un peu plus complexe et rentable.

Le code est très simple.

Pourtant, des ordres peuvent être ouverts sur chaque tick en raison d'une erreur dans la logique.

Vérifiez avant d'ouvrir une position si elle est déjà ouverte ou non.
 
Vitalii Ananev:
Vérifiez avant d'ouvrir une position si elle est déjà ouverte ou non.
N'est-ce pas ?
for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
         kolpos++;
     }
 

Avant la fermeture, c'est comme ça.

 if(OrdersTotal()!=0)
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
            if(OrderType()==OP_BUY)
 
edutak:
N'est-ce pas ?
   for(int pos=OrdersTotal()-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)  kolpos++;
   }

Ça donne quelque chose comme ça.

Il est préférable d'en faire une fonction.

int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
}
 
edutak:

Avant la fermeture, c'est comme ça.

Tu n'as pas de vérification pour la magie et le symbole avant la fermeture. Peut fermer les transactions d'un autre EA ou les transactions ouvertes manuellement.
 
Vitalii Ananev:
Ça donne quelque chose comme ça.

Non, le problème n'a pas été résolu. Il ne se trouve pas dans cette unité.

Pouvez-vous expliquer la différence entre mon option et la vôtre ?

 
edutak:

Non, le problème n'a pas été résolu. Il ne se trouve pas dans cette unité.

Pouvez-vous expliquer la différence entre mon option et la vôtre ?

Alors vous faites quelque chose de mal, travaillez votre code.

Le mien est meilleur :)

...

De cette façon, vous ne manquerez aucune commande. Dans votre version, si à ce moment-là, une position est fermée ou un ordre est supprimé, vous pouvez ignorer certaines des positions restantes.

 
Vitalii Ananev:

Donc tu fais quelque chose de mal, occupe-toi de ton code.

Le mien est meilleur :)

...

De cette façon, vous ne manquerez aucune commande. Si votre version montre qu'à ce moment-là, une position est fermée ou un ordre est supprimé, alors vous pouvez sauter certains des autres.

Je l'ai déclaré comme une variable globale, mais cela me donne une erreur.

int CountOrder;
 
edutak:

Je l'ai déclaré comme une variable globale, mais cela donne une erreur.

Ce que je vous ai écrit est une fonction.

Voici un exemple d'utilisation.

int Count = CountOrder(Symbol(),12345);

if (Count==0)
{
//можно открывать
}
 
Vitalii Ananev:

Ce que je vous ai écrit est une fonction.

Voici un exemple d'utilisation.

Confus