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

 
Sfinks35:
Bonjour !
Il me semble que j'ai bien compris maintenant :

Mais lors de la compilation, il donne un avertissement : perte possible de données en raison de la conversion de type en ligne :
index = GetPatt5barsDN(index) ;

Il n'y a pas d'erreur dans l'en-tête de la fonction (ou dans la fonction elle-même) pendant la compilation.

double low3 = 0;
   int index = 0;
   low3 = GetPatt5barsDN(index); // Здесь передача значения по ссылке

   Print("low3= ", low3);
   Print("index= ", index);
 

Bonjour, j'ai une question : existe-t-il un moyen de sauter un certain passage pendant l'optimisation ?

Par exemple, j'optimise mon robot avec 2 MA - rapide et lent - en commençant par 10 et en terminant par 1000 pour chaque MA.

Comment puis-je sauter des passages lorsque la période du lent est inférieure à la période du rapide ?

 
Roman Sharanov:

Salutations, j'ai une question, y a-t-il un moyen de sauter une certaine passe pendant l'optimisation.

Par exemple, j'optimise mon robot avec 2 MA - rapide et lent - en commençant par 10 et en terminant par 1000 pour chaque MA.

Comment puis-je sauter des passages lorsque la période du lent est inférieure à celle du rapide ?

Dans ce cas, faites return(INIT_PARAMETERS_INCORRECT) pendant l'initialisation ;

 
Igor Zakharov:

Dans ce cas, faites return(INIT_PARAMETERS_INCORRECT) pendant l'initialisation ;

merci

 

Bonjour. Qui peut me le dire. Trois TS différents, trois EA différents, avec trois numéros magiques différents, sur des paires différentes. Mais ils ont une caractéristique commune - la fermeture des ordres (à l'aide de la fonction OrderClose()) lorsque certaines conditions sont atteintes(nombre d'ordres et petit profit). Dans le testeur, il n'y a aucun problème, mais dans la pratique, l'impression est que lorsque la fonction Order Close() se déclenche sur l'une des paires, cette fonction (OrderClose()) se déclenche également sur les autres paires, que les conditions soient remplies ou non. Peut-être est-ce dû à la fonction Close() définie par l'utilisateur ?

Vous trouverez ci-dessous les conditions de clôture et la fonction personnalisée Close().

if(CountBuy() >= 1 && CountSell() >= 1 && CountSymbolTotal() >= NumberOrder)
   {
      int    i;
      int    total    = OrdersTotal();
      double accruals = CalculateCommission() + CalculateSwapBuy() + CalculateSwapSell();
   
      if((CountProfitBuy() + CountProfitSell()) >= (MaxOrderProfit*GetLots()+ accruals))
      {
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_BUY)
                     OrderCloseX();
               }
            }
         } 
         for(i = total-1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               { 
                  if(OrderType() == OP_SELL)
                     OrderCloseX();
               }
            }
         }            
      }
   }
//---------------------
void OrderCloseX()
{
   int i;
   int ticket = -1;
   int k      = OrdersTotal();
   
   for(i = k - 1; i >= 0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderType() == OP_BUY || OrderType() == OP_SELL) )
         {            
            ticket = OrderTicket();
         }
      }
   }
   if(OrderTicket() != ticket) 
      if(!OrderSelect(ticket, SELECT_BY_TICKET))
         Print("Ошибка в выборе ордеров!");

   while(true)
   {
      int  error;
      bool result = true;
      
      if (OrderType()==OP_BUY) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, 0);
         
      if (OrderType()==OP_SELL) 
         result = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, 0);
         
      if(result != TRUE) 
      { 
         error = GetLastError(); 
            Print("LastError = ", error); 
      }
      else 
      { 
         error = 0; 
      }
      if(error == 135) 
         RefreshRates();
      else break;
   } 
}

 
Youri Lazurenko:

Bonjour. Qui peut me le dire. Trois TS différents, trois Expert Advisors différents, avec trois numéros magiques différents, sur des paires différentes. Mais ils ont une caractéristique commune - la fermeture des ordres (à l'aide de la fonction OrderClose()) lorsque certaines conditions sont atteintes(nombre d'ordres et petit profit). Dans le testeur, il n'y a aucun problème, mais dans la pratique, l'impression est que lorsque la fonction Order Close() se déclenche sur l'une des paires, cette fonction (OrderClose()) se déclenche également sur les autres paires, que les conditions soient remplies ou non. Peut-être est-ce dû à la fonction Close() définie par l'utilisateur ?

Voici les conditions de fermeture et la fonction Close() définie par l'utilisateur.

Tout d'abord, vous utilisez OrderSelect() pour vérifier les ordres comme il se doit - vous contrôlez le symbole et le numéro de référence de l'ordre, puis vous fermez l'ordre en utilisant OrderCloseX() et recherchez à nouveau dans les ordres, mais vous ne contrôlez pas le symbole et le numéro de référence dans OrderSelect() pour une raison quelconque.

Je pense que nous devrions ajouter OrderCloseX() pour éviter de réécrire l'ensemble du code :

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
 
Igor Makanu:

Tout d'abord, vous vérifiez les ordres via OrderSelect() comme il se doit - contrôlez le symbole et le numéro de référence de l'ordre, puis vous fermez l'ordre dans OrderCloseX() et recherchez à nouveau les ordres, mais pour une raison quelconque, vous ne contrôlez pas le symbole et le numéro de référence dans OrderSelect().

Je pense que je devrais ajouter OrderCloseX() afin de ne pas réécrire tout le code :

Merci. Je vais le corriger. Déjà corrigé. C'est peut-être la raison : la fonction OrderCloseX() est appelée sur l'une des paires qui fonctionne ensuite sur toutes les autres paires et tous les numéros magiques. C'est possible, c'est possible. Merci encore.

 
Igor Makanu:

Chiffres - Variables prédéfinies

J'ai également décidé d'utiliser cette fonction, j'ai lu que si le nombre de chiffres dans le bureau est de 5 par exemple 1.00000 et que les dernières valeurs sont des zéros, il pourrait ne pas retourner 5 chiffres mais zéro ou par exemple le nombre ressemblera à 1.24700 retournera 3 décimales même s'il devrait y en avoir 5 est-ce vrai ?

 
Seric29:

J'ai aussi décidé d'utiliser cette fonction, j'ai lu que si le nombre de chiffres dans un stable de 5 caractères par exemple 1.00000 et la dernière valeur de zéro il peut ne pas retourner 5 caractères mais zéro, ou par exemple le nombre ressemblera à 1.24700 retournera 3 décimales même s'il devrait y en avoir 5 est-ce vrai ?

Les chiffres sont utilisés avec NormalizeDouble

https://docs.mql4.com/ru/convert/normalizedouble

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
Рассчитываемые значения StopLoss, TakeProfit, а также значения цены открытия отложенных ордеров, должны быть нормализованы с точностью, значение которой можно получить функцией Digits(). Нужно...
 
Tout à coup, tous les terminaux ont perdu la connexion avec les courtiers. Partout l'erreur connect failed.
Dans la fenêtre de connexion, le serveur ne me permet pas de sélectionner un serveur, il est vide. Je n'ai rien changé auparavant, je n'ai rien installé ni supprimé.
Quelle est la raison ?