Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1051

 
Il est clair que l'offre a vieilli, mais j'espérais que cette conception me permettrait d'ouvrir plusieurs positions sur la barre actuelle avec des prix d'ouverture d 'offre différents. Et dans le testeur, cela fonctionne bien, mais sur la démo, il ouvre une position et se ferme immédiatement. comment l'éviter n'est pas clair.
 
rapid_minus:
Je ne comprends pas où se trouve la réponse. Je veux dire ceci : "La fonction intègre la vérification de l'état du drapeau d'arrêt du conseiller expert toutes les 0,1 seconde" ? Si c'est le cas, comment peut-on supprimer ce drapeau ?

Non, si vous aviez lu jusqu'au bout, vous auriez vu la réponse à la question...

Note

La fonction Sleep() ne peut pas être appelée par des indicateurs personnalisés, car les indicateurs sont exécutés dans le thread de l'interface et ne doivent pas le ralentir. La fonction comporte une vérification intégrée de l'état du drapeau d'arrêt de l'expert toutes les 0,1 seconde. La fonction Sleep() du testeur de stratégie ne provoque aucun retard.




 
LRA:

Commencez par coller ceci à l'extrémité de l'indicateur. Une fois que vous voyez la marque sur l'écran, trouvez comment y mettre ce que vous voulez. Ici, vous recevez des conseils, mais vous devez le faire vous-même.

désolé, je ne sais pas quoi faire ensuite(
int Nombre=25 ;

si(H==H1&&H1==H2)
{if(J == true) {ObjectCreate(PatternText[shift],
OBJ_TEXT, 0, Time[shift1], High[shift1] + Range*5) ;
ObjectSetText(PatternText[shift], "pattern", 10, "Arial", Red) ;
downArrow[shift1] = High[shift1] + Range*0.5;}if(setalert == 0 && Alert == true) {pattern = "pattern";setalert = 1;}}




if(ObjectFind(0, "Text")<0) // vérifier l'étiquette de sortie
{
ObjectCreate("Text", OBJ_LABEL, 0, 0, 0) ; // création
ObjectSet("Text", OBJPROP_CORNER, 1) ; // Coin supérieur droit
ObjectSet("Text", OBJPROP_XDISTANCE, 10) ; //X
ObjectSet("Text", OBJPROP_YDISTANCE, 10) ; //Y
}
ObjectSetText("Text", string(number), 14, "Arial",Black) ; // Sortie vers l'étiquette

}
retour(0) ;
}
 
AlexeyVik:    tu m'as surpris... mathlog10

Le problème est résolu d'une manière beaucoup plus simple.

C'est certainement plus facile avec lui..... Peut-être qu'il était absent à l'époque, ou perdu... Dans mon cher TurboPascal, c'est définitivement absent. J'ai utilisé le logarithme pour le faire.
 
Merci !
 
LRA:
C'est certainement plus facile avec lui.... Peut-être qu'il était absent à ce moment-là, ou qu'il s'est perdu... C'est définitivement absent de mon TurboPascal préféré. J'avais l'habitude de faire des multiplications logarithmiques.

Pendant un certain temps après le passage à la mise à jour de mql4, il y avait un bogue dans la documentation. Cliquer sur MathLog10 a ouvert l'aide de MathLog

J'ai écrit à Servicedesk à ce sujet, mais ils ont corrigé la moitié du problème et laissé l'autre moitié...

 
J'ai un indicateur qui répète entièrement les barres de la fenêtre principale avec la même échelle en prix et en temps. Question : existe-t-il un CHARTSET CHARTGET pour que la fenêtre de l'indicateur soit mise à l'échelle de la même manière que dans la fenêtre principale lorsque vous faites défiler le graphique ?
 
AlexeyVik:

log(10) n'est pas vraiment 1, mais le fait que mql n'ait pas de logarithme décimal me surprend...

Qu'est-ce que c'est alors ? https://docs.mql4.com/ru/math/mathlog10 bien qu'il y ait une erreur dans le texte.

La question est beaucoup plus facile à résoudre.

Je vais répondre dès le dernier message.

Que sont les logarithmes, je comprends, je n'ai pas compris à quoi ça sert dans ce code, mais après votre correspondance et celle de ce camarade, j'ai compris que c'est pour les décimales, n'est-ce pas ?

Cela ne pourrait-il pas être fait d'une autre manière ? Pourquoi ce code(int) ? Pourquoi votre façon de faire est-elle meilleure que la ligne que j'ai fournie ?))

merci beaucoup)

 
Igemon:

Je réponds directement au dernier message.

Je comprends ce que sont les logarithmes, je ne comprenais pas pourquoi dans ce code, mais après votre correspondance et celle de ce camarade, j'ai compris que c'est pour déterminer le nombre de décimales, non ?

Cela ne pourrait-il pas être fait d'une autre manière ? Pourquoi en ai-je besoin dans le code(int) ? Pourquoi votre façon de faire est-elle meilleure que la ligne que j'ai fournie ?))

merci beaucoup)

Oui, pour déterminer le nombre de décimales. Ceci est nécessaire pour normaliser la valeur du lot si le lot est défini par une formule et que le résultat peut avoir plus de décimales que celles autorisées. Dans certains cas, vous pouvez vous contenter de mettre un deux, mais vous risquez alors de rencontrer une erreur, il est donc préférable de le définir par programme.

Il existe une autre façon de procéder. Il y a deux façons de résoudre ce problème : la première consiste à convertir le nombre en chaîne de caractères, à définir la longueur de la chaîne, à trouver l'indice du caractère point et la différence entre la longueur de la chaîne et l'indice du caractère point sera évaluée comme partie fractionnaire du nombre. Et sur le forum mql5, vous pouvez trouver plusieurs variantes, certaines plus fines, d'autres plus faciles.

Voici une autre variante.

int fun(double ch)
{
 int i = 0;
 double res = 0, ostatok = fmod(ch, 1);
 while(ostatok != 0 && i < 16) // число взято от фонаря для прерывания зацикленности
  {
   res = ostatok * 10;
   ostatok = NormalizeDouble(fmod(res, 1), 8); // Вроде 8 максимально
   i++;
  }
 return(i);
}/*******************************************************************/

Cette fonction définit le nombre de décimales d'un nombre quelconque.

L'algorithme est outrageusement simple, nous devrions considérer combien de fois le résidu de la division par 1 sera supérieur à zéro.

Je n'ai pas dit que ma façon de faire était meilleure. Chaque programmeur écrit de la manière dont il voit la solution du problème.

Un nombre de type double, même s'il n'a pas de chiffres significatifs dans la partie fractionnaire est comme, par exemple, 2,0, ce qui n'est pas tout à fait correct, et afin d'obtenir un nombre entier normal, il est converti en type int implicitement.

 

Note

La fonction Sleep() ne peut pas être appelée par des indicateurs personnalisés, car les indicateurs sont exécutés dans le thread de l'interface et ne doivent pas le ralentir. La fonction comporte une vérification intégrée de l'état du drapeau d'arrêt de l'expert toutes les 0,1 seconde. La fonction Sleep() du testeur de stratégie ne provoque aucun retard.

Tout le monde est si intelligent que c'est effrayant de les regarder. J'ai écrit que le glissement était ignoré dans le testeur de stratégie (ce qui est clair), mais toutes les positions sont ouvertes comme je l'ai spécifié. Mais sur la fiche de démonstration ne fonctionne pas, et la position n'est ouverte qu'une seule, et qui se ferme immédiatement. C'est le problème que je ne peux pas résoudre.