// Downloaded From https://www.WiseStockTrader.com
// Subhankar chakraborty
// ph8768142154,
// waves analysisest
// pivot analysisest
// box analysisest
//afl
SetBarsRequired(1000);
BarLum1         = Param("Bar Color Intensity", 8, 0, 10,01);
UpBarColor      = ColorBlend(ColorRGB(5,36,5), ColorRGB(10,75,10), BarLum1);
DnBarColor      = ColorBlend(ColorRGB(36,5,5), ColorRGB(75,10,10), BarLum1);
BarColor        = IIf(Close > Open, UpBarColor, DnBarColor);
SetBarFillColor(BarColor);
stylecndl=ParamToggle("Bar or Candle chart?","Bar|Candle",0);
Showboll=ParamToggle("Show Bollinger Bands","No|Yes",0);
showgann=ParamToggle("Show shortest path?","No|Yes",1);
nobars=Param("N bars = ",2,1,5,1);
upbar=downbar=j=k=0;
 
 
if (nobars==1)upbar=H>Ref(H,-1);
if (nobars==2)upbar=H>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2);
if (nobars==3)upbar=H>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2) AND Ref(H,-2)>Ref(H,-3);
if (nobars==4)upbar=H>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2) AND Ref(H,-2)>Ref(H,-3) AND Ref(H,-3)>Ref(H,-4);
if (nobars==5)upbar=H>Ref(H,-1) AND Ref(H,-1)>Ref(H,-2) AND Ref(H,-2)>Ref(H,-3) AND Ref(H,-3)>Ref(H,-4) AND Ref(H,-4)>Ref(H,-5);;
 
 
if (nobars==1)downbar=L<Ref(L,-1);
if (nobars==2)downbar=L<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2);
if (nobars==3)downbar=L<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3);
if (nobars==4)downbar=L<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3) AND Ref(L,-3)<Ref(L,-4);
if (nobars==5)downbar=L<Ref(L,-1) AND Ref(L,-1)<Ref(L,-2) AND Ref(L,-2)<Ref(L,-3) AND Ref(L,-3)<Ref(L,-4) AND Ref(L,-4)<Ref(L,-5);
 
 
if (stylecndl)stylec=styleCandle;
else stylec=styleBar;
 
tline=tlinebs=barhi=barlo=beglo=beghi=endi=begi=hilo=Lastlo=Lasthi=lastlo1=lasthi1=0;
for (i=1;i<BarCount;i++)
{
 
if (i>=nobars+2)
{
//if (i>begi+1)PlotText(WriteVal(I>begi+1,1.0),i,H[i]+15,colorOrange);    
 
 
    if ((upbar[i] AND i>beglo ) OR (H[i]>H[beghi]))
    {
        if (((beghi>beglo AND H[i]>H[beghi]) OR beghi==0) OR beglo>beghi)
        {
            tline[i]=H[i];
            barhi=1;
            barlo=0;
            prevhi=beghi;
            beghi=i;
            if ((H[beghi]>H[prevhi] AND prevhi>beglo) OR beglo>prevhi) {lasthi1=Lasthi;Lasthi=i;}
        }
    }
    if ((downbar[i] AND i>beghi )  OR (L[i]<L[beglo] AND i!=beghi))
    {
        if (((beglo>beghi AND L[i]<L[beglo]) OR beglo==0) OR beghi>beglo)
        {
            tline[i]=L[i];
            barlo=1;
            barhi=0;
            prevlo=beglo;
            beglo=i;
            if ((L[beglo]<L[prevlo] AND prevlo>beghi) OR beghi>prevlo){lastlo1=lastlo;Lastlo=i;}
        }
    }
}
 
 
    if (i==beglo)
    {
 
        if (prevlo>beghi)
        {
            if (showgann==0){begi=prevlo; begval=L[prevlo];}
            else {begi=Lasthi; begval=H[lasthi];}
            endi=beglo;endval=L[beglo];
        }
        else if (beghi>prevlo)
        {
 
            if (showgann==0){begi=beghi; begval=H[beghi];}
            else {begi=Lasthi; begval=H[lasthi];}
            endi=beglo;endval=L[beglo];
        }
    }
    if (i==beghi)
    {
        if (prevhi>beglo)
        {
            if (showgann==0){begi=prevhi; begval=H[prevhi];}
            else {begi=Lastlo; begval=L[Lastlo];}
 
            endi=beghi;endval=H[beghi];
        }
        else if (beglo>prevhi)
        {
            if (showgann==0){begi=beglo; begval=L[beglo];}
            else {begi=Lastlo; begval=L[Lastlo];}
            endi=beghi;endval=H[beghi];
        }
    }
 
    if (endi-begi>1)
    {
        incr=(endval-begval)/(endi-begi);
        for (k=begi;k<=endi;k++)
        {
            tline[k]=begval+(k-begi)*incr;
        }
    }   
 
if (tline[i]==0)tline[i]=Null;
//trend line end
}
tline=IIf(tline>0,tline,Null);
Plot(tline,"Trendline",colorWhite,styleLine);
//PlotOHLC(ox,Hx,Lx,cx,"Gann Trend",colorGreen,styleBar);
if (showboll)
{
    _SECTION_BEGIN("B");
    P = ParamField("Price field",-1);
    Periods = Param("Periods", 15, 2, 300, 1 );
    Width = Param("Width", 2, 0, 10, 0.05 );
    Color = ParamColor("Color", colorCycle );
    Style = ParamStyle("Style");
    Plot( BBandTop( P, Periods, Width ), "BBTop" + _PARAM_VALUES(), Color, Style ); 
    Plot( BBandBot( P, Periods, Width ), "BBBot" + _PARAM_VALUES(), Color, Style ); 
    _SECTION_END();
 
 
    _SECTION_BEGIN("MA");
    P = ParamField("Price field",-1);
    Periods = Param("Periods", 15, 2, 300, 1, 10 );
    Plot( MA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") ); 
    _SECTION_END();
}