"Moving" OBJ_TREND

 
Could anyone give me a hint?
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()
}
//--------------------------------------------------------------------