Indicateurs: DRAW_FILLING

 

DRAW_FILLING:

Le style de dessin DRAW_FILLING trace la zone remplie entre les valeurs de deux tampons indicateurs. En fait, il trace deux lignes et remplit la zone entre elles avec la couleur spécifiée.

DRAW_FILLING

Auteur : MetaQuotes

 

J'ai essayé d'écrire mon propre indicateur en utilisant le code publié et la propriété de dessin DRAW_FILLING.

Mais j'ai des problèmes avec le collage de sections dessinées voisines séparées par des valeurs vides.

Si deux sections dessinées apparaissent dans une fenêtre, alors malgré le fait qu'elles soient séparées par une section d'indicateur avec la valeur EMPTY_VALUE, cette section vide est toujours dessinée avec les valeurs des sections voisines.


J'ai repris ce cas car les codes publiés pour l'indicateur de sessions ne me conviennent pas, j'ai donc décidé de tout réécrire.

Voici une ébauche.

Dossiers :
Session.mq5  4 kb
 

Je ne peux proposer que cette option


Dossiers :
Session.mq5  4 kb
 
Rosh:

Je ne peux proposer que cette option


Merci, mais un peu moins bien, je m'arrêterai peut-être sur les objets graphiques.

 
Urain:

Merci, mais un petit peu ne suffira pas, je m'arrêterai sur les objets graphiques.

Comme le dessin dans le style DRAW_FILLING se fait avec des polygones, on ne peut pas obtenir de beaux rectangles, malheureusement.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Rosh:
Étant donné que le dessin de style DRAW_FILLING est réalisé avec des polygones, vous ne pouvez malheureusement pas obtenir de beaux rectangles.
Cette méthode n'est pas adaptée à cet usage, ce qui ne la rend pas mauvaise pour d'autres usages.
 

J'ai rencontré le même problème (collage sur des zones de valeurs vides). Bien qu'il semble être dit plus haut qu'il est impossible d'obtenir des rectangles, mais comme il y a un exemple qui dessine ces rectangles(indicateur des sessions de trading), j'ai décidé de creuser le sujet.

Franchement, je n'ai pas compris comment obtenir des rectangles dans l'indicateur ci-dessus. Je serai donc reconnaissant pour toute explication (de la part des développeurs de la plateforme, de l'auteur, des développeurs tiers).

D'autre part, au cours de mes expériences, il s'est avéré qu'il n'est pas si difficile d'obtenir des rectangles - il suffit d'échanger les tampons de classement après une section de valeurs vides. En d'autres termes, ce code

...
//--- 
   for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) {
      if ( prev_calculated != rates_total && bar == rates_total - 1 ) {
         _up = up;
      }
      if ( bar % 4 == 0 ) {
         if ( up ) {
            draw(bar, high[bar], low[bar]);
            up = false;
         } else {
            draw(bar, low[bar], high[bar]);
            up = true;
         }
      }
   }
//--- valeur de retour de prev_calculated pour l'appel suivant
   return(rates_total);
}
//+------------------------------------------------------------------+
void draw(int bar, double price1, double price2) {
//---
   int start = bar-2;
   
   for ( int i = start; i <= bar; i++ ) {
      FillingBuffer1[i] = price1;
      FillingBuffer2[i] = price2;
   }
//---
}

donne ce résultat :

Échantillon de remplissage


Il semblerait que le problème soit résolu. J'ai écrit un indicateur qui alloue des intervalles de temps spécifiés par l'utilisateur sur une base quotidienne, et j'ai eu une nouvelle surprise :

Fuseau horaire

J'ai eu beau tourner le code dans tous les sens, je n'arrive pas à supprimer les "effets secondaires". Notez que dans le premier cas (code et image ci-dessus), rien de tel n'a été observé.

D'où les questions :

  • pourquoi l'indicateur trading sessions (lien en début de post) n'a pas ce problème de collage sur les zones de valeurs vides ?
  • pourquoi dans certains cas les rectangles sont dessinés normalement, et dans d'autres cas on obtient des effets de bord ? Les codes sont joints à la fin de l'article. (Oui, si de tels phénomènes se produisaient toujours, je serais d'accord avec l'affirmation concernant les polygones).

Je le répète : je serai reconnaissant pour toutes les explications.

P.S.1 Il me semble que la solution au problème des rectangles est une bonne alternative aux objets (que je ne souhaite pas vraiment utiliser). Après tout, il s'agit de la même sélection d'intervalles de temps, de l'inversion linéaire, des zones de Darvas, de la sélection de divers motifs, etc.

P.S.2 J'ai pensé à intégrer l'indicateur TimeZone dans la base de code, mais est-ce que cela vaut la peine (avec ces barres "gauches") ?

Dossiers :
 
L'erreur de rendu des barres "gauche" a été corrigée.
 

utiliser PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE) ; pour ne pas remplir la plage.

Pourquoi parfois un effet et parfois pas d'effet ?


ref https://www.mql5.com/zh/forum/417956/page4

问题,错误的讨论
问题,错误的讨论
  • 2022.05.05
  • www.mql5.com
那么,让我们开始吧...