Discussion de l'article "Indicateurs personnalisés dans MQL5 pour débutants" - page 2

 
serg7771959:

Nicholas !

Pouvez-vous me dire pourquoi lorsque j'essaie de remplir un tableau d'indicateurs dans une boucle en utilisant la formule Mass[ i ]= Mass[ i+1]+A ; où A est une variable, la compilation se déroule sans erreur, mais lorsque je rejoins la fenêtre, j'obtiens le message array out of range (tableau hors de portée) ?


Parce que la boucle doit être faite en tenant compte de la cellule où la dernière entrée sera faite. Si la taille du tableau Mass[], disons, est de 10, la boucle va de zéro à 9 (c'est l'indice de la dernière cellule du tableau), puis à i==9, on essaie d'écrire dans la cellule d'indice 9+1. Le tableau n'a pas de cellule 10. On obtient donc une sortie en dehors du tableau.
 
Nous avons besoin de plus de tutoriels comme celui-ci !!!
 

Nikolay, merci. C'est un excellent tutoriel !
Mais je pense que la variable

const int begin

aura toujours une valeur nulle dans le code. Est-ce important pour le calcul ?

 
igorsds:

Nikolay, merci. C'est un excellent tutoriel !
Mais je pense que la variable

aura toujours une valeur nulle dans le code. Est-ce important pour le calcul ?

La valeur de "begin" sera différente en fonction de l'indicateur utilisé. Si vous utilisez l'indicateur RSI, la valeur de"begin" sera de 14, par exemple.

 

Si vous essayez de compiler pour la première fois, il se peut que vous obteniez une erreur de mémoire tampon. Veuillez donc modifier la quantité de tampons :

#property indicator_buffers 2

Plus tard, vous pourrez revenir à 1 (un) tampon :

#property indicator_buffers 1

 
Comment combiner avec fibo zigzag
 

Je ne comprends pas. Supposons que

rates_total == MA_Period - 1

et qu'il s'agit du premier appel de la fonction, alors

prev_calculated == 0

et aussi begin == 0

alors la condition dans le premier if(rates_total < MA_Period - 1 + begin) est évaluée à faux

alors

first = MA_Period - 1 serait exécuté

mais alors AUCUN CALCUL parce que la condition dans la première boucle for évalue à false.

Je pense que la première condition if devrait être

if( rates_total < MA_Period + begin )

Ai-je oublié quelque chose ?

 

Et encore une fois. Pourquoi devrais-je commencer à calculer à partir de la barre avec le numéro (prev_calculated - 1), si j'ai déjà calculé l'indicateur prev_calculated fois ?

Par exemple, j'ai calculé l'indicateur 5 fois pour les barres 0, 1, 2, 3 et 4. Je n'ai pas besoin de le calculer à nouveau sur la barre 4. Je dois continuer à partir de la barre 5.

 
LRDPRDX #:

Et encore une fois. Pourquoi devrais-je commencer à calculer à partir de la barre avec le numéro (prev_calculated - 1), si j'ai déjà calculé l'indicateur prev_calculated plusieurs fois ?

Par exemple, j'ai calculé l'indicateur 5 fois pour les barres 0, 1, 2, 3 et 4. Je n'ai pas besoin de le calculer à nouveau sur la barre 4. Je dois continuer à partir de la barre 5.

D'accord. Je pense que je ne suis pas correct ici, parce que la 4ème barre peut avoir été modifiée depuis mon dernier calcul. Donc le (prev_calculated - 1) semble correct.
 
Les escroqueries sont à l'ordre du jour. Bravi