Indicateurs: Meilleur volume - page 2

oomeysh #:
J'ai appliqué cet indicateur sur mt5, mais rien ne s'affiche... haut
Allez dans les paramètres d'entrée de l'indicateur et changez le type de volume utilisé de Real volume à Tick Volume.

J'ai soumis cela à Claude Sonnet 5.5 et voici ce qu'il a répondu :

Les points positifs

  • La disposition des tampons est correcte : 3 tampons pour 2 graphiques (données de l'histogramme + index des couleurs, plus la courbe de moyenne mobile).
  • La liste des couleurs correspond à la palette classique de Better Volume. Les indices de 0 à 5 correspondent aux commentaires.
  • Les vérifications d’égalité telles que IntTimesRange == IntMaxTimesRange sont fiables ici. La valeur maximale de la fenêtre est calculée à l’aide de l’expression identique, de sorte que les valeurs de type double correspondent exactement lorsque la barre actuelle est la plus haute.
  • Le recalcul à partir de prev_calculated - 1 met correctement à jour la barre en cours de formation.

Bugs, les plus graves en premier

1. Plantage dû à une valeur hors limites sur les historiques courts (lignes 63 à 69). La limite «
» n’est plafonnée que lors du premier appel. Supposons qu’un graphique hebdomadaire ou mensuel comporte 50 barres et que « minbars » soit égal à 100. Le premier appel ignore la boucle et renvoie `rates_total`. Au tick suivant, `prev_calculated` vaut 50, la limite est donc de 49. La boucle de la moyenne mobile interprète alors `n = -1` et l’indicateur plante avec le message «tableau hors limites ». Correction :

mql5

if(rates_total <= minbars) return(0); limit = (prev_calculated == 0) ? minbars : MathMax(prev_calculated - 1, minbars);

2. Le « Climax Churn » (magenta) est perdu sur les barres baissières (lignes 116 à 121).
Le bloc « Climax Sell » s'exécute après « Climax Churn » et le remplace. Ainsi, une barre qui est à la fois une barre « volume-range climax » et une barre « churn » n’apparaît en magenta que si elle a clôturé au-dessus du point médian. Si elle a clôturé en dessous, elle s’affiche en blanc. La priorité prévue est que le « climax churn » l’emporte sur tout le reste.

3. La « vérification supplémentaire de churn » ne peut jamais se déclencher (lignes 123 à 125).
IntCandleRange > IntMiddlePrice * 2 se traduit par haut - bas > haut + bas, ce qui n’est vrai que si bas < 0. Pour tout instrument normal, cette condition est du code mort. L’intention était probablement une comparaison par rapport à une fourchette moyenne ou similaire ; il faut donc la redéfinir plutôt que de simplement la corriger.

4. La valeur codée en dur 20 ignore InpLookBack (ligne 105).
Tout le reste utilise InpLookBack, mais le test de faible volume utilise i - 19, 20. Toute valeur autre que 20 rend les classes incohérentes. Si InpLookBack est défini sur une valeur supérieure à 20, la détection de faible volume ne prend toujours en compte que 20 barres.

5. Les données de volume nul déclenchent de faux signaux, et la valeur par défaut constitue un piège.

  • La valeur par défaut est VOLUME_REAL, qui est égale à 0 sur la plupart des symboles Forex et CFD.
  • Lorsque le volume est entièrement nul, les conditions IntTimesRange (0) == IntMaxTimesRange (0) et IntDividedRange (0) == IntMaxDividedRange (0) sont toutes deux vraies. Le graphique se remplit alors de couleurs indiquant des pics et des fluctuations de pic.
  • Protégez les indicateurs avec > 0 et utilisez VOLUME_TICK par défaut.

6. Aucune validation des entrées dans OnInit.
InpMAPeriod <= 0 provoque une division par zéro. InpLookBack <= 0 perturbe la logique de la fenêtre. Renvoyer INIT_PARAMETERS_INCORRECT dans ces cas.

Points mineurs

  • NormalizeDouble(..., 0) arrondit la moyenne mobile (MA) à un entier, ce qui déforme la ligne sur les symboles à faible volume. Cette fonction n'est pas nécessaire.
  • Les barres antérieures aux « minbars » ne sont jamais écrites, et PLOT_DRAW_BEGIN n’est pas défini. Définissez-le et initialisez les tampons afin que les premières barres n’affichent pas de données erronées.
  • La moyenne mobile peut commencer à MAPeriod - 1, et non à MAPeriod. Utiliser une somme courante plutôt que de recalculer la somme de 100 barres à chaque barre serait également plus rapide.
  • Les expressions ternaires répétées de type « InpVolumeType == VOLUME_TICK ? ... : ... » seraient plus claires si elles étaient regroupées en une seule petite fonction d'aide.


    Version corrigée par Claude et traduite en anglais ci-jointe. (Cliquez sur « Aller à la discussion » pour voir le fichier)
Dossiers :