[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 82

 
wolf05632:

Merci, mais ça ne marche pas pour moi. Je n'ai pas besoin d'une compensation. J'ai écrit plus haut. Supposons que pour la première bougie buffer[1]=Haut[1], pour la troisième buffer[3]=Haut[3] et pour la deuxième nous devons calculer : buffer[2]=MathAbs(Higth[1]-Hight[3])/2 et obtenir ce que je veux dans l'image.
Et qu'est-ce qui ne vous plaît pas dans ma variante ? :)) C'est beaucoup plus simple et moins compliqué. Ou vous avez besoin, que dans un tampon sont restées les valeurs sur chaque barre ?
 

wolf05632:

SZY : Comment faire pour qu'un indicateur fonctionne, c'est-à-dire qu'il effectue des calculs (il FONCTIONNE, il n'est pas visible) uniquement sur une certaine échelle de temps (H1) ?

Vous devez lier le calcul non pas à l'intervalle de temps actuel, mais à H1 ! :)) Par exemple, n'utilisez pas les tableaux Open[], Close[], High[], Low[], Time[], mais les fonctions iOpen(), iClose(), iHigh(), iLow(), iTime() avec les paramètres appropriés...
 
MaxZ:
Pourquoi n'avez-vous pas aimé ma version ? :)) Beaucoup plus simple et moins de calculs. Ou voulez-vous garder les valeurs dans le tampon à chaque barre ?

J'ai essayé, merci, mais ça n'a pas marché. Je n'ai pas pu le faire apparaître sur le graphique. J'ai peut-être mal compris quelque chose. La seule chose que j'ai comprise est l'essentiel : les éléments du tampon doivent aller de façon séquentielle (1,2,3...), c'est-à-dire sans vide (1,3,5...) et CHAQUE ! élément du tampon doit avoir une valeur assignée! :-)
 

Roman, merci pour la réponse..... Malheureusement, je ne comprends toujours pas une chose. Dans le manuel, https://book.mql4.com/ru/basics/expressions, sous "Approche par type". Option 4.1. Calcul du résultat d'un type d'entier

et la variante 4.2 . Une situation similaire se produit si nous cherchons un résultat comme valeur d'un type réel", la même formule est donnée, mais dans un cas, le type de la variable F est désigné comme int

   double A = 2.0;                      // Количество карандашей у Васи
   int    Y = 3;                        // Количество ответов Пети
   int    F = A + Y;                    // Общее количество

et dans le second exemple, la variable est double

   double A = 2.0;                   // Количество карандашей у Васи
   int    Y = 3;                     // Количество ответов Пети
   double F = A + Y;                 // Общее количество

Malheureusement, je ne comprends toujours pas la logique de la conversion. Si dans la première variante il est clair pourquoi int est assigné à la variable F (c'est-à-dire, selon la règle de la conversion implicite de type), alors pourquoi double.... est assigné dans la deuxième variante m'embrouille totalement.

Veuillez clarifier ce que j'ai pu manquer dans mes explications ici ?

Merci d'avance.

 
wolf05632:

J'ai essayé, merci, mais ça n'a pas marché. Il n'y avait rien sur le graphique. J'ai peut-être mal compris quelque chose ?

Avez-vous copié l'ensemble du code ou seulement ce qui se trouvait dans la fonction start() ? C'est important !

wolf05632:

La seule chose que j'ai comprise est la plus importante : les éléments du tampon doivent aller les uns après les autres (1,2,3...), c'est-à-dire sans vide (1,3,5...) et CHAQUE ! élément du tampon doit avoir une valeur qui lui est attribuée ! :-)
Vous vous trompez ! :)) Par exemple, le zig-zag n'a pas tous les éléments du tampon remplis. De plus, il n'est pas nécessaire de remplir tous les éléments du tampon pour les icônes.
 
Geowind64:

Roman, merci pour la réponse..... Malheureusement, je ne comprends toujours pas une chose. Dans le manuel, https://book.mql4.com/ru/basics/expressions, sous "Adduction de type". Option 4.1. Calcul du résultat d'un type d'entier

