You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
I'm trying to code a horizontal line which is intended to start at the last high/low. If there's a new high/low the line should be deleted and be drawn right from the new high/low.
Sadly, it doesn't work. I don't understand why it always refers to the first high/low (the one when the indicator is added to the chart)? Where is the fault?
When adding the indicator to the chart, it looks like that:
(blue arrows:high / blue diamond:confirmation of high / magenta arrow:low / magenta diamond:confirmation of low)
and after the new high, it looks like that:
WHY DOESN'T THE LINE START AT THIS NEW HIGH?!
//--------------------------------------------------------------------
// userindicator.mq4
// The code should be used for educational purpose only.
//--------------------------------------------------------------------
#property indicator_chart_window // Indicator is drawn in the main window
//--------------------------------------------------------------------
int init() // Special function init()
{
return; // Exit the special funct. init()
}
//--------------------------------------------------------------------
int deinit()
{
ObjectsDeleteAll();
return(0);
}
//--------------------------------------------------------------------
int start() // Special function start()
{
int i, Counted_bars;
double TopArrow[][4], BottomArrow[][4], TopDiamond[][4], BottomDiamond[][4];
datetime TimeTopArrow[][4], TimeBottomArrow[][4], TimeTopDiamond[][4], TimeBottomDiamond[][4];
ArraySetAsSeries(TopArrow,true);
ArraySetAsSeries(BottomArrow,true);
ArraySetAsSeries(TopDiamond,true);
ArraySetAsSeries(BottomDiamond,true);
ArraySetAsSeries(TimeTopArrow,true);
ArraySetAsSeries(TimeBottomArrow,true);
ArraySetAsSeries(TimeTopDiamond,true);
ArraySetAsSeries(TimeBottomDiamond,true);
ArrayResize(TopArrow, Bars);
ArrayResize(BottomArrow, Bars);
ArrayResize(TopDiamond, Bars);
ArrayResize(BottomDiamond, Bars);
ArrayResize(TimeTopArrow, Bars);
ArrayResize(TimeBottomArrow, Bars);
ArrayResize(TimeTopDiamond, Bars);
ArrayResize(TimeBottomDiamond, Bars);
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted(); // Number of counted bars
i=Bars-Counted_bars-1; // Index of the first uncounted
while(i>=0) // Loop for uncounted bars
{
TopArrow[i][0]=TopArrow[i+1][0];
TopArrow[i][1]=TopArrow[i+1][1];
TopArrow[i][2]=TopArrow[i+1][2];
TopArrow[i][3]=TopArrow[i+1][3];
TopDiamond[i][0]=TopDiamond[i+1][0];
TopDiamond[i][1]=TopDiamond[i+1][1];
TopDiamond[i][2]=TopDiamond[i+1][2];
TopDiamond[i][3]=TopDiamond[i+1][3];
BottomArrow[i][0]=BottomArrow[i+1][0];
BottomArrow[i][1]=BottomArrow[i+1][1];
BottomArrow[i][2]=BottomArrow[i+1][2];
BottomArrow[i][3]=BottomArrow[i+1][3];
BottomDiamond[i][0]=BottomDiamond[i+1][0];
BottomDiamond[i][1]=BottomDiamond[i+1][1];
BottomDiamond[i][2]=BottomDiamond[i+1][2];
BottomDiamond[i][3]=BottomDiamond[i+1][3];
TimeTopArrow[i][0]=TimeTopArrow[i+1][0];
TimeTopArrow[i][1]=TimeTopArrow[i+1][1];
TimeTopArrow[i][2]=TimeTopArrow[i+1][2];
TimeTopArrow[i][3]=TimeTopArrow[i+1][3];
TimeTopDiamond[i][0]=TimeTopDiamond[i+1][0];
TimeTopDiamond[i][1]=TimeTopDiamond[i+1][1];
TimeTopDiamond[i][2]=TimeTopDiamond[i+1][2];
TimeTopDiamond[i][3]=TimeTopDiamond[i+1][3];
TimeBottomArrow[i][0]=TimeBottomArrow[i+1][0];
TimeBottomArrow[i][1]=TimeBottomArrow[i+1][1];
TimeBottomArrow[i][2]=TimeBottomArrow[i+1][2];
TimeBottomArrow[i][3]=TimeBottomArrow[i+1][3];
TimeBottomDiamond[i][0]=TimeBottomDiamond[i+1][0];
TimeBottomDiamond[i][1]=TimeBottomDiamond[i+1][1];
TimeBottomDiamond[i][2]=TimeBottomDiamond[i+1][2];
TimeBottomDiamond[i][3]=TimeBottomDiamond[i+1][3];
if (iCustom(NULL, 0, "IndikatorTop",0,i+1)!=0)
{
TopArrow[i][0]=High[i+1];
TopArrow[i][1]=TopArrow[i+1][0];
TopArrow[i][2]=TopArrow[i+1][1];
TopArrow[i][3]=TopArrow[i+1][2];
TimeTopArrow[i][0]=Time[i+1];
TimeTopArrow[i][1]=TimeTopArrow[i+1][0];
TimeTopArrow[i][2]=TimeTopArrow[i+1][1];
TimeTopArrow[i][3]=TimeTopArrow[i+1][2];
}
if (iCustom(NULL, 0, "IndikatorTop",1,i+1)!=0)
{
TopDiamond[i][0]=High[i+1];
TopDiamond[i][1]=TopDiamond[i+1][0];
TopDiamond[i][2]=TopDiamond[i+1][1];
TopDiamond[i][3]=TopDiamond[i+1][2];
TimeTopDiamond[i][0]=Time[i+1];
TimeTopDiamond[i][1]=TimeTopDiamond[i+1][0];
TimeTopDiamond[i][2]=TimeTopDiamond[i+1][1];
TimeTopDiamond[i][3]=TimeTopDiamond[i+1][2];
//Chart
ObjectsDeleteAll();
ObjectCreate("Linie", OBJ_TREND, 0, TimeTopArrow[i][0], TopArrow[i][0], TimeTopDiamond[i][0], TopArrow[i][0]);
ObjectSet("Linie",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("Linie",OBJPROP_COLOR,Red);
ObjectSet("Linie",OBJPROP_WIDTH,1);
ObjectSet("Linie", OBJPROP_RAY, false);
}
if (iCustom(NULL, 0, "IndikatorBottom",2,i+1)!=0)
{
BottomArrow[i][0]=Low[i+1];
BottomArrow[i][1]=BottomArrow[i+1][0];
BottomArrow[i][2]=BottomArrow[i+1][1];
BottomArrow[i][3]=BottomArrow[i+1][2];
TimeBottomArrow[i][0]=Time[i+1];
TimeBottomArrow[i][1]=TimeBottomArrow[i+1][0];
TimeBottomArrow[i][2]=TimeBottomArrow[i+1][1];
TimeBottomArrow[i][3]=TimeBottomArrow[i+1][2];
}
if (iCustom(NULL, 0, "IndikatorBottom",3,i+1)!=0)
{
BottomDiamond[i][0]=Low[i+1];
BottomDiamond[i][1]=BottomDiamond[i+1][0];
BottomDiamond[i][2]=BottomDiamond[i+1][1];
BottomDiamond[i][3]=BottomDiamond[i+1][2];
TimeBottomDiamond[i][0]=Time[i+1];
TimeBottomDiamond[i][1]=TimeBottomDiamond[i+1][0];
TimeBottomDiamond[i][2]=TimeBottomDiamond[i+1][1];
TimeBottomDiamond[i][3]=TimeBottomDiamond[i+1][2];
//Chart
ObjectsDeleteAll();
ObjectCreate("Linie", OBJ_TREND, 0, TimeBottomArrow[i][0], BottomArrow[i][0], TimeBottomDiamond[i][0], BottomArrow[i][0]);
ObjectSet("Linie",OBJPROP_STYLE,STYLE_DASH);
ObjectSet("Linie",OBJPROP_COLOR,Red);
ObjectSet("Linie",OBJPROP_WIDTH,1);
ObjectSet("Linie", OBJPROP_RAY, false);
}
ObjectSet("Linie", OBJPROP_TIME2, Time[i]);
i--;
}
//--------------------------------------------------------------------
return; // Exit the special funct. start()
}
//--------------------------------------------------------------------