[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 346

 
excuses
 
Stepan241 >> :

Au début du script, vous écrivez

#property show_inputs

extern double Lot=0.1

Ensuite, lorsque le script est attaché à la fenêtre de symboles, une boîte de dialogue apparaît.

Je comprends. Mais ce n'est pas ce dont j'ai besoin. Avec ces commandes, une boîte de dialogue apparaîtra - avec les paramètres généraux de l'EA et les paramètres actuels du script, et j'ai demandé s'il n'existait pas une telle fonction, qui pourrait être utilisée pour sortir DO ONLY avec les paramètres du script en une seule fois.

 
Pouvez-vous me dire comment faire pour que tous les ordres ouverts se ferment à l'heure spécifiée ?
 
JackaLrus писал(а) >>

Je comprends. Mais ce n'est pas ce dont j'ai besoin. Avec ces commandes, une boîte de dialogue apparaîtra - avec les paramètres généraux de l'EA et les paramètres actuels du script, et j'ai demandé s'il n'y avait pas une telle fonction, qui pourrait être utilisée pour sortir DO ONLY avec les paramètres du script en une seule fois.

Seulement MetaEditor alors.

 
vik-777 >> :
Pourriez-vous m'indiquer comment fermer tous les ordres ouverts à une heure précise ?

si (HourTime[0]=12)_CloseAllOrder

Voir la fonction _CloseAllOrder à la page précédente ou celle d'avant.

 
Stepan241 >> :

si (HourTime[0]=12)_CloseAllOrder

Pour la fonction _CloseAllOrder elle-même, voir la dernière page ou la page précédente.

Merci, cette fonction est très pratique

 

Chers experts,

Veuillez me dire quelle est la raison de ce résultat :

gist :

int start()
{
//----
double c;
int q;
c=0.3/0.1;
q=c;
Print("c=",c," q=",q);
//----
return(0);
}

il imprime "c=3 q=2"

question : comment obtient-il deux sur trois ?

le fait est que, si je remplace 0,3 par 0,4 ou toute autre fraction, cela résout le problème comme prévu.

par exemple

int start()
{
//----
double c,v;
int q,w;
c=0.3/0.1;
v=0.4/0.1;
q=c;
w=v;
Print("c=",c," q=",q," v=",v," w=",w);
//----
return(0);
}

"c=3 q=2 v=4 w=4"

Question : comment obtient-il deux sur trois ?

essayer de compiler, peut-être que mon ordinateur ne sait pas compter (c'est juste idiot...)

 
mukata >> :

Chers experts,

Veuillez me dire quelle est la raison de ce résultat :

gist :

int start()
{
//----
double c;
int q;
c=0.3/0.1;
q=c;
Print("c=",c," q=",q);
//----
return(0);
}

il imprime "c=3 q=2"

question : comment obtient-il deux sur trois ?

le fait est que, si je remplace 0,3 par 0,4 ou toute autre fraction, cela résout le problème comme prévu.

par exemple

int start()
{
//----
double c,v;
int q,w;
c=0.3/0.1;
v=0.4/0.1;
q=c;
w=v;
Print("c=",c," q=",q," v=",v," w=",w);
//----
return(0);
}

"c=3 q=2 v=4 w=4"

Question : comment obtient-il deux sur trois ?

Essayez de le compiler, peut-être que mon ordinateur ne sait pas calculer (c'est idiot...)


Ce n'est pas un non-sens, juste une erreur d'arrondi courante lorsqu'on travaille avec des nombres réels.

Dans le premier cas, par exemple, c est égal à 2,999999999, la sortie est arrondie, c'est-à-dire 3, mais lors de l'affectation à un type d'entier, la partie fractionnaire est écartée.

 
splxgf >> :

Il ne s'agit pas d'un non-sens, mais d'erreurs d'arrondi courantes lorsqu'il s'agit de nombres réels.

Dans le premier cas, par exemple, c est égal à 2,99999999999...

comment 2.99999999 peut être 2.9999 ? 0.3/0.1=3 exactement, ce n'est pas comme si je divisais 1 par 3 et que ça devrait être 0.33333...

mais lors de l'assignation à un type entier, la partie fractionnaire est éliminée.

On attribue à un type entier une valeur c, qui est clairement égale à trois, sans aucune partie fractionnaire. Il n'y a rien à écarter...

La réponse est 100% fausse.

d'autres options ?

 
mukata >> :


Je ne vois pas comment 2.9999 peut être 2.9999 ? 0.3/0.1=3 même, ce n'est pas comme si je divisais 1 par 3 et que ça devrait être 0.33333...


Il ne s'agit que d'une apparence exacte, tandis que le dernier bit peut prendre des valeurs différentes. C'est-à-dire 2,9999, 3 ou 3,00000001.


Pour éviter de tels malentendus, MQL dispose de la fonction NormalizeDouble().