Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 423

 
novichok2018:

Bonjour, aidez-moi à résoudre la situation suivante : j'ouvre une position 1 sous la condition de Y1, fermée sous la condition de Y2. Mais si avant l'apparition de U2 une fois de plus se produit U1 et a ouvert la position 2, il ne réagit pas à venir U2, et accroche à la prochaine U2, qui est venu après le nouveau U1 ( !) Et cette nouvelle position n'est pas fermée par un nouveau U2, et attend la prochaine condition U1-U2. Comment éviter cela ? Ma tête me fait mal. Merci.

Nous avons besoin d'une boucle pour fermer OrderClose(...) de tous les ordres sur la condition U2 - même si nous en avons une centaine. Nous pouvons en supprimer un sur chaque tique - puis faire ce qui suit : 1) par condition U2, lever le drapeau. 2) Si le drapeau est levé, supprimez UNE commande. 3) S'il n'y a pas d'ordre, abaissez le drapeau. Ensuite, toutes les commandes, l'une après l'autre, seront supprimées.....

 
STARIJ:

Nous avons besoin d'une boucle pour fermer OrderClose(...) de tous les ordres par la condition U2 - nous en avons besoin d'une centaine.


Je suis dans un cycle comme ça. Y a-t-il quelque chose qui cloche ?

void ClosePoz()
  { int total=OrdersTotal();
  if(total>1)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
      { Print("позиция для закрытия не найдена");
         break;
      }
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
      }
    } 
  }   
 
novichok2018:
Je suis dans un cycle comme ça. Y a-t-il quelque chose qui cloche ?
Je ne comprends pas - j'ai utilisé SRC pour insérer du code et je ne le vois pas.
Vous devez appuyer sur Insertion et ensuite sur Ajouter
 
STARIJ:
Vous devez appuyer sur Coller et ensuite Ajouter

Ci-dessus, bien que ce ne soit pas au bon endroit, mais on peut lire. Oh ! Maintenant c'est au bon endroit. Oh, mon Dieu !

 
novichok2018:

J'ai inséré votre code correctement.

Appuyez d'abord sur le bouton SRC, puis déposez votre code dans la fenêtre, appuyez sur le bouton "Insérer" et soumettez votre message.

 
tura210577:

Merci pour votre réponse !

Vous êtes les bienvenus. Essayez d'utiliser des fonctions multiplateformes comme celle-ci :

//+------------------------------------------------------------------+
//| Returns specified Open by shift                                  |
//+------------------------------------------------------------------+
double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyOpen(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified High by shift                                  |
//+------------------------------------------------------------------+
double High(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Low by shift                                   |
//+------------------------------------------------------------------+
double Low(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Close by shift                                 |
//+------------------------------------------------------------------+
double Close(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Time by shift                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   if(CopyTime(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
 
novichok2018: Je suis dans un cycle comme ça. Y a-t-il quelque chose qui cloche ?

Il y a 2 erreurs dans le code. 1) Cette page explique l'ordre des commandes dans la boucle. 2) break - sortir de la boucle et continuer - sauter cette étape

 
Artyom Trishkin:

J'ai inséré votre code correctement.

Vous devez d'abord appuyer sur le bouton SRC, puis valider votre code dans la fenêtre, appuyer sur le bouton "Insérer" et soumettre votre message.


Merci. (gloussements) Au moins, tu m'as fait rire de mon écriture. Quel est l'intérêt de la question ? Tout est correct dans la boucle ?

 
novichok2018:

Merci. (gloussements) Au moins, tu m'as fait rire de mon écriture. Quel est l'intérêt ? Le cycle est-il bon ?

On vous a déjà répondu :

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Toutes les questions des débutants sur MQL4, aide et discussion sur les algorithmes et les codes

STARIJ, 2018.01.18 20:19

Il y a 2 erreurs dans le code. 1) Cette page explique l'ordre des commandes dans la boucle. 2) break - sortie de la boucle, et vous devez continuer - sautez ceci


 
Artyom Trishkin:

On vous a déjà répondu :



Oui, merci, j'ai lu la page. Mes connaissances en MKL4 n'étaient suffisantes que pour remarquer que dans ma boucle les positions sont bouclées de zéro à la dernière, alors que dans l'exemple au contraire, de la dernière à zéro.Je ne sais toujours pas où insérerla pause. Et quand j'ai changé ma boucle pour l'inverser, les positions ne se ferment plus du tout.