Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes - page 720

 
Can you tell me how to set all drawings in the indicator as a background and not on top of candlesticks?
 
Roman Sharanov:
Can you tell me how to set all drawings in the indicator as a background instead of on top of candlesticks?

Use ChartSetInteger(chart_id,CHART_FOREGROUND,value) property setting;

This is not only for indicators.

 

Hello, I have a Pulse Flat histogram indicator and would like to convert it from a histogram to a line indicator. Where do I start?!

//+------------------------------------------------------------------+
//|                                             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);

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

 

I replaced DRAW-HISTOGRAM with DRAW_LINE and deleted the last 2 buffers that draw the line at level 0 and got this.


was - is

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

I replaced DRAW-HISTOGRAM with DRAW_LINE and deleted the last 2 buffers that draw the line at level 0 and got this.


was - is

Worked it out for yourself :)

 
Artyom Trishkin:

Figured it out :)

Yes))), it looks awful because there are 4 buffers left, I figured it needs to be either 2 or 1, am I right?!

 

Who can tell me how to write code for example not last day but the day before and so on backwards at least the former seven days or where to look for it here on the forum or in the function directory. Here is an example of the previous day:

#property indicator_chart_window

extern bool Show_LABELS=true;

extern inttern Shift_Prev_LABEL=10; // number indicates the horizontal shift

double DHi,DLo;

//---- Previous

DHi =iHigh(NULL,PERIOD_D1,1);

DLo =iLow(NULL,PERIOD_D1,1);

if (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);

}

else

{

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);

}

else

{

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

}

}

Code not written in inite, deinite and start.

double DHi,DLo; // Apparently, we need to start here, but I don't know what exactly and then I would write everything myself.

 
Artyom Trishkin:

We've figured it out :)

Hi ! Please tell me how to make a solid line.

 
koctja:

DHi =iHigh(NULL,PERIOD_D1,1);

DLo =iLow(NULL,PERIOD_D1,1);


double DHi,DLo; // Apparently, we need to start here, and what exactly do not know, and then write everything myself.

Start with help! Just change a digit to the desired bar shift iHigh(NULL,PERIOD_D1,1);

 
Kos Mos:

Hi ! Please tell me how to make a solid line.

Read "indicator_style" help

indicator_styleN

int

Line style in graphical series indicated with value of ENUM_LINE_STYLE. N - graphic series number, numbering from 1

Reason: