Quel modèle est correct ? - page 7

 
Vladon:
J'avais l'habitude de publier mon propre ensemble sur la fermeture de différents types dans la base de code à un moment donné.
Dans ce cas, vous donnez des fichiers compilés, ce qui n'est d'aucune utilité dans cette branche.
Vladon:
https://www.mql5.com/ru/code/mt4

Et ici, désolé, mauvais forum.

Sans vouloir vous offenser.

 

Oh, ce n'est pas ça :-), maintenant.


https://www.mql5.com/ru/code/9052

 
int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}
Une telle conception devrait donc, en théorie, fermer tous les ordres du tout, mais elle ne ferme qu'une paire de la fenêtre actuelle, quelle est l'erreur ?
 
Vladon:

Oh, ce n'est pas ça :-), maintenant.


https://www.mql5.com/ru/code/9052


Oui, votre kit est bon, mais je n'arrive pas à trouver où se trouve le bug dans mon code.
 
valenok2003:

Oui, votre kit est bon, mais je n'arrive pas à trouver où se trouve le bug dans mon code.

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}


for (int  Cnt = OrdersTotal(); Cnt >= 0; Cnt--) 
Parfois, l'obstination est étonnante. À la page 3 de ce fil de discussion et plus loin dans le fil, on vous a montré un exemple approprié d'ordre prioritaire. RTFM à la fin de la journée. Combien de fois dois-je vous le dire : Exit outside an array. Commandes avec le numéro
OrdersTotal()

n'existe pas ! Alors cela fonctionnera :

if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;
 
VladislavVG:
Parfois, l'entêtement est tout simplement stupéfiant. À la page 3 de ce fil et plus loin dans le fil, on vous a montré l'exemple correct de la force brute de commande. RTFM à la fin de la journée. Combien de fois dois-je vous le dire : sortez du tableau. Commandes avec numéro

n'existe pas ! Alors cela fonctionnera :


Vladislav, je m'excuse, ce n'est pas de l'entêtement, mais plutôt de l'inattention. J'expérimentais et je n'ai pas corrigé le code.

Bien sûr qu'elle l'est :

for (int  Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 

Cependant, cela ne semble pas être la raison, car la conception corrigée

int Close_This_Symbol_All()
{
//----
  string a = "Всего ордеров = " + DoubleToStr(OrdersTotal(),0)+ "\n";
  for (int Cnt = OrdersTotal()-1; Cnt >= 0; Cnt--) 
  {
    if(!OrderSelect(Cnt, SELECT_BY_POS, MODE_TRADES)) break;

        while (!IsTradeAllowed()) Sleep(1000);
        RefreshRates();
        if(OrderType() == OP_BUY ) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), slip, CLR_NONE);
        if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), slip, CLR_NONE);
       Comment(a+ GetLastError());  
  }
//----
   return(0);
}

ferme toujours les ordres uniquement sur la paire de la fenêtre sur laquelle vous lancez le script, mais pas sur toutes les paires.

 

Extrait du profil du débutant : "J'écris en MQL4, y compris sur mesure" - un exemple typique d'excès de zèle.

Je comprends que les programmeurs peuvent être moyens. On s'y habitue. Et moi-même, j'écris parfois du mauvais code, même si j'essaie. Mais ce qui serait...

Je confirme la vieille supposition de quelqu'un, le starter a de la laine dans la tête.

 
valenok2003:


Vladislav, je m'excuse, ce n'est pas de l'entêtement, mais plutôt de l'inattention. J'expérimentais et je n'ai pas corrigé le code.

Bien sûr qu'elle l'est :

Cependant, cela ne semble pas être la raison, car la conception corrigée

ne ferme toujours les ordres que pour une paire de la fenêtre sur laquelle le script est lancé, mais pas toutes les paires.

Si toutes les paires, alors vous n'utilisez pas Ask correctement, Bid - vous prenez du graphique actuel. Si vous traitez des erreurs lors de la clôture des ordres - vous verrez les messages.

au lieu de Ask - MarketInfo(OrderSymbol(),MODE_ASK) ; au lieu de Bid - MarketInfo(OrderSymbol(),MODE_BID) ;

Bonne chance.

ZS et changer le nom du script, car selon le nom il fonctionne correctement ;).

 
gip:

Extrait du profil du débutant : "J'écris en MQL4, y compris sur mesure" - un exemple typique d'excès de zèle.

Je comprends que les programmeurs peuvent être moyens. On s'y habitue. Et moi-même, j'écris parfois du mauvais code, même si j'essaie. Mais ce qui serait...

Je confirme la vieille supposition de quelqu'un, l'auteur du sujet a de la laine dans sa tête.


C'est une honte d'entendre ça, bien sûr. Toutefois, je n'accepte jamais de commandes que je ne peux pas honorer. Et vous comprenez, je l'espère, que les niveaux de commande peuvent également varier. Et, comme quelqu'un l'a dit - Il n'y a pas de honte à ne pas savoir. C'est une honte de ne pas demander.... Et si je comprends bien, ce forum existe précisément pour offrir une opportunité d'apprentissage. Et donc votre, snobisme n'est pas clair pour moi, et votre critique, je ne l'accepte pas. Bien que j'admette que vous êtes le plus intelligent de ce forum.

P.S. L'art de la programmation ne réside pas dans la capacité à écrire du code, mais dans la capacité à réaliser un algorithme correct. C'est comme si vous aviez conduit une Lada toute votre vie, que vous passiez à une Mercedes et que vous ne sachiez pas où se trouvent tous les boutons, vous n'êtes pas devenu un mauvais conducteur pour autant.

 
VladislavVG:

Si toutes les paires, vous n'utilisez pas Ask correctement, Bid - vous prenez du graphique actuel. Si vous traitiez des erreurs lors de la clôture des ordres, vous verriez apparaître le message suivant.

au lieu de Ask - MarketInfo(OrderSymbol(),MODE_ASK) ; au lieu de Bid - MarketInfo(OrderSymbol(),MODE_BID) ;

Bonne chance.


Merci beaucoup, je traite les erreurs, le message revient - mauvais prix, mais je n'arrive pas à comprendre ce qui ne va pas.
Raison: