Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 720

 
Pouvez-vous me dire comment mettre tous les dessins de l'indicateur en arrière-plan et non au-dessus des chandeliers ?
 
Roman Sharanov:
Pouvez-vous me dire comment mettre tous les dessins de l'indicateur en arrière-plan au lieu de les placer au-dessus des chandeliers ?

Utilisez le paramètre de propriété ChartSetInteger(chart_id,CHART_FOREGROUND,value) ;

Cela ne concerne pas seulement les indicateurs.

 

Bonjour, j'ai un indicateur d'histogramme Pulse Flat et je voudrais le convertir d'un histogramme à un indicateur de ligne. Où dois-je commencer ? !

//+------------------------------------------------------------------+
//|                                             FM Signal Filter.mq4 |
//|                                                 Copyright © 2008 |
//|                                                 enhanced version |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 Arney Derick"
#property link      "http://metatrader.com/"

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 DarkBlue
#property indicator_color4 Maroon
#property indicator_color5 Lime
#property indicator_color6 Yellow

//---- input parameters
extern int       bolPrd=20;
extern double    bolDev=2.0;
extern int       keltPrd=20;
extern double    keltFactor=1.5;
extern int       momPrd=12;
//---- buffers
double upB[];
double upB2[];
double loB[];
double loB2[];
double upK[];
double loK[];

int i,j,slippage=3;
double breakpoint=0.0;
double ema=0.0;
int peakf=0;
int peaks=0;
int valleyf=0;
int valleys=0, limit=0;
double ccis[61],ccif[61];
double delta=0;
double ugol=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexBuffer(0,upB);
   SetIndexEmptyValue(0,EMPTY_VALUE);

   SetIndexStyle(1,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexBuffer(1,loB);
   SetIndexEmptyValue(1,EMPTY_VALUE);

   SetIndexStyle(4,DRAW_ARROW,EMPTY,3);
   SetIndexBuffer(4,upK);
   SetIndexEmptyValue(4,EMPTY_VALUE);
   SetIndexArrow(4,159);
   SetIndexStyle(5,DRAW_ARROW,EMPTY,1);
   SetIndexBuffer(5,loK);
   SetIndexEmptyValue(5,EMPTY_VALUE);
   SetIndexArrow(5,159);

   SetIndexStyle(2,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexEmptyValue(2,EMPTY_VALUE);
   SetIndexBuffer(2,upB2);

   SetIndexStyle(3,DRAW_HISTOGRAM,EMPTY,3);
   SetIndexEmptyValue(3,EMPTY_VALUE);
   SetIndexBuffer(3,loB2);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int shift,limit;
   double diff,d,dPrev,std,bbs;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-31;
   if(counted_bars>=31) limit=Bars-counted_bars-1;

   for(shift=limit;shift>=0;shift--) 
     {
      //d=iMomentum(NULL,0,momPrd,PRICE_CLOSE,shift);
      d=LinearRegressionValue(bolPrd,shift);
      dPrev=LinearRegressionValue(bolPrd,shift+1);
      if(d>0) 
        {
         if((dPrev>0) && (dPrev>d)){ upB2[shift]=d; upB[shift]=0; } else { upB[shift]=d; upB2[shift]=0; }
         //upB[shift]=0;
         loB[shift]=0;
         loB2[shift]=0;
           } else {
         if((dPrev<0) && (dPrev<d)){ loB2[shift]=d; loB[shift]=0; } else { loB[shift]=d; loB2[shift]=0; }
         upB[shift]=0;
         upB2[shift]=0;
         //loB[shift]=d;
        }
      diff= iATR(NULL,0,keltPrd,shift)*keltFactor;
      std = iStdDev(NULL,0,bolPrd,MODE_SMA,0,PRICE_CLOSE,shift);
      bbs = bolDev * std / diff;
      if(bbs<1) 
        {
         upK[shift]=0;
         loK[shift]=EMPTY_VALUE;
           } else {
         loK[shift]=0;
         upK[shift]=EMPTY_VALUE;
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+

double LinearRegressionValue(int Len,int shift) 
  {
   double SumBars=0;
   double SumSqrBars=0;
   double SumY = 0;
   double Sum1 = 0;
   double Sum2 = 0;
   double Slope= 0;

   SumBars=Len *(Len-1)*0.5;
   SumSqrBars=(Len-1)*Len *(2*Len-1)/6;

   for(int x=0; x<=Len-1;x++) 
     {
      double HH = Low[x+shift];
      double LL = High[x+shift];
      for(int y=x; y<=(x+Len)-1; y++) 
        {
         HH = MathMax(HH, High[y+shift]);
         LL = MathMin(LL, Low[y+shift]);
        }
      Sum1 += x* (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2);
      SumY += (Close[x+shift]-((HH+LL)/2 + iMA(NULL,0,Len,0,MODE_EMA,PRICE_CLOSE,x+shift))/2);
     }
   Sum2=SumBars*SumY;
   double Num1 = Len * Sum1 - Sum2;
   double Num2 = SumBars * SumBars-Len * SumSqrBars;

   if(Num2!=0.0) 
     {
      Slope=Num1/Num2;
        } else {
      Slope=0;
     }

   double Intercept=(SumY-Slope*SumBars)/Len;
   double LinearRegValue=Intercept+Slope *(Len-1);

   return (LinearRegValue);

  }
//+------------------------------------------------------------------+

 

J'ai remplacé DRAW-HISTOGRAM par DRAW_LINE et supprimé les 2 derniers tampons qui dessinent la ligne au niveau 0 et j'ai obtenu ceci.


était - est

Dossiers :
26.png  27 kb
27.png  29 kb
 
Kos Mos:

J'ai remplacé DRAW-HISTOGRAM par DRAW_LINE et supprimé les 2 derniers tampons qui dessinent la ligne au niveau 0 et j'ai obtenu ceci.


était - est

Vous l'avez fait vous-même :)

 
Artyom Trishkin:

J'ai trouvé la solution :)

Oui))), ça a l'air horrible parce qu'il reste 4 tampons, je me suis dit que ça doit être soit 2 soit 1, j'ai raison !

 

Qui peut me dire comment écrire du code pour, par exemple, ne pas parler du jour dernier mais du jour d'avant et ainsi de suite en remontant au moins les sept derniers jours ou où le trouver ici dans le forum ou dans le répertoire des fonctions. Voici un exemple de la journée précédente :

#property indicator_chart_window

extern bool Show_LABELS=true ;

extern inttern Shift_Prev_LABEL=10 ; // le nombre indique le décalage horizontal

double DHi, DLo ;

//---- Précédent

DHi =iHigh(NULL,PERIOD_D1,1) ;

DLo =iLow(NULL,PERIOD_D1,1) ;

si (Show_LABELS==true)

{

if(ObjectFind("Pre_day_maximum")!=0)

{

ObjectCreate("Pre_day_Maximum", OBJ_TEXT, 0, Time[Shift_Prev_LABEL+196], DHi) ;

ObjectSetText("Prev_D1"+DoubleToStr(DHi,Digits)+" ", 9, "Arial", Magenta) ;

}

sinon

{

ObjectMove("Prev_D1", 0, Time[Shift_Prev_LABEL+196], DHi) ;

}

if(ObjectFind("Pre_day_minimum")!=0)

{

ObjectCreate("Pre_day_minimum", OBJ_TEXT, 0, Time[Shift_Prev_LABEL+196], DLo) ;

ObjectSetText("Pre_day_minimum", "Prev_D1"+DoubleToStr(DLo,Digits)+", 9, "Arial", LawnGreen) ;

}

sinon

{

ObjectMove("Prev_day_minimum", 0, Time[Shift_Prev_LABEL+196], DLo) ;

}

}

Code non écrit dans inite, deinite et start.

double DHi,DLo ; // Apparemment, nous devons commencer ici, mais je ne sais pas quoi exactement et alors j'écrirais tout moi-même.

 
Artyom Trishkin:

Nous avons trouvé une solution :)

Bonjour, dites-moi comment faire une ligne solide.

 
koctja:

DHi =iHigh(NULL,PERIOD_D1,1) ;

DLo =iLow(NULL,PERIOD_D1,1) ;


double DHi,DLo ; // Apparemment, nous devons commencer ici, et ce que nous ne savons pas exactement, et ensuite tout écrire moi-même.

Commencez par vous faire aider ! Il suffit de changer un chiffre pour la barre souhaitée en décalant iHigh(NULL,PERIOD_D1,1) ;

 
Kos Mos:

Bonjour, dites-moi comment faire une ligne solide.

Lire l'aide "indicator_style

indicateur_styleN

int

Style de ligne dans les séries graphiques indiqué par la valeur de ENUM_LINE_STYLE. N - numéro de série graphique, numérotation à partir de 1