// Downloaded From https://www.WiseStockTrader.com // Automatic Linear Trend Channel // Trend is defined using an example trend: MA(cp,100) // Amibroker AFL code by Edward Pottasch, November 2011 _SECTION_BEGIN("parameters"); sdfact=Param("Standard Deviation Factor",2,0.5,5,0.1); offset=Param("Offset",2,1,50,1); tc=ParamList("Channel Display",List="No Channel|Channel|ChannelRT|Both Channels",1); _SECTION_END(); function getUptrend(cp) { return IIf(cp>MA(cp,100),1,0); } function getDowntrend(cp) { return IIf(cp<=MA(cp,100),-1,0); } // trend definition cp=(H+L)/2; TrendUp=getUptrend(cp); TrendDown=getDowntrend(cp); totalTrend=IIf(TrendUp,TrendUp,TrendDown); dtotalTrend=totalTrend-Ref(totalTrend,-1); vtotalTrend=ValueWhen(dtotalTrend,dtotalTrend); // definition start points up and down trend cbull=vtotalTrend>0 AND Ref(vtotalTrend,-1)<0;cbull=Ref(cbull,1); cbear=vtotalTrend<0 AND Ref(vtotalTrend,-1)>0;cbear=Ref(cbear,1); cbull=vtotalTrend>0 AND Ref(vtotalTrend,-1)<0;cbull=Ref(cbull,1);cbull[BarCount-1]=1; cbear=vtotalTrend<0 AND Ref(vtotalTrend,-1)>0;cbear=Ref(cbear,1);cbear[BarCount-1]=1; // definition areas up and down trend nwbull=Ref(Flip(cbull,cbear),-1);nwbear=Ref(Flip(cbear,cbull),-1); xxbull=BarsSince(cbull);xxbull[BarCount-1]=xxbull[BarCount-2]+1; aaabull=LinRegIntercept(cp,xxbull);bbbbull=LinRegSlope(cp,xxbull); daabull=Ref(ValueWhen(cbear,aaabull,0),-1);dbbbull=Ref(ValueWhen(cbear,bbbbull,0),-1); yybull=daabull+dbbbull*(xxbull-1);yybull=IIf(xxbull>Max(offset,1),yybull,Null); wdbull=sdfact*StdErr(cp,xxbull);wdbull=Ref(ValueWhen(cbear,wdbull,0),-1); xxbear=BarsSince(cbear);xxbear[BarCount-1]=xxbear[BarCount-2]+1; aaabear=LinRegIntercept(cp,xxbear);bbbbear=LinRegSlope(cp,xxbear); daabear=Ref(ValueWhen(cbull,aaabear,0),-1);dbbbear=Ref(ValueWhen(cbull,bbbbear,0),-1); yybear=daabear+dbbbear*(xxbear-1);yybear=IIf(xxbear>Max(offset,1),yybear,Null); wdbear=sdfact*StdErr(cp,xxbear);wdbear=Ref(ValueWhen(cbull,wdbear,0),-1); llbull=LinearReg(cp,xxbull);llbull=IIf(xxbull>Max(Offset,1),llbull,Null); llbullp=LinearReg(cp,xxbull)+sdfact*StdErr(cp,xxbull);llbullp=IIf(xxbull>Max(Offset,2),llbullp,Null); llbullm=LinearReg(cp,xxbull)-sdfact*StdErr(cp,xxbull);llbullm=IIf(xxbull>Max(Offset,2),llbullm,Null); llbear=LinearReg(cp,xxbear);llbear=IIf(xxbear>Max(Offset,1),llbear,Null); llbearp=LinearReg(cp,xxbear)+sdfact*StdErr(cp,xxbear);llbearp=IIf(xxbear>Max(Offset,2),llbearp,Null); llbearm=LinearReg(cp,xxbear)-sdfact*StdErr(cp,xxbear);llbearm=IIf(xxbear>Max(Offset,2),llbearm,Null); _SECTION_BEGIN("Chart Colors"); SetChartBkColor(ParamColor("Background Color",colorBlack)); SetChartOptions(0,chartShowDates); SetBarFillColor(IIf(C>O,ParamColor("Candle UP Color",colorGreen),IIf(C<=O,ParamColor("Candle Down Color",colorRed),colorLightGrey))); Plot(C,"Price",IIf(C>O,ParamColor("Wick UP Color",colorDarkGreen),IIf(C<=O,ParamColor("Wick Down Color",colorDarkRed),colorLightGrey)),64,0,0,0,0); switch(tc) { case("No Channel"): break; case("Channel"): Plot(IIf(nwbull,yybull,Null),"",bbb=ColorRGB(0,255,0),styleDashed); Plot(IIf(nwbull,yybull+wdbull,Null),"",bbb,styleThick); Plot(IIf(nwbull,yybull-wdbull,Null),"",bbb,styleThick); Plot(IIf(nwbear,yybear,Null),"",sss=ColorRGB(255,0,0),styleDashed); Plot(IIf(nwbear,yybear+wdbear,Null),"",sss,styleThick); Plot(IIf(nwbear,yybear-wdbear,Null),"",sss,styleThick); PlotOHLC(IIf(nwbull,yybull+wdbull,Null),IIf(nwbull,yybull+wdbull,Null),IIf(nwbull,yybull-wdbull,Null), IIf(nwbull,yybull-wdbull,Null),"",ColorRGB(10,15,10),styleCloud|styleNoLabel,0,0,0,-1); PlotOHLC(IIf(nwbear,yybear+wdbear,Null),IIf(nwbear,yybear+wdbear,Null),IIf(nwbear,yybear-wdbear,Null), IIf(nwbear,yybear-wdbear,Null),"",ColorRGB(15,10,10),styleCloud|styleNoLabel,0,0,0,-1); break; case("ChannelRT"): Plot(IIf(nwbull,llbull,Null),"",colorGreen,styleDashed,0,1,0,1); Plot(IIf(nwbull,llbullp,Null),"",colorGreen,styleDashed,0,1,0,1); Plot(IIf(nwbull,llbullm,Null),"",colorGreen,styleDashed,0,1,0,1); Plot(IIf(nwbear,llbear,Null),"",colorRed,styleDashed,0,1,0,1); Plot(IIf(nwbear,llbearp,Null),"",colorRed,styleDashed,0,1,0,1); Plot(IIf(nwbear,llbearm,Null),"",colorRed,styleDashed,0,1,0,1); PlotOHLC(IIf(nwbull,llbullp,Null),IIf(nwbull,llbullp,Null),IIf(nwbull,llbullm,Null), IIf(nwbull,llbullm,Null),"",ColorRGB(10,15,10),styleCloud|styleNoLabel,0,0,0,-1); PlotOHLC(IIf(nwbear,llbearp,Null),IIf(nwbear,llbearp,Null),IIf(nwbear,llbearm,Null), IIf(nwbear,llbearm,Null),"",ColorRGB(15,10,10),styleCloud|styleNoLabel,0,0,0,-1); break; case("Both Channels"): Plot(IIf(nwbull,yybull,Null),"",bbb=ColorRGB(0,255,0),styleLine); Plot(IIf(nwbull,yybull+wdbull,Null),"",bbb,styleThick); Plot(IIf(nwbull,yybull-wdbull,Null),"",bbb,styleThick); Plot(IIf(nwbear,yybear,Null),"",sss=ColorRGB(255,0,0),styleLine); Plot(IIf(nwbear,yybear+wdbear,Null),"",sss,styleThick); Plot(IIf(nwbear,yybear-wdbear,Null),"",sss,styleThick); Plot(IIf(nwbull,llbull,Null),"",colorGreen,styleDashed,0,1,0,1); Plot(IIf(nwbull,llbullp,Null),"",colorGreen,styleDashed,0,1,0,1); Plot(IIf(nwbull,llbullm,Null),"",colorGreen,styleDashed,0,1,0,1); Plot(IIf(nwbear,llbear,Null),"",colorRed,styleDashed,0,1,0,1); Plot(IIf(nwbear,llbearp,Null),"",colorRed,styleDashed,0,1,0,1); Plot(IIf(nwbear,llbearm,Null),"",colorRed,styleDashed,0,1,0,1); break; } _SECTION_END();