et la variante 4.2 . Une situation similaire se produit lorsque l'on cherche un résultat en tant que valeur d'un type réel", la même formule est donnée, mais dans un cas, le type de la variable F est dénoté comme étant int.

et dans le deuxième exemple, la variable est déjà un double

Malheureusement, je ne comprends toujours pas la logique de la conversion. Si dans la première variante il est clair pourquoi int est assigné à la variable F (c'est-à-dire, selon la règle de la conversion implicite de type), alors pourquoi dans la deuxième variante ils ont assigné double.... m'a complètement désorienté.

Veuillez expliquer ce que j'ai pu manquer dans mon explication.

Merci d'avance.



n


Le type interanger est un type double, le type de variable double a une gamme plus large, il n'est donc pas possible que les variables dans une expression "aient la possibilité" d'être de types différents, et le résultat est une variable qui a une gamme plus étroite de valeurs acceptées, dans ce cas, le type interanger. C'est-à-dire que si au moins une variable dans une expression est de type duble, le résultat doit et peut également être dans la gamme duble, sinon il y aura une erreur de compilation - inadéquation de type.

Veuillez voir ici pour plus de détails.

 
Roman.:


Integer est un type double, et les variables doubles ont une portée plus large, il n'est donc pas possible que les variables d'une expression "aient la possibilité" d'être de types différents, et le résultat est une variable qui a une gamme plus étroite de valeurs acceptées, dans ce cas, le type integer. C'est-à-dire que si au moins une variable dans une expression est de type duble, le résultat doit et peut aussi être dans la gamme duble, sinon il y aura une erreur de compilation - inadéquation de type.

Pour plus de détails, voir ici.


J'utilise souvent la conversion implicite des types. Mais je dois utiliser des parenthèses inutiles.
 

Les gars, que signifie #INF - est-il en dehors de la plage autorisée du double ? Voir la deuxième ligne en partant du haut (elle compte le produit du double TWR, c'est-à-dire que sa valeur précédente est multipliée par la suivante). Quelle est la manière correcte de compter ces valeurs prises par la variable TWR ?

 
Geowind64:

Si vous lisez attentivement cette section du manuel, vous verrez que vous devez d'abord examiner l'expression à gauche de l'affectation "=" :

   A + Y

Selon la règle :

  • si le type de l'expression à droite du signe d'affectation n'est pas le même que le type de la variable à gauche du signe d'affectation, alors la valeur de l'expression est convertie en type de la variable à gauche du signe d'affectation ; ceci est appelé une conversion de type cible ;

A est une variable de type double à gauche, et donc la valeur de A+Y est un nombre de type double.

Ensuite, faites attention au type de variable à laquelle l'expression est affectée.

Dans le premier cas : "d'abord le type de l'expression A+Y sera converti en type int (selon la règle de calcul des entiers), et ensuite ce résultat deviendra la valeur de la variable entière F".

Dans le second cas : "le type cible de la variable F (à gauche du signe de l'opération d'affectation), dans ce cas le type double, est le même que le type double de l'expression A+Y, donc aucune conversion du type cible ne se produit".

Verstehen ? :)))

 
Roman.:

Les gars, que signifie #INF - est-il en dehors de la plage autorisée du double ? Voir la deuxième ligne en partant du haut (elle compte le produit du double TWR, c'est-à-dire que sa valeur précédente est multipliée par la suivante). Comment compter correctement LES valeurs prises par la variable TWR ?

En général, INFINITY (INF en abrégé ) est l'infini ! :)) Oui, il s'avère que le double manque de puissance (mémoire) pour stocker un nombre aussi important.

Et comment calculer correctement, je ne peux que deviner... Créer un type propre, conditionnellement : stocker dans une variable supplémentaire la capacité en chiffres, et multiplier en double par 10^n, où n est la capacité en chiffres. Mais dans ce cas, la précision est perdue, et je vois que votre précision est de plus en plus mauvaise...

Mais il est peut-être plus simple de modifier la logique des calculs ? :))) Ou peut-être qu'il y a une erreur quelque part.

Raison: