Quel modèle est correct ? - page 4

 
Martingeil:
Faites comme ça.

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

C'est cette ligne qui est déroutante. Je ne pense pas du tout que ce soit nécessaire ici. Ou ai-je tort ?

 
valenok2003:

C'est cette ligne qui est déroutante. Je ne pense pas du tout que ce soit nécessaire ici. Ou ai-je tort ?

C'est pour couper le symbole magique

Lors de la recherche, elle cherche d'abord des ordres simplement par le symbole sans magik, s'il n'y a pas de tels ordres la fonction s'arrête de travailler........., si elle trouve des ordres avec un tel symbole, alors elle cherche parmi eux pour trouver le magik, et ferme ceux qui correspondent au magik, si le flux de trading est libre.

 
valenok2003:

C'est cette ligne qui est déroutante. Je ne pense pas du tout que ce soit nécessaire ici. Ou ai-je tort ?

Si nous parlons de supprimer tous les ordres, alors cette ligne est inutile, quant à la normalisation, qu'est-ce qui vous fait penser que les scripts intégrés sont tels qu'ils doivent être pris comme exemple ?
 
Martingeil:

J'avais besoin de couper la majuscule de ce personnage particulier.

Lors de la recherche, elle recherche d'abord les ordres simplement par le symbole sans majic, s'il n'y en a pas, elle arrête la fonction, s'il y a des ordres avec un tel symbole, elle les parcourt et trouve ceux qui correspondent au majic, et les ferme si le flux commercial est libre.

Et comment connaître à l'avance le MagicNumber, car nous l'obtenons en utilisant OrderMagicNumber(). Et en plus de la ligne
OrderSymbol() == Symbol()

est dupliqué.

Aussi cette ligne

Print ("close ALL orders Type : order :  Bid  "+OrderType()+" :  "+OrderOpenPrice()+"  :  "+Bid);

S'il n'y en a pas, la fonction cesse de fonctionner et cherche s'il existe un tel majik.

 
Techno:
Si nous parlons de supprimer tous les ordres, alors cette ligne est inutile, quant à la normalisation, qu'est-ce qui vous fait penser que les scripts intégrés sont tels qu'ils doivent être pris comme exemple ?


Eh bien, Marx, après tout.
 
Martingeil:

Il faut couper la magie de ce symbole particulier.

lors de la recherche d'un ordre, elle cherche d'abord un ordre sans numéro magique ; s'il n'y en a pas, la fonction s'arrête de travailler......... si elle trouve un ordre avec un tel numéro, elle les parcourt tous pour trouver un numéro magique et ferme tous ceux qui correspondent à un numéro magique si le flux de transactions est libre.

Je vois, je parle juste de fermer tous les ordres, c'est pourquoi je n'ai pas compris au début.

J'ai pris la liberté de réarranger votre exemple comme ceci :

  for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      if (OrderMagicNumber() == MagicNumber)
      {
        while (!IsTradeAllowed()) Sleep(1000);
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
      }
    }
  }

mais pour fermer toutes les commandes

  for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
 
valenok2003:


Eh bien, Marx, après tout.
même Engels ) pas besoin de culte de la personnalité, écrivez sur la base de vos connaissances)
 
valenok2003:
Si vous voulez dire ceci

alors il y a une variable supplémentaire ici pour la transparence du code.

Ou peut-être parlez-vous d'autre chose ?

void Close_All()
{
  int Total = OrdersTotal();
  for (int i=Total; i >=1; i--)                                                        
  {                                                                                          
    if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true)
    {
      switch(OrderType())
      {
        case OP_BUY : OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5); break;
        case OP_SELL: OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5); break;
        default     : break;
      }        
    }
  }  
}

Dans ce cas, c'est ça.

La "norme commune" pour C/C++ est :

void Close_All()
{
  int Total = OrdersTotal();
  for (int i=Total-1; i >=0; i--)                                                        
  {                                                                                          
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
    {
      switch(OrderType())
      {
        case OP_BUY : OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5); break;
        case OP_SELL: OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5); break;
        default     : break;
      }        
    }
  }  
}

La différence dans le nombre d'opérations. Si elle n'a pas une grande incidence dans ce cas, la différence de style pour le testeur, par exemple, aura un effet notable sur le temps d'optimisation. Dans le monde réel, cela affecte la vitesse, qui est parfois critique.

Le freinage en particulier est une conception de ce type (je ne l'ai pas vu sur votre site, mais pour une raison quelconque, la plupart des gens le préfèrent...) :

for (int i=0; i<OrdersTotal(); i++)

Ici, une fonction est appelée à chaque passage de la boucle. C'est l'opération la plus "coûteuse" en termes de coûts informatiques.

Bonne chance.

Je vois que vous avez corrigé les codes dans ce sens.

 

Le résultat est ce script

//+------------------------------------------------------------------+
//|                                           CloseThisSymbolAll.mq4 |
//+------------------------------------------------------------------+
int start()
{
//----
  for (int trade = OrdersTotal()-1; trade >= 0; trade--) 
  {
    OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol() == Symbol()) 
    { 
      while (!IsTradeAllowed()) Sleep(1000);
      if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), 5, CLR_NONE);
      if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), 5, CLR_NONE);
    }
  }
//----
   return(0);
}
//+------------------------------------------------------------------+
Question - Pourquoi ne ferme-t-il pas toujours toutes les commandes ? Par exemple, si j'ouvre trois ordres de vente d'affilée et que j'essaie de les fermer avec le script, il peut en fermer un, deux ou tous. Quelle en est la raison ?
 

Mec, c'est une sacrée façon de choisir le mauvais parmi toutes les options. Tu n'es pas censé coder, petit.

Ce n'est pas la fermeture à cause des citations.