Questions des débutants MQL4 MT4 MetaTrader 4 - page 227

 

Bonjour, le problème n'est probablement pas le passage à zéro mais le passage d'un tampon à l'autre. À une barre, le signal se termine et à la barre suivante, le signal est déjà dans un autre tampon. Quelle couleur voulez-vous voir entre les deux barres adjacentes ? Ce n'est pas clair.

Si vous voulez faire un troisième tampon avec une ligne jaune et le mettre sous ces deux-là, ce serait magnifique !

 
Aleksei Stepanenko:

Bonjour, le problème n'est probablement pas le passage à zéro mais le passage d'un tampon à l'autre. À une barre, le signal se termine et à la barre suivante, le signal est déjà dans un autre tampon. Quelle couleur voulez-vous voir entre les deux barres adjacentes ? Ce n'est pas clair.

Si vous voulez, faites un troisième tampon avec une ligne jaune et mettez-le sous ces deux-là, ce sera magnifique !

Alexey, merci pour votre aide.

Je n'ai pas besoin de trois couleurs, deux suffisent amplement. Je voudrais que les espaces vides soient dessinés avec une ligne de la couleur précédente. Je ne comprends pas ce que vous voulez dire par "Sur une barre, le signal est dépassé, et sur la barre suivante, le signal est dans un tampon différent". À chaque barre, il y a une valeur dans l'un des tampons, elle devrait donc également être affichée sur le graphique, ou bien j'ai raté quelque chose ?

 

Eh bien regardez, le temps est discret sur le graphique, l'unité minimale est 1 bar. C'est-à-dire qu'il n'y a pas de temps partiel entre les barres, pour ainsi dire. Si vous remplacez le rendu par un diagramme à barres, vous avez deux barres - deux barres de couleurs différentes. Mais il n'y a rien entre eux. Et la ligne est tracée de telle manière (une telle propriété est faite) qu'elle relie des valeurs du même tampon, mais pas des valeurs différentes. C'est pour ça qu'il y a des trous.

Si vous voulez que ce soit esthétique, vous pouvez essayer de donner des valeurs finales qui se chevauchent sur les deux tampons. Vous signalez au nouveau tampon, mais vous signalez toujours à l'ancienne barre.

Mais si vous prenez ensuite le signal de cet indicateur dans Expert Advisor, il sera inexact.


Ou bien un histogramme est une bonne option sans aucun problème supplémentaire. Je vote pour le diagramme en barres.

 
Grigori.S.B:

Alexei, merci pour votre aide.

Je n'ai pas besoin de trois couleurs, deux suffisent amplement. Je voudrais que les espaces vides soient dessinés avec une ligne de la couleur précédente. Je ne comprends pas ce que vous voulez dire par "A une barre le signal se termine, et à la barre suivante le signal est déjà dans un autre tampon". A chaque barre, il y a une valeur dans l'un des tampons, cela signifie qu'elle doit être affichée sur le graphique, ou est-ce que je rate quelque chose ?

laisser un tampon sans conditions et superposer le second avec des conditions sur le premier

#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

//---- input parameters
extern int    FastEMA=12;  
extern int    SlowEMA=26;  
extern int    Signal=9;  

//---- buffers
double DiffBuffer_up[];
double DiffBuffer_dn[];
//
double MainBuffer[];
double SignalBuffer[];

ENUM_TIMEFRAMES TimeFrame;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int    draw_begin=MathMax(FastEMA,SlowEMA);
   string short_name="MACD Stephen";
   //---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,DiffBuffer_up);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,DiffBuffer_dn);
   short_name=StringConcatenate(short_name," ("+(string)FastEMA+","+(string)SlowEMA+","+(string)Signal+")");
   IndicatorShortName(short_name);
   SetIndexDrawBegin(0,draw_begin);
   SetIndexDrawBegin(1,draw_begin);
   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Down");
   IndicatorDigits(6);
   SetLevelValue(0,0);
   
   TimeFrame=GetTF();
   
   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
  int limit, iChart, iTF, delta=0;
  datetime TimeArray[];
  //if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());
  int counted_bars=IndicatorCounted();
  //---- check for possible errors
  if(counted_bars<0) return(-1);
  //---- the last counted bar will be recounted
  if(counted_bars>0) counted_bars--;
  limit=Bars-counted_bars+delta;

  ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
  ArraySetAsSeries(MainBuffer,true);
  ArraySetAsSeries(SignalBuffer,true);
  ArrayResize(MainBuffer,  100000);
  ArrayResize(SignalBuffer,100000);
  
  iTF=0;
  for(iChart=0; iChart<limit; iChart++)
  {
      while(Time[iChart]<TimeArray[iTF]) iTF++;
      MainBuffer[iChart]=EMPTY_VALUE;
      SignalBuffer[iChart]=EMPTY_VALUE;
      MainBuffer[iChart]  =iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_MAIN,iTF);
      SignalBuffer[iChart]=iMACD(Symbol(),TimeFrame,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_SIGNAL,iTF);
      double diff=MainBuffer[iChart]-SignalBuffer[iChart];
      DiffBuffer_up[iChart]=diff;
      
      
      if (diff>0) //{
        DiffBuffer_dn[iChart]=diff; 
         //DiffBuffer_dn[iChart]=EMPTY_VALUE;
      //}
      //else {
         
         //DiffBuffer_up[iChart]=EMPTY_VALUE;
      //}
  }
  return(0);
}
 
Aleksei Stepanenko:

Eh bien regardez, le temps est discret sur le graphique, l'unité minimale est 1 bar. C'est-à-dire qu'il n'y a pas de temps partiel entre les barres, pour ainsi dire. Si vous remplacez le rendu par un diagramme à barres, vous avez deux barres - deux barres de couleurs différentes. Mais il n'y a rien entre eux. Et la ligne est tracée de telle manière (une telle propriété est faite) qu'elle relie des valeurs du même tampon, mais pas des valeurs différentes. C'est pour ça qu'il y a des trous.

Si vous voulez que ce soit esthétique, vous pouvez essayer de donner des valeurs finales qui se chevauchent sur les deux tampons. Vous signalez au nouveau tampon, mais vous signalez toujours à l'ancienne barre.

Mais si vous prenez ensuite le signal de cet indicateur dans Expert Advisor, il sera inexact.

Ou bien un histogramme est une bonne option sans aucun problème supplémentaire. Je vote pour le diagramme en barres.

Merci beaucoup, Alexey.

Maintenant, même ma tête est en ordre. J'aurais pu le faire moi-même, mais pas de manière aussi courte et élégante que les conseils ultérieurs de Yuri.

 
Iurii Tokman:

laisser un tampon inconditionnel, et superposer le second avec des conditions sur le premier

Chapeau bas à vous, Yuri.

Une solution si élégante et si concise que je n'aurais pas pu l'imaginer.

 
Grigori.S.B:

Chapeau bas à vous, Yuri.

Je n'aurais pas pu imaginer une solution aussi élégante et concise.

ce n'était pas mon idée, ici sur le forum, ainsi que vous avez appris
dans la base de code beaucoup de solutions, et non seulement tels

 
Grigori.S.B:


Merci pour les remerciements !

 
Pourquoi mes questions sont-elles toujours ignorées ?
 
darirunu1:
Pourquoi mes questions sont-elles toujours ignorées ?

dépend des questions...