Advanced Trendline And Channel Plotter


Advanced Trendline And Channel Plotter
Advanced Trendline And Channel Plotter

//www.aflcode.com
_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,colorGreen, colorRed), 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();

Previous
Next Post »