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

 
novichok2018:

Oui, merci, j'ai lu la page. Mes connaissances en MKL4 m'ont seulement permis de remarquer que dans ma boucle les positions vont de zéro à la dernière, alors que dans l'exemple c'est l'inverse, de la dernière à zéro.Je ne sais toujours pas où insérerla pause. Quand j'ai changé la boucle pour l'inverser, les positions ne se ferment plus du tout.

Lors de la fermeture des positions, la boucle doit être inversée pour éviter de sauter des positions. L'opérateur break n'est pas nécessaire dans cette boucle - il s'agit de la rupture de la boucle et de la sortie de son corps. Ce dont vous avez besoin est continue - la transition vers l'itération suivante de la boucle.

Et vous seul savez pourquoi il ne se ferme pas et ce que vous avez fait pour lui.

 
Artyom Trishkin:

Lors de la fermeture des positions, la boucle doit être inversée afin qu'aucune position ne soit sautée. Vous n'avez pas besoin d'opérateur de rupture dans cette boucle - il s'agit d'une interruption et d'une sortie du corps de la boucle. Ce dont vous avez besoin est continue - la transition vers l'itération suivante de la boucle.

Vous êtes le seul à savoir pourquoi il ne peut pas être fermé, et ce que vous avez fait pour lui.


J'ai suivi les instructions à la lettre. Voici le code corrigé :

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      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);                  
         }
         continue;
      }
    } 
  } 
  

Maintenant il ferme les deux positions mais il n'en ferme pas une mais attend la seconde. C'est dingue. J'ai pensé que j'avais peut-être inséré la fonctionClosePoz() au mauvais endroit. Le résultat est zéro. Je crie à l'aide. Il est impossible que personne ne soit en mesure de résoudre le problème.

 

comment encaisser le compte initial (100 $) ?

 
novichok2018:

Il a fait exactement ce qu'on lui a demandé. Voici le code corrigé :

Maintenant, il ferme les deux positions, mais il n'en ferme pas une, il attend l'autre. C'est dingue. J'ai pensé que j'avais peut-être inséré la fonctionClosePoz() au mauvais endroit. Le résultat est zéro. Je crie à l'aide. Il est impossible que personne ne soit en mesure de résoudre le problème.

Je ne sais pas. Je l'ai dessiné sur mon genou. Bien sûr, je ne peux pas le vérifier - vos conditions ne sont pas suffisantes, c'est donc à vous de le faire.

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
Et WPR à l'intérieur de la fonction à vérifier - il est en quelque sorte pas normal. WPR devrait être l'une des conditions d'appel de la fonction de fermeture.
 
Il n'est pas possible de modifier le nombre de lots sur un ordre en attente.
 
igrok333:
Je comprends que vous ne pouvez pas modifier le nombre de lots dans un ordre en attente.

N'en ouvrez qu'un supplémentaire, avec le volume dont vous avez besoin.

 
Alekseu Fedotov:

N'en ouvrir qu'un supplémentaire avec le volume souhaité

Il peut être plus facile de supprimer un site existant et d'en créer un nouveau. Après tout, le volume requis ne doit pas nécessairement être plus grand que celui qui est déjà placé. Et il est plus facile de suivre un seul ordre.

 

Bonjour, j'ai une question, je vais vous expliquer comment je le comprends.

Existe-t-il un algorithme écrit pour les conseillers experts qui achètent des bougies tout en bas et vendent des bougies tout en haut ?

Comment puis-je l'adapter à un EA ?
 
iisvlg: Existe-t-il un algorithme écrit pour les EAs qui place une bougie d'achat tout en bas et une bougie de vente tout en haut et comment l'adapter dans un EA ?

Ce serait génial ! !!

 
iisvlg:

Bonjour, j'ai une question, je vais vous expliquer comment je le comprends.

Existe-t-il un algorithme écrit pour les Expert Advisors qui achètent des bougies tout en bas et vendent des bougies tout en haut ?

Et comment l'adapter dans un EA ?

Mettez la LIMITE D'ACHAT sur le bas, et la LIMITE DE VENTE sur le haut.

A propos des algorithmes, creusez la base