// Downloaded From https://www.WiseStockTrader.com
x = Ref(H,-1);
Y = Ref(L,-1);
a=x+5;
b=y-5;
uptrend=StochK(39,3) > StochD(39,3,3);
downtrend=StochK(39,3) < StochD(39,3,3);
Buy = Cover = H > a AND uptrend;
Sell = Short = L < b AND downtrend;
Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorBrightGreen,0,L,-15);
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-15);
_SECTION_BEGIN("Price");
Graph0 = Close;
Graph0Style = 128;
barcolor = IIf( downtrend, 4, IIf( uptrend, 5, 1 ) );
Graph0BarColor = ValueWhen( barcolor != 0, barcolor );
SetBarFillColor( IIf( Close > Open, colorBlack, colorBlack ) ); 
SetChartBkGradientFill( ParamColor("BgTop", colorBlack),ParamColor("BgBottom", colorBlack),ParamColor("Titleblock",colorBlack)); 
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 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle |
ParamStyle("Style") | GetPriceStyle() ); 
_SECTION_END();


_SECTION_BEGIN("Background");
	SetChartOptions(0,chartShowArrows|chartShowDates);
	SetChartBkColor(ParamColor("Outer panel",colorBlack)); // color of outer border 
	SetChartBkGradientFill( ParamColor("Inner panel upper",colorBlack),ParamColor("Inner panel lower",colorBlack));
	tchoice=Param("Title Selection ",2,1,2,1);

Plot(C, "", IIf(O>=C, colorBlack, colorBlack), ParamStyle("Price Style",styleNoTitle,maskPrice));
//////////////////////////////////////////////////////////////////

_SECTION_BEGIN("Advanced Trend Lines");
function TD_Supply()
{
   return ( H > Ref(H, 1) AND H > Ref(H, -1) AND H > Ref(C, -2));
}
function TD_Demand()
{
   return ( L < Ref(L, 1) AND L < Ref(L, -1) AND L < Ref(C, -2));
}

function IsTD_Supply(n)
{
   n = (BarCount - 1) - n;
   return LastValue( Ref(H, -n) > Ref(H, -n+1) AND Ref(H, -n) > Ref(H, -n-1) AND Ref(H, -n) > Ref(C, -n-2));
}
function IsTD_Demand(n)
{
   n = (BarCount - 1) - n;
   return LastValue( Ref(L, -n) < Ref(L, -n+1) AND Ref(L, -n) < Ref(L, -n-1) AND Ref(L, -n) < Ref(C, -n-2));
}
function GetXSupport(Lo, Percentage, Back)
{
 return ((BarCount - 1) - LastValue(TroughBars(Lo, Percentage,Back)));
}
function GetYSupport(Lo, Percentage, Back)
{
 return (LastValue(Trough(Lo, Percentage, back)));
}

function GetXResistance(Hi, Percentage, Back)
{
 return ((BarCount - 1) -LastValue(PeakBars(Hi, Percentage, Back)));
}
function GetYResistance(Hi, Percentage, Back)
{
 return (LastValue(Peak(Hi, Percentage, Back)));
}
////////////////////////////////////////////////////////////////////////
//Parameters
Percentage    = Param("Percentage", 0.5, 0.01, 100. ,0.01);
Lines          = Param("Lines?", 5, 1, BarCount-2);
DrawR          = ParamList("Resistance Points", "Off|High to High|High to Low", 1);
DrawS          = ParamList("Support Points", "Off|Low to Low|Low to High", 1);
DrawAllLines    = ParamToggle("Draw All Lines?", "No|Yes", 1);
Method       = ParamToggle("Method", "TD Points|ZigZag",1);
ShowTDP       = ParamToggle("Show TD Pionts", "No|Yes");
AllOrDownR    = ParamToggle("Resistance Direction", "All|Down");
AllOrUpS       = ParamToggle("Support Direction", "All|Up");
////////////////////////////////////////////////////////////////////////
Main = C;
Con = ConS = ConR = 1;
if(DrawS=="Low to Low")
{
   Support1 = L;
   Support2 = L;
}
else
{
   Support1 = L;
   Support2 = H;
}
if(DrawR=="High to High")
{
   Resistance1 = H;
   Resistance2 = H;
}
else
{
   Resistance1 = H;
   Resistance2 = L;
}
////////////////////////////////////////////////////////////////////////
//Plotting Area
Plot(Main, "", IIf(C>O,colorBlack, colorBlack), styleBar);
if(DrawAllLines)
for(i = 2; i<=Lines+1; i++)
{
   if(DrawS!="Off")
   {
      x0 = GetXSupport(Support1, Percentage, i);
      x1 = GetXSupport(Support2, Percentage, i-1);
      y0 = GetYSupport(Support1, Percentage, i);
      y1 = GetYSupport(Support2, Percentage, i-1);
      x = LineArray(x0, y0, x1, y1, 1);
      if(!Method)
         Con = (IsTD_Demand(x0) AND IsTD_Demand(x1));
      if(AllOrUpS) ConS = y0 < y1;
      if(Con AND ConS)
         Plot(x, "", colorLightBlue, styleLine|styleThick);
   }
   if(DrawR!="Off")
   {
      x0 = GetXResistance(Resistance1, Percentage, i);
      x1 = GetXResistance(Resistance2, Percentage, i-1);
      y0 = GetYResistance(Resistance1, Percentage, i);
      y1 = GetYResistance(Resistance2, Percentage, i-1);
      x = LineArray(x0, y0, x1, y1, 1);
      if(!Method)
         Con = (IsTD_Supply(x0) AND IsTD_Supply(x1));
      if(AllOrDownR) ConR = y0 > y1;
      if(Con AND ConR)
         Plot(x, "", colorRed , styleLine|styleThick);
   }
}
else
{
   if(DrawS!="Off")
   {
      x0 = GetXSupport(Support1, Percentage, Lines+1);
      x1 = GetXSupport(Support2, Percentage, Lines);
      y0 = GetYSupport(Support1, Percentage, Lines+1);
      y1 = GetYSupport(Support2, Percentage, Lines);
      x = LineArray(x0, y0, x1, y1, 1);
      if(!Method)
         Con = (IsTD_Demand(x0) AND IsTD_Demand(x1));
      if(AllOrUpS) ConS = y0 < y1;
      if(Con AND ConS)
         Plot(x, "", colorLightBlue, styleLine|styleThick);
   }
   if(DrawR!="Off")
   {
      x0 = GetXResistance(Resistance1, Percentage, Lines+1);
      x1 = GetXResistance(Resistance2, Percentage, Lines);
      y0 = GetYResistance(Resistance1, Percentage, Lines+1);
      y1 = GetYResistance(Resistance2, Percentage, Lines);
      x = LineArray(x0, y0, x1, y1, 1);
      if(!Method)
         Con = (IsTD_Supply(x0) AND IsTD_Supply(x1));
      if(AllOrDownR) ConR = y0 > y1;
      if(Con AND ConR)
         Plot(x, "", colorRed , styleLine|styleThick);
   }
}

if(ShowTDP)
{
   PlotShapes(TD_Supply()*shapeSmallCircle, colorRed, 0, H, H*.001);
   PlotShapes(TD_Demand()*shapeSmallCircle, colorGreen, 0, L, -L*.001);
}
Title =FullName()+" ({{NAME}})\n{{DATE}}\n"+"Open: "+O+", Hi: "+H+", Lo: "+L+", Close: "+C;

_SECTION_END();


_SECTION_END();