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

 
Vitaly Muzichenko:
Oui, vous avez raison, c'est juste que le code est écrit dans un tel style que l'intervenant précédent l'a mal interprété.

Et pour vérifier ?

//+------------------------------------------------------------------+
//|                                                   TestLogics.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      Value=0;    // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(Value>0) Alert("1. Количество ордеров=",Value);
   else Alert("2. Это код после else");
      {
      Alert("3. Ордера отсутствуют");
      }
  }
//+------------------------------------------------------------------+
Le code entre accolades ne fait pas référence à la condition if-else et sera toujours exécuté, quelle que soit la valeur de Value.
 
Artyom Trishkin:

Et le vérifier ?


Le code entre accolades ne fait pas référence à la condition if-else, et sera toujours exécuté, quelle que soit la valeur de Value.

Bon sang, vraiment, maintenant j'ai revu le code original, et j'avais tort. Le style d'écriture est un peu tordu - ça m'a troublé.

 

Revérifié, enlevé le "extra".

ladivision par zéro ne va nulle part

Dossiers :
zero.mq4  5 kb
 
trader781:

Revérifié, enlevé le "extra".

ladivision par zéro ne va nulle part

 
trader781:

Revérifié, enlevé le "extra".

La division par zéro n'a pas disparu

Parce qu'il n'y a pas de vérification si le diviseur est différent de 0. Quel est l'intérêt d'exécuter un code supplémentaire quand il n'y a pas d'ordres et 0 lot ?

 

Mettez un chèque dessus

void ModifyOrders()
  {
   double avg_price=0;
   price=0;
   bool z=true;
   double orderlots=0;

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
        {
         price+=OrderOpenPrice()*OrderLots();
         orderlots+=OrderLots();
        }
     }
    
   if(orderlots==0) { return; } // если ничего нет - выходим
   avg_price=NormalizeDouble(price / orderlots,Digits);
  
   if(FindLastOType()==OP_BUY)     tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
   if(FindLastOType()==OP_SELL)    tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);


   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))

         z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
         if (!z)
         Print("Ошибка функции модифицирования");
     }
  }
 
Vitaly Muzichenko:

Mettez un chèque dessus


Vitalie Postolache:


Les lots m'ont manqué, merci.
 
trader781:
Mais les lots m'ont manqué, merci.
C'est normal de le rater, mais ce n'est pas normal de ne pas lire le journal de bord, il dit tout, et il dit quelle ligne est fausse.
 
Vitaly Muzichenko:
C'est normal de le manquer, mais ce n'est pas normal de ne paslire le magazine, tout y est dit.

Je n'allais pas le lire. Il est écrit "pour vérifier sur le marché". Mes produits ne seront jamais sur le marché.

à propos de la division par zéro.

Et celle du dessus ? C'est censé partirde là.

{
prix+=OrderOpenPrice()*OrderLots() ;
orderlots+=OrderLots() ;
}
}

if(orderlots==0) {return; }// s'il n'y a rien, exit
avg_price=NormalizeDouble(price / orderslots,Digits) ;

if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);

 
trader781:
Je n'allais pas le lire. Il est dit "à tester sur le marché". Mes produits ne seront jamais sur le marché.

Je parle du magazine du testeur.

Ajouté : Assembler le code à son état normal, le réviser, puis l'exécuter dans le testeur et lire les erreurs dans le journal. Vous me donnez des bouts de code ici.