Erreurs, bugs, questions - page 101

 
Urain:

De toute façon.

if(a==0){expression} signifie que si a est égal à 0 alors c'est vrai, donc exécutez {expression}.

if(a=0){expression} est équivalent à if(a){a=0;expression} si a est vrai, {a=0;expression}.

La deuxième est fausse, elle devrait être écrite comme ceci

if(a=x) { expression } assigne la valeur de x à la variable a, et si a est différent de 0 après cela, alors exécute l'expression

if(a=0) { } après l'optimisation il n'y aura que a=0

 
mql5:

La deuxième est fausse. La façon correcte de l'écrire est la suivante

if(a=x) { expression } assigne la valeur de x à la variable a, et si a est différent de 0 après cela, exécute l'expression

if(a=0) { } après l'optimisation il n'y aura que a=0

Désolé, c'est vrai, les expressions sont exécutées de gauche à droite.

C'est pourquoi nous commençons par l'affectation, puis nous vérifions la vérité.

 
Renat:

C'est à peu près le cas :

Ce code ne calcule pas seulement le volume maximal, mais l'adapte exactement aux limites des paramètres du symbole.

Il le calcule mais oublie pourquoi il le calcule lorsqu'il l'insère :

   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(lot<minvol) lot=minvol;

La valeur du lot à ce stade est calculée de manière à consommer toute la marge disponible avec une marge minimale.

Si cette valeur est augmentée d'au moins un pas de volume, il n'y aura pas assez d'argent pour ouvrir une position.

Mais la deuxième ligne du code cité compose la valeur du lot au cas où la condition sous si est remplie, et peut l'augmenter de beaucoup plus que la valeur du pas de volume, car en réalité il y a un volume min = 0.1 et un pas de volume = 0.01.

Et dans ce code ci-dessous, une division par zéro peut se produire, contre laquelle il n'existe aucune protection :

   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   lot=stepvol*NormalizeDouble(lot/stepvol,0);

Si SymbolInfoDouble() renvoie 0, c'est terminé. Les programmes MQL5 se terminent par une division par 0, non ? Il ne peut pas retourner 0 ? Les gens ici se plaignent que les fonctions informationnelles renvoient souvent 0. Vous ne pouvez pas vous rabattre sur "ça ne renverra pas 0" parce que, premièrement, ça peut le faire, et deuxièmement, la division par 0 est fatale.

Il y a quelques remarques de moindre importance sur la "précision de l'entrée", mais elles ne sont vraiment pas trop significatives, c'est-à-dire qu'elles n'ont pas de conséquences si graves, vous pouvez les ignorer.

Anticipant d'éventuels arguments selon lesquels le code est "approximatif", je note : combien d'utilisateurs du produit sont capables de trouver et de corriger avec compétence de tels "mauvais endroits" ?

Pour eux, il s'agit du "code des développeurs". Un exemple à suivre.

 

Pourquoi le bouton "Suivant" n'est-il pas actif lorsque tous les champs obligatoires sont remplis ?

 
EvgeTrofi:

Pourquoi le bouton "Suivant" n'est-il pas actif lorsque tous les champs obligatoires sont remplis ?

Vous devez donner votre autorisation pour recevoir la lettre d'information par courrier.
 
simpleton:

Il calcule, mais ensuite il oublie ce pour quoi il calculait :

Anticipant d'éventuels arguments selon lesquels le code est "approximatif", je tiens à souligner : combien d'utilisateurs du produit peuvent corriger correctement de tels "mauvais endroits" ?

Le code était approximatif (copié à partir de deux pièces), mais vos commentaires sont corrects.

Voici la version corrigée :

double CalculateMaxVolume(string symbol)
  {
   double price=0.0;
   double margin=0.0;
//--- select lot size
   if(!SymbolInfoDouble(symbol,SYMBOL_ASK,price))                return(0.0);
   if(!OrderCalcMargin(ORDER_TYPE_BUY,symbol,1.0,price,margin)) return(0.0);
   if(margin<=0.0)                                            return(0.0);

   double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(stepvol>0.0)
     {
      double newlot=stepvol*NormalizeDouble(lot/stepvol,0);
      if(newlot>lot) lot=NormalizeDouble(newlot-stepvol,2);
      else           lot=newlot;
     }

   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(lot<minvol) lot=0.0;   // 

   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(lot>maxvol) lot=maxvol;
//--- return trading volume
   return(lot);
  }
 
gumgum:

Et pourquoi session_index++ ; alors que session_index=1 est déjà faux :

Nous ne pouvons pas savoir à l'avance quel est le nombre de sessions par outil. Nous interrogeons donc chaque session par numéro. Si c'est vrai

session_exist=SymbolInfoSessionQuote(symbol,day,session_index,start,finish);

nous nous intéressons à l'heure de son début et de sa fin. Si nous obtenons un faux - c'est tout, il n'y a pas de session avec ce numéro.

 
Rosh:

Nous ne pouvons pas savoir à l'avance quel est le nombre de sessions pour un instrument. C'est pourquoi nous demandons chaque session par numéro. Si c'est vrai

nous analysons le moment de son début et de sa fin. Si nous obtenons un faux - c'est tout, il n'y a pas de session avec ce numéro.

A...... Pourquoi alors le vendredi tout se termine à 24h00, mais en réalité à 23h00 ?
 
gumgum:
A...... alors pourquoi tout se termine le vendredi à 24h00 et en réalité à 23h00 ?
Parce que c'est ce que dit le serveur. Nous allons vérifier, merci.
 
J'ai cru comprendre que vous pouviez désormais modifier votre adresse électronique sur votre profil ? Dans le champ E-mail , vous pouvez maintenant effectuer des modifications, mais elles ne sont pas enregistrées !