[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 80

 
drknn:
Peut-être que la valeur se termine par un zéro et que ce dernier est simplement écarté dans le processus de normalisation ? Rejeté parce que l'entrée 0.1 est équivalente à 0.10 et qu'il vaut mieux rejeter le zéro ?

peu probable, à la main j'ai regardé la valeur de la ligne au point de la dernière barre, il n'y avait pas de zéro... et dans certains cas la valeur a été exactement convertie au 4ème chiffre, parfois au 3ème. car le chiffre de queue était >5
 
drknn:


Ça ne marche pas( ça renvoie une valeur correcte à la chaîne, mais la variable est pleine de conneries, 3 chiffres ou 4.

Y a-t-il un moyen d'obtenir cette valeur correctement à partir de la chaîne de caractères ?

 
NameLess:


Ca ne marche pas(( la chaîne renvoie une valeur correcte mais la variable est pleine de conneries, 3 chiffres ou 4.

Existe-t-il un moyen d'obtenir correctement cette valeur à partir de la chaîne de caractères ?


Vous pouvez créer une dll-case et arrondir dans celle-ci. J'ai dû faire une telle chose pour simplement éliminer la partie fractionnaire d' un nombre. Ce qui n'est pas clair ici - le code indicateur est-il conçu pour cinq chiffres ? La réponse à cette question ne peut probablement être donnée que par un développeur. Ou créez simplement votre propre indicateur.
 
drknn:

Vous pouvez faire un dll et un rond dedans. J'ai dû faire cela pour simplement éliminer la partie fractionnaire d'un nombre. Ce qui n'est pas clair ici - le code indicateur est-il conçu pour cinq chiffres ? La réponse à cette question ne peut probablement être donnée que par un développeur. Ou créez simplement votre propre indicateur.

J'ai vérifié iMA et il semble être ok. Pour être honnête, je ne sais pas ce qui le cause.
 
NameLess:

J'ai vu iMA et cela semble correct. Pour être honnête, je ne comprends pas pourquoi cela arrive, mais c'est le cas. Je n'ai aucune idée de ce qu'il faut faire avec les dlls, pourriez-vous au moins m'envoyer un lien à lire ?


Je n'ai aucune idée de l'endroit où trouver le lien pour lire le contenu de la dll-case. Ou essayez de mettre une valeur dans MQL4 et faites une fonction qui ne prendra que X caractères de la chaîne. Par exemple, prix = 1.25254130 - cette valeur a été introduite dans la chaîne. La fonction doit parcourir les 7 premiers caractères et retourner exactement ceux-là - c'est-à-dire 1,2525254. On boucle simplement cette valeur dans une nouvelle chaîne, chaîne par chaîne, comme une perle. Ensuite, convertissez-le en un double et renvoyez-le à partir du sous-programme.

A propos de la dll - regardez quelque chose comme ceci sur ce forum https://www.mql5.com/ru/forum/124088

 
drknn:


C'est déjà un problème - vous devez avoir au moins une connaissance superficielle d'un langage de programmation. Ou essayez de prendre la valeur d'une chaîne de caractères et créez une fonction qui ne retire que X caractères de la chaîne. Par exemple, prix = 1,25254130 - cette valeur a été saisie dans la chaîne de caractères. La fonction doit parcourir les 7 premiers caractères et retourner exactement ceux-là - c'est-à-dire 1,2525254. On boucle simplement cette valeur dans une nouvelle chaîne, chaîne par chaîne, comme une perle. Ensuite, convertissez-le en un double et renvoyez-le à partir du sous-programme.

A propos de la dll - voir quelque chose comme ça sur ce forum https://www.mql5.com/ru/forum/124088


je sais, pas en profondeur, mais dans aucun langage du tout)))) oui la méthode m'est familière. merci pour le conseil. c'est juste que je n'ai jamais eu affaire aux dlls, car je n'ai jamais fait de programmation professionnellement.

Pour être honnête, je suis confus, car le problème n'est pas du tout logique, je ne peux pas obtenir une valeur de l'indicateur, ou plutôt je peux, mais seulement vers une chaîne.

 

Veuillez m'indiquer comment permettre une exécution unique d'une condition dans un EA (par exemple l'ouverture d'un ordre), plutôt que de la répéter à chaque tick. Dans ce cas, lors de la fermeture d'une position, l'EA ne doit pas en ouvrir une nouvelle. J'ai essayé de l'imaginer, mais ça ne fonctionne pas comme prévu.

extern bool    BUY         = true;
extern int     Magic       = 0;
extern double  Lot         = 0.1;
extern int     takeprofit  = 0;
extern int     stoploss    = 0;
extern int     slippage    = 3; 
double SL,TP;
int init(){
    return(0);
  }
int start()
{
   if (BUY)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy");
   }

return(0);
}
void OPENORDER(string ord)
{
int error;
 while (true)
 { error=true;
 if (ord=="Buy") error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"",Magic,0){BUY = false;}
}
return;
}
Je vous remercie d'avance.


 
nemo811:

Veuillez m'indiquer comment permettre une exécution unique d'une condition dans un EA (par exemple l'ouverture d'un ordre), plutôt que de la répéter à chaque tick. Dans ce cas, lors de la fermeture d'une position, l'EA ne doit pas en ouvrir une nouvelle. J'ai essayé de l'imaginer, mais ça ne fonctionne pas comme prévu.

Je vous remercie d'avance.



J'ai résolu ce problème en mettant un drapeau dans la condition avant toute action (ouverture dans ce cas) ; à l'intérieur de la condition, après l'ouverture d'un ordre, le drapeau change de valeur et, respectivement, au prochain tick, le programme n'entrera pas dans cette condition avec l'ouverture de l'ordre. Si le processus est automatisé, alors vous pouvez mettre une fonction qui efface tous les drapeaux quand il n'y a pas de positions ouvertes, sinon l'EA n'ouvrira l'ordre qu'une seule fois et s'éteindra, parce que le drapeau ne changera pas de valeur.
 
NameLess:

J'ai résolu ce problème en plaçant un drapeau dans la condition avant toute action (dans ce cas, l'ouverture), à l'intérieur de la condition après l'ouverture d'un ordre le drapeau change la valeur et, respectivement, sur le prochain tick le programme n'entrera pas dans cette condition avec l'ouverture d'un ordre. Si le processus est automatisé, alors vous pouvez utiliser une fonction qui effacerait tous les drapeaux au moment de l'absence de positions ouvertes, sinon l'EA n'ouvrira l'ordre qu'une fois et ensuite s'éteindra, parce que le drapeau ne changera pas la valeur.

Veuillez me donner un exemple. Je suis en train d'apprendre, et je n'ai pas encore été confronté à la tâche de mettre un drapeau. )
 
nemo811:

Veuillez me donner un exemple. Je suis en train d'apprendre, et je n'ai pas encore été confronté à la tâche de mettre en place un drapeau. )

Je ne suis pas un pro moi-même, je vous explique simplement comment j'ai résolu le problème. Ce n'est pas un petit code et il vous faudra plus de temps pour le comprendre que pour trouver l'idée à partir de zéro))).
Raison: