Trendlines can be automatically "drawn" on a chart with EasyLanguage. Controlling where a line ends, can be difficult. Starting a new line is fairly easy.
If there can be multiple signals intrabar to start one trendline and end another, the new trendline may be created, but the old trendline may not get ended. To deal with this issue, I use past bars and exclude the current bar from the signal. Plus I end the current line immediately on the first signal for the new line, before creating the new line.
var: Peak(False), Up(False), Down(False);
var: CurrentRzstnce(-1), OldRzstnce(-1) , OldRzstnceBegPrice (0);
Peak = Up[2] and Down[1];
{-- Ends the current Resistance Trend line if a new peak signal fires, then Starts a new Resistance Line ---}
If Peak Then
Begin
//Immediately end the current resistance line in order to insure that the line gets stopped.
//End the current resistance line before starting the new one.
If CurrentRzstnce <> -1 Then
Begin
Value1 = TL_GetBeginVal(CurrentRzstnce);
Value2 = TL_SetExtRight(CurrentRzstnce, False); //Stop extending the current line to the right.
Value3 = TL_SetEnd(CurrentRzstnce, D, T[2], Value1); //End the current line
end;
OldRzstnce = CurrentRzstnce;
If OldRzstnce <> -1 Then
Begin
OldRzstnceBegPrice = TL_GetBeginVal(OldRzstnce);
End;
// The Peak signal occured two bars ago, so the start point for the line is T[2] and the start
// Height is H[2]. The end price (height) is the same, this make the line horizontal.
// Value1 = TL_New(iBarDate, iBarTime, iPrice, eBarDate, eBarTime, ePrice)
CurrentRzstnce = tl_new(d, t[2], H[2], d, t, H[2]); // Create the new Resistance line
Value4 = TL_SetExtRight(CurrentRzstnce, True);
Value5 = TL_SetSize(CurrentRzstnce, 2);
Value6 = TL_SetColor(CurrentRzstnce, Blue);
End;