The question is can you fix it?

#property indicator_buffers 1 #property indicator_plots 1 // plot p // indicator buffers mapping SetIndexBuffer(0,m); ⋮ SetIndexBuffer(1,h);
How many buffers are you trying to create? How many did you declare?

double L[]; double s[]; double k[];
What are these empty arrays? They are not buffers. They have no size, yet you try to use them.

int calcs=rates_totalprev_calculated; int from=calcs; if(calcs>atr_period){ from=rates_totalatr_period6; } for(int i=from;i>=0;i)
First run, prev_calculated is zero, you try to access Close[rates_total] which does not exist.
How to do your lookbacks correctly #9 — #14 & #19 (2016)
The question is can you fix it?

How many buffers are you trying to create? How many did you declare?

What are these empty arrays? They are not buffers. They have no size, yet you try to use them.
 First run, prev_calculated is zero, you try to access Close[rates_total] which does not exist.
How to do your lookbacks correctly #9 — #14 & #19 (2016)
Hello ,Actually I want Convert an indicator in PineScript to MQL4 But I am a beginner ... :S
and this is pinescript Code i want convert to mql
float m=0 T=closeopen L=highlow k=math.abs(T)/(L) atr=ta.atr(50) s=(highmath.max(close,open))/(math.min(close,open)low) if L[1]>1*atr and 1*s[1]<=1*0.25 and 1*low[1]==1*ta.lowest(low[1],5) and k[1]<0.5 and close>high[1] m:=1 else if L[1]>1*atr and s[1]>=1*4 and 1*high[1]==1*ta.highest(high[1],5) and k[1]<0.5 and close<low[1] m:=1
How to do your lookbacks correctly #9 — #14 & #19 (2016)
That going wrong is more rare than aliens landing on London tomorrow to flirt with my ex wife :P . It is a valid observation though.
Hello ,Actually I want Convert an indicator in PineScript to MQL4 But I am a beginner ... :S
and this is pinescript Code i want convert to mql
This is the same indicator as before ? you want to place a buy and sell arrow i assume that is why the values were so extreme ?
Points 1 + 2 of willian are correct
Try this (if there were no alterations to the original Trading view code)
#property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 // plot up #property indicator_label1 "U" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrRoyalBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 3 // plot down #property indicator_label2 "D" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrCrimson #property indicator_style2 STYLE_SOLID #property indicator_width2 3 input int atr_period=50;//atr period //you provide a deviation in points for your arrows from the high (for the sell arrow) and from the low (for the buy arrow) input int breath_room=200;//breathing room in points // indicator buffers double up[],down[]; int OnInit() { // indicator buffers mapping SetIndexBuffer(0,up); SetIndexArrow(0,217); SetIndexBuffer(1,down); SetIndexArrow(1,218); // return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { // int calcs=rates_totalprev_calculated; int from=calcs; if(calcs>atr_period){ from=rates_totalatr_period6; }else if(prev_calculated==0){ from=calcs1; } for(int i=from;i>=0;i) { double T=Close[i]Open[i]; double L=High[i]Low[i]; double k=0.0; if(L>0.0){k=MathAbs(T)/(L);} double atr=iATR(_Symbol,_Period,atr_period,i); double s_div=(MathMin(Close[i],Open[i])Low[i]); double s=0.0; if(s_div!=0.0){s=(High[i]MathMax(Close[i],Open[i]))/s_div;} if(High[i+2]>High[i+1]&&High[i+2]>High[i]&&High[i+2]>High[i+3]&&High[i+2]>High[i+4]&&Close[i]<Open[i]&&Close[i+1]<Open[i+1]&&Close[i+3]>Open[i+3]&&Close[i+4]>Open[i+4]&&Low[i]<Low[i+4]){ //p[i]=1000*(1+High[i+2]/MathMin(Low[i+1],Low[i])); up[i]=Low[i]((double)breath_room)*_Point;//minus the breathing room to set it lower } else if(Low[i+2]<Low[i+1]&&Low[i+2]<Low[i]&&Low[i+2]<Low[i+3]&&Low[i+2]<Low[i+4]&&Close[i]>Open[i]&&Close[i+1]>Open[i+1]&&Close[i+3]<Open[i+3]&&Close[i+4]<Open[i+4]&&High[i]>High[i+4]){ //p[i]=1000*(1+Low[i+2]/MathMax(High[i+1],High[i])); down[i]=High[i]+((double)breath_room)*_Point;//plus the breathing room to set it higher } else{ //p[i]=0.0; } } // return value of prev_calculated for next call return(rates_total); }
It is not rare at all! It is guaranteed to happen every single time when an Indicator is first placed on a chart. On first call, prev_calculated is zero.
It is not rare at all! It is guaranteed to happen every single time when an Indicator is first placed on a chart. On first call, prev_calculated is zero.
But in this specific interpretation of an indicator if the rates are more than the atr period something happens , right ? 😊
So it is rare that from will request rates_total , very very rare . But as i said , rare does not mean never .
That going wrong is more rare than aliens landing on London tomorrow to flirt with my ex wife :P . It is a valid observation though.
This is the same indicator as before ? you want to place a buy and sell arrow i assume that is why the values were so extreme ?
Points 1 + 2 of willian are correct
Try this (if there were no alterations to the original Trading view code)
Your help was really great for this,You fixed the previous indicator problem., thank you :S.
Actually I wanted to convert this indicator to mql and I still have the same problem... :(( I am very confused :S
float m=0 T=closeopen L=highlow k=math.abs(T)/(L) atr=ta.atr(50) s=(highmath.max(close,open))/(math.min(close,open)low) if L[1]>1*atr and 1*s[1]<=1*0.25 and 1*low[1]==1*ta.lowest(low[1],5) and k[1]<0.5 and close>high[1] m:=1 else if L[1]>1*atr and s[1]>=1*4 and 1*high[1]==1*ta.highest(high[1],5) and k[1]<0.5 and close<low[1] m:=1
If that is how you wish to view it ... then who am I to disagree.
But I will ask this .. and what happens when rates_total is also zero?
It does happen — often, in fact!
EDIT: And what about when prev_calculated is greater than rates_total?
Yes, it also happens, sometimes!
Your help was really great for this,You fixed the previous indicator problem., thank you :S.
Actually I wanted to convert this indicator to mql and I still have the same problem... :(( I am very confused :S
I see , so this is a slight alteration from the original .
Okay when you see [x] brackets in Pine Script it indicates a deviation to the past from the current value so in this case
L[1] becomes
double L=High[1]Low[1];
similarly to Pine script MQL4 denotes the distance from the live bar with brackets so High[1] and Low[1] are the bar one position to the left from the latest bar
As above
s[1] becomes
double s=(High[1]MathMax(Close[1],Open[1]))/(MathMin(Close[1],Open[1])Low[1]);
Then you have ta.lowest(low,5) which means find the lowest of the lows for the last 5 bars after the live one .
Which is tricky . You will use iLowest for this one , but iLowest will give you a bar index so to get its low you will have to access the result of the lowest.
double lowest=Low[iLowest(_Symbol,_Period,MODE_LOW,5,1)]; //so get the Low , which low ? the low at the index with the lowest low starting from bar 1 till bar 5
Then k[1] is also tricky where your [1]s cascade into the individual calculations of T and L so you get :
double k=MathAbs(Close[1]Open[1])/(High[1]Low[1]);
and close>high[1] means if the current close is higher than the previous close
So these are the basic formulas for the first check is it done though ? No .
We are checking every bar in index i so all the [1] become [i+1] and all the [0] become [i] , i will attach the full code in case you want to take a look directly instead of trying out yourself.
The though of creating extra buffers to keep everything neatly tucked in there was correct , but let's do it the easy way first.
I see , so this is a slight alteration from the original .
Okay when you see [x] brackets in Pine Script it indicates a deviation to the past from the current value so in this case
L[1] becomes
similarly to Pine script MQL4 denotes the distance from the live bar with brackets so High[1] and Low[1] are the bar one position to the left from the latest bar
As above
s[1] becomes
Then you have ta.lowest(low,5) which means find the lowest of the lows for the last 5 bars after the live one .
Which is tricky . You will use iLowest for this one , but iLowest will give you a bar index so to get its low you will have to access the result of the lowest.
Then k[1] is also tricky where your [1]s cascade into the individual calculations of T and L so you get :
and close>high[1] means if the current close is higher than the previous close
So these are the basic formulas for the first check is it done though ? No .
We are checking every bar in index i so all the [1] become [i+1] and all the [0] become [i] , i will attach the full code in case you want to take a look directly instead of trying out yourself.
The though of creating extra buffers to keep everything neatly tucked in there was correct , but let's do it the easy way first.
Wow, you are really awesome And I learned a lot from you thank you
 Free trading apps
 Over 8,000 signals for copying
 Economic news for exploring financial markets
You agree to website policy and terms of use
Hi guys
indicator not work and Error array out of range.
can you fix it ?