[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 670

 
artmedia70:

Quelle est la probabilité qu'un nouveau tick arrive avant que tous les calculs de l'EA actuel soient terminés? Il me semble que ce n'est que dans ce cas que les données deviennent anciennes et non pertinentes.

J'ai vérifié combien de temps votre code compte - moi aussi, j'ai récemment eu des doutes, la vitesse de calcul de MT4 est-elle suffisante pour mon EA, il s'est avéré qu'elle est suffisante pour l'instant, mon code prend environ 18 ms, c'est-à-dire qu'en 1 seconde vous êtes vérifié 55 fois, les ticks vont de 10 à 70 par minute, si plus de 50 ticks par minute, cela signifie qu'il y a une bougie.

essayez de voir comment votre code fonctionne, comme ceci

int tik,barM1


int init(){
   barM1  = Bars;
   tik = 0;

return (0);
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start=GetTickCount();
 

 // некие серьёзные вычисления...


tik++;
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

int counted  = Bars;
if (counted != barM1) {
print("за один бар было принято ",tik, "тиков" )
tik=0;
barM1=counted;
}

voici l'indicateur qui compte les ticks - pour la réconciliation

Eh bien, si vous avez un prix d'ouverture, désolé de l'avoir manqué.

OpnPrice =iOpen(NULL,PERIOD_M5,0) ; vous pouvez changer seulement à une barre fermée - le code ci-dessus avec la condition if (counted != barM1) {

Dossiers :
 

Comment changer le nombre de chiffres après le point décimal de l'indicateur iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) lors du calcul dans le corps expert ? Le résultat est affiché avec 4 (c'est-à-dire 0,0001), alors qu'il devrait être affiché avec 5 (c'est-à-dire 0,00012) pour une analyse précise. Et le terminal MT4 affiche des valeurs à 5 chiffres dans la fenêtre de l'indicateur sur le graphique.

 
L'opérateur NormalizeDouble() résoudra vos problèmes.
 
Roger:
L'opérateur NormalizeDouble() résoudra vos problèmes.


Par exemple, NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) donnera le résultat souhaité de 0,00012 ?

P.S. Ajouté et testé - rien. La sortie est juste 0.00010, soit les mêmes 4 bits...

 

Non, pas tout à fait, Roger.

IndicatorDigits() voir Boris. Mais il doit être inséré dans l'indicateur lui-même, car il s'y référera, et non à l'EA.

P.S. Autre chose : cette fonction ne convient qu'à l'indicateur pour lequel vous avez le code. Il sera alors possible de l'appeler en utilisant iCustom().

Et pour ceux qui sont appelés "standard" comme iMACD(), je ne connais pas la bonne solution.

 
pathfinder1:

Ainsi, le résultat de NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) sera le 0.00000 souhaité ?

Oui, c'est vrai. La phrase clé se trouvait dans le calcul dans le corps de l'EA ? Et apparemment avec l'indicateur standard c'est impossible (((
 
pathfinder1:

Comment changer le nombre de chiffres après le point décimal de l'indicateur iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) lors du calcul dans le corps expert ? Le résultat est affiché avec 4 (c'est-à-dire 0,0001), alors qu'il devrait être affiché avec 5 (c'est-à-dire 0,00012) pour une analyse précise. Et le terminal MT4 affiche des valeurs à 5 chiffres dans la fenêtre de l'indicateur sur le graphique.

Vous ne devez rien changer, la précision dans les indicateurs standards est réglée au maximum (jusqu'à 8 chiffres), vous avez fait une mauvaise conclusion sur la précision de sortie des données car Print() sort jusqu'à 4 chiffres par défaut, dans les calculs (dans le ventre des Expert Advisors par exemple) la précision maximale est utilisée, vous devez sortir le double par DoubleToStr() par exemple:

Print("iMACD ", DoubleToStr(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0), 8));

et nous obtenons cette sortie :

 
ToLik_SRGV:

Vous n'avez pas besoin de changer quoi que ce soit, dans les indicateurs standards la précision est réglée au maximum (jusqu'à 8 chiffres), vous avez fait une conclusion erronée sur la précision de sortie des données parce que Print() sort jusqu'à 4 chiffres par défaut, dans les calculs (dans le ventre des Expert Advisors par exemple) la précision maximale est utilisée, pour voir cela vous devez sortir le double via DoubleToStr(), comme exemple :

et nous obtenons une telle sortie :


Bien, bien, bien ! ! ! Anatoly - grand bravo, j'étais en train de m'accrocher à ça.

La vérité de la vie est "une tête c'est bien, mais deux c'est mieux" (citation)

 
ToLik_SRGV:

Il n'est pas nécessaire de changer quoi que ce soit, les indicateurs standard sont réglés avec une précision maximale (jusqu'à 8 chiffres).


C'est vrai, j'avais le même soupçon :)
 
Comme cela a souvent été le cas - la vérité est à la surface)) Je reconnais ma faute.