// Downloaded From https://www.WiseStockTrader.com
_SECTION_BEGIN( "Trendline " );
// E.M.Pottasch, 3/2015
SetChartOptions( 0, chartShowArrows | chartShowDates );

_N( Title = StrFormat( "{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ) );

size = Param( "ZigZag-Sensitivity", 5, 0.1, 100, 0.1 ) ; // Size for the trendline
gs = ParamToggle( "Price Toggle", "H/L|C", 1 );

xx = x = BarIndex();
fvb = FirstVisibleValue( x );
lvb = LastVisibleValue( x );

if ( gs )
{
    pk = Peak( c, Size ) == c AND Zig( c, Size ) == c;
    tr = Trough( c, Size ) == c AND Zig( c, Size ) == c;

    px0 = ValueWhen( pk, x, 0 );
    tx0 = ValueWhen( tr, x, 0 );
    px1 = ValueWhen( pk, x, 1 );
    tx1 = ValueWhen( tr, x, 1 );
    px2 = ValueWhen( pk, x, 2 );
    tx2 = ValueWhen( tr, x, 2 );
    ph0 = ValueWhen( pk, C, 0 );
    tl0 = ValueWhen( tr, C, 0 );
    ph1 = ValueWhen( pk, C, 1 );
    tl1 = ValueWhen( tr, C, 1 );
    ph2 = ValueWhen( pk, C, 2 );
    tl2 = ValueWhen( tr, C, 2 );
}
else
{
    pk = Peak( H, Size ) == H AND Zig( H, Size ) == H;
    tr = Trough( L, Size ) == L AND Zig( L, Size ) == L;

    px0 = ValueWhen( pk, x, 0 );
    tx0 = ValueWhen( tr, x, 0 );
    px1 = ValueWhen( pk, x, 1 );
    tx1 = ValueWhen( tr, x, 1 );
    px2 = ValueWhen( pk, x, 2 );
    tx2 = ValueWhen( tr, x, 2 );
    ph0 = ValueWhen( pk, H, 0 );
    tl0 = ValueWhen( tr, L, 0 );
    ph1 = ValueWhen( pk, H, 1 );
    tl1 = ValueWhen( tr, L, 1 );
    ph2 = ValueWhen( pk, H, 2 );
    tl2 = ValueWhen( tr, L, 2 );
}

ll = tr AND tl1 < tl2;

hl = tr AND tl1 > tl2;
hh = pk AND ph1 > ph2;
lh = pk AND ph1 < ph2;
dt = pk AND ph1 == ph2;
db = tr AND tl1 == tl2;

Plot( C, "C", colorWhite, styleCandle, Null, Null, 0, 0, 1 );
PlotShapes( shapeCircle*pk, ColorRGB( 255, 0, 0 ), 0, H, 10 );
PlotShapes( shapeCircle*tr, ColorRGB( 0, 255, 0 ), 0, L, -10 );

if ( gs )
    Plot( Zig( c, Size ), "Zig", ColorRGB( 50, 50, 50 ), styleDashed, Null, Null, 0, 0, 1 );

for ( i = lvb;i > fvb;i-- )
{
    {
        if ( ll[i] )
            PlotTextSetFont( "LL", "Arial Black", 8, i, L[i], colorGreen, colorDefault, -30 );

        if ( hl[i] )
            PlotTextSetFont( "HL", "Arial Black", 8, i, L[i], colorGreen, colorDefault, -30 );

        if ( db[i] )
            PlotTextSetFont( "DB", "Arial Black", 8, i, L[i], colorLightBlue, colorDefault, -30 );

        if ( hh[i] )
            PlotTextSetFont( "HH", "Arial Black", 8, i, H[i], colorRed, colorDefault, 20 );

        if ( lh[i] )
            PlotTextSetFont( "LH", "Arial Black", 8, i, H[i], colorRed, colorDefault, 20 );

        if ( dt[i] )
            PlotTextSetFont( "DT", "Arial Black", 8, i, H[i], colorOrange, colorDefault, 20 );
    }
}

cnta = cntb = 0;

for ( i = lvb;i > fvb;i-- )
{
    if ( pk[ i ] AND ph2[i] > ph1[i] AND cnta < 200 )
    {
        x2 = px2[i];
        x1 = px1[i];
        x0 = px0[i];
        y2 = ph2[i];
        y1 = ph1[i];

        if ( x0 == x1 )
            x0 = BarCount - 1;

        Line = LineArray( x2, y2, x1, y1, 1 );

        idx2 = xx == x2;

        idx1 = xx == x0;

        idx = Flip( idx2, idx1 );

        Line = IIf( idx, Line, Null );

        Plot( Line, "", colorred, 1, Null, Null, 0, 1, 2 );

        cnta = cnta + 1;
    }

    if ( tr[ i ] AND tl2[i] < tl1[i] AND cntb < 200 )
    {
        x2 = tx2[i];
        x1 = tx1[i];
        x0 = tx0[i];
        y2 = tl2[i];
        y1 = tl1[i];

        if ( x0 == x1 )
            x0 = BarCount - 1;

        Line = LineArray( x2, y2, x1, y1, 1 );

        idx2 = xx == x2;

        idx1 = xx == x0;

        idx = Flip( idx2, idx1 );

        Line = IIf( idx, Line, Null );

        Plot( Line, "", colorgreen, 1, Null, Null, 0, 1, 2 );

        cntb = cntb + 1;
    }
}
_SECTION_END();