Erreurs, bugs, questions - page 1701

 
fxsaber:
C'est ce que je veux découvrir.

Il est logique de l'essayer sur du lmax. Et même cela est discutable.

Avez-vous essayé les volumes, les sentiments, le verre ? Pour moi, le goût est meilleur. Mes métiers préférés sont sur ticker et tumblr, mais je ne trouve rien de tel sur le forex.

 
Комбинатор:

Il est logique de l'essayer sur du lmax. Et c'est douteux.

Avez-vous essayé les volumes, les sentiments, le verre ? Pour moi, le goût est meilleur. Ce que je préfère dans le trading, c'est le ruban et la jauge, mais il n'y a rien de tel sur le forex.

Je veux essayer l'échange. D'une manière ou d'une autre, j'ai compris jusqu'à présent ce qu'il fallait faire là-bas. Et l'on ne comprend pas pourquoi cela n'est pas fait, même sous forme d'indicateurs.

Seuls les bugs me ralentissent.

 
void OnStart()
  {
//---
   Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
  }

Je lance un script comme ceci

et obtenir

DBL_MAX= 1.797693134862316e+308

IntegerToString(int(DBL_MAX) )= -2147483648

IntegerToString(uint(MathAbs(DBL_MAX) ) )= 0

------

Question : pourquoi obtient-on un nombre négatif lors de la conversion d'un nombre double positif en int ?

 
Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
   Print("---");
   Print("int(DBL_MAX)= ", int(DBL_MAX) );
   Print("uint(DBL_MAX)= ", uint(DBL_MAX) );
Ou alors, c'est toujours la même chose.
 
fxsaber:
J'ai rempli une demande, même si j'en ai assez de le faire si souvent.
Réponse et fermeture immédiate

L'auteur de l'indicateur a délibérément codé le lien vers lui-même.

Vous pouvez soit interdire ce "hack", soit laisser à la conscience de celui qui l'utilise.

Jusqu'à présent, vous êtes la première personne à qui cette fonction empêche d'utiliser le terminal depuis plusieurs années.

Combien d'indicateurs peuvent être exécutés en mode veille et nous n'en avons aucune idée ? Il n'y a pas de contrôle du tout.

Je ne comprends pas vraiment le pathétique régulier de vos posts. Il est clair que nous ne parlons pas d'un problème massif ou grave.

1) Ce n'est que délibérément, consciemment, que vous pouvez écrire un indicateur avec le comportement spécifié. Qui vous fait écrire un tel code et exécuter un tel indicateur ? Ou bien exécutez-vous d'autres programmes sans connaître leur code ?

2) Il n'est pas plus malveillant que de nombreux autres indicateurs présentant des erreurs logiques moins évidentes.

3) Lorsque vous redémarrez le terminal, l'indicateur sera déchargé et ne repartira pas. Si vous lancez accidentellement un tel indicateur - redémarrez le terminal. Et ne le refaites pas.

Je devrais avoir la possibilité de me supprimer (l'indicateur) dans le cas où au moins une copie est lancée, même si elle a des paramètres d'entrée différents. Pour ce faire, j'avais besoin de comprendre la poignée elle-même. Malheureusement, à ce moment-là, je ne savais pas encore que c'était impossible dans MQL dans 100% des cas. J'ai donc décidé d'essayer un truc pas très malin.

J'ai parcouru toutes les poignées. S'il coïncide avec le hasard que j'ai écrit dans mon indicateur avant de le vérifier, cela signifie automatiquement que le handle m'appartient et que je peux me supprimer, si nécessaire.

C'est à partir de ces considérations qu'a été écrit un code aussi inoffensif, qui a provoqué une réaction aussi ambiguë, mais évidemment négative, de la part des développeurs. Tu vois, tu ne peux pas faire ça. Qu'avez-vous fait ? Eh bien, je lis la valeur de mon tampon à travers le CopyBuffer. C'est illégal ? !

Que la communauté sache que l'on peut créer de cette manière une exécution incontrôlée de n'importe quel code en arrière-plan, même sur le terminal sans graphiques. Voici un petit bout de chemin. Le fait de le considérer ou non comme un bogue est probablement une question de terminologie. Si j'ai bien compris, les promoteurs ne sont pas en mesure de changer quoi que ce soit à l'architecture ici. C'est pourquoi il y a une telle colère. Je ne peux pas expliquer cette réaction d'une autre manière.

Personne ne dira rien de toute façon. Un tel râteau serait bien reflété dans l'aide.

 
Если вы случайно запустили такой индикатор - redémarrer le terminal. Et ne le refaites pas.
Il n'y a aucun moyen de le savoir. Il n'y a pas moyen !
 
Dmytro Zelenskyy:
Ou c'est toujours la même chose.

Le type int a une taille de 4 octets. Le type double a une taille de 8 octets. Vous ne devez pas faire cela - essayer d'obtenir 4 octets à partir de 8 octets - vous risquez de vous retrouver avec un non-sens - surtout dans ce cas, lorsque la valeur DBL_MAX se trouve en dehors des valeurs int.

Si vous prenez le nombre double d=123456.1258 et essayez d'obtenir int à partir de celui-ci - alors le nombre fonctionnera, mais vous ne pouvez toujours pas le faire de cette façon.

 
Karputov Vladimir:

Le type int a une taille de 4 octets. Le type double a une taille de 8 octets. Vous ne devez pas faire cela - essayer d'obtenir 4 octets à partir de 8 octets - vous risquez de vous retrouver avec un non-sens - surtout dans ce cas, lorsque la valeur DBL_MAX se trouve en dehors des valeurs int.

Si vous prenez le nombre double d=123456.1258 et essayez d'obtenir int à partir de celui-ci, le nombre fonctionnera, mais vous ne pouvez toujours pas le faire.

Ok, comment convertir correctement un double en int en conservant le signe (le nombre n'a pas d'importance, s'il dépasse la limite, il faut le limiter en int).

 
Dmytro Zelenskyy:

OK, comment convertir correctement un double en int avec le signe intact (le nombre n'a pas d'importance, s'il est en dehors de la limite, il faut le limiter en int).

int

Le type entier int a une taille de 4 octets (32 bits). La valeur minimale est de -2 147 483 648, la valeur maximale est de 2 147 483 647. Sur cette base,

   int A=(int)2147483647.0;
   int B=(int)2147483646.2;
   int C=(int)2147483647.2;
   int D=(int)2147483648.0;
   Print("A: ",IntegerToString(A),", B: ",IntegerToString(B),", C: ",IntegerToString(C),", D: ",IntegerToString(D));

voir ce qui est renvoyé :

A: 2147483647, B: 2147483646, C: 2147483647, D: -2147483648

Je pense que le principe est clair.


 
Je vois. Merci.
Raison: