Stock Portfolio Organizer
The ultimate porfolio management solution.
Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Head and shoulder pattern (bearish) for Amibroker (AFL)
Copy & Paste Friendly
Back
// AFL code by Edward Pottasch, Dec 2012 // Bearish Head and Shoulder pattern xx=BarIndex();x=xx;Lx=LastValue(x); nbar=Param("N Pivot Bars",5,2,50,1); tf=Param("Time Frame (min)",5,1,100000,1);tfrm=in1Minute*tf; atrfac=Param("ATR tolerance factor",1.25,0.1,50,0.01); CleanPivots=ParamToggle("Use Clean Pivots","Off|On",1); PivotSymmetry=ParamToggle("Use Symmetric Pivots","Off|On",0); dispbeHS=ParamToggle("Display bearish HS","Off|On",1); extendOn=ParamToggle("Extend Neckline","Off|On",0); TimeFrameSet(tfrm); atra=ATR(20)*atrfac; if(PivotSymmetry) { fc=1; pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H; tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L; } else { fc=2; pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H; tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=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); px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3); 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); ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3); if(CleanPivots) { tr=IIf((tr==1 AND pk==1) AND px2<tx2,False,tr); pk=IIf((tr==1 AND pk==1) AND px2>tx2,False,pk); 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); tr=IIf(tr AND ((tx0<px0 AND tl1>tl0) OR (tx2>px1 AND tl1>=tl2) OR (px0==px1 AND tl1>tl0)),False,tr); pk=IIf(pk AND ((px0<tx0 AND ph1<ph0) OR (px2>tx1 AND ph1<=ph2) OR (tx0==tx1 AND ph1<ph0)),False,pk); 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); px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3); 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); ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3); tr=IIf(tr AND ((tx0<px0 AND tl1>tl0) OR (tx2>px1 AND tl1>=tl2) OR (px0==px1 AND tl1>tl0)),False,tr); pk=IIf(pk AND ((px0<tx0 AND ph1<ph0) OR (px2>tx1 AND ph1<=ph2) OR (tx0==tx1 AND ph1<ph0)),False,pk); 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); px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3); 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); ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3); } pkh=IIf(pk,H,Null); trl=IIf(tr,L,Null); TimeFrameRestore(); fact=Max(tfrm/60,Interval()/60)/(Interval()/60); Lkbk=tfrm/Interval(); if(Lkbk>1) { pk=TimeFrameExpand(pk,tfrm,expandFirst); pkh=TimeFrameExpand(pkh,tfrm,expandFirst); pkhs=IIf(!IsEmpty(pkh),1,0);pkhs=pkhs-Ref(pkhs,-1); pk=pk AND H==pkh; cond1=Sum(pk,BarsSince(pkhs==1)+1)==1 AND pk; pk=pk AND cond1; tr=TimeFrameExpand(tr,tfrm,expandFirst); trl=TimeFrameExpand(trl,tfrm,expandFirst); trls=IIf(!IsEmpty(trl),1,0);trls=trls-Ref(trls,-1); tr=tr AND L==trl; cond1=Sum(tr,BarsSince(trls==1)+1)==1 AND tr; tr=tr AND cond1; 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); px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3); 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); ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3); atra=TimeFrameExpand(atra,tfrm,expandFirst); } 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; ll_h=IIf(ll,1,0); hl_h=IIf(hl,2,0); hh_h=IIf(hh,3,0); lh_h=IIf(lh,4,0); dt_h=IIf(dt,5,0); db_h=IIf(db,6,0); combi=ll_h+hl_h+lh_h+hh_h; t0=ValueWhen(combi,combi,0); t1=ValueWhen(combi,combi,1); t2=ValueWhen(combi,combi,2); t3=ValueWhen(combi,combi,3); t4=ValueWhen(combi,combi,4); t5=ValueWhen(combi,combi,5); beHS=pk AND t1==4 AND (t2==1 OR t2==2) AND t3==3 AND t4==2 AND t5=3 AND abs(tl1-tl2)<atra*atrfac AND abs(ph1-ph2)<atra*atrfac AND ph2>(ph1+ph3)/2; Ax=ValueWhen(beHS,px3);Ay=ValueWhen(beHS,ph3); Bx=ValueWhen(beHS,tx2);By=ValueWhen(beHS,tl2); Cx=ValueWhen(beHS,px2);Cy=ValueWhen(beHS,ph2); Dx=ValueWhen(beHS,tx1);Dy=ValueWhen(beHS,tl1); Ex=ValueWhen(beHS,px1);Ey=ValueWhen(beHS,ph1); // neckline projection point F Fx=ValueWhen(beHS,tx0); aa=(Dy-By)/(Dx-Bx);bb=Dy;ii=tx0-Dx; Fy=aa*ii+bb; y0=ValueWhen(tr,L,2); y1=ValueWhen(tr,L,1); x0=ValueWhen(tr,xx,2); x1=ValueWhen(tr,xx,1); aa=(y0-y1)/(x0-x1); ls1=aa*(xx-x1)+y1; neckline=IIf(Flip(beHS,tr),ls1,Null); y0=ValueWhen(tr,L,3); y1=ValueWhen(tr,L,2); x0=ValueWhen(tr,xx,3); x1=ValueWhen(tr,xx,2); aa=(y0-y1)/(x0-x1); ls2=aa*(xx-x1)+y1; ls2=IIf(Flip(tr,pk),ls2,Null); neckline_extend=IIf(Flip(Ref(beHS,-1),pk),ls2,Null); if(extendOn)neckline=IIf(!IsEmpty(neckline_extend),neckline_extend,IIf(!IsEmpty(neckline),neckline,Null)); SetChartBkColor(ColorRGB(0,0,0)); SetChartOptions(0,chartShowDates); SetBarFillColor(IIf(C>O,colorGreen,IIf(C<=O,colorRed,colorLightGrey))); Plot(C,"Price",IIf(C>O,colorDarkGreen,IIf(C<=O,colorDarkRed,colorLightGrey)),64,0,0,0,0); Plot(pkh,"",colorRed,styleThick,0,0,0,-1); Plot(trl,"",colorBrightGreen,styleThick,0,0,0,-1); PlotShapes(shapeSmallCircle*tr,IIf(Lx-ValueWhen(tr,x)>nbar*fact,ColorRGB(0,100,0),colorWhite),0,L,-10); PlotShapes(shapeSmallCircle*pk,IIf(Lx-ValueWhen(pk,x)>nbar*fact,ColorRGB(255,0,0),colorWhite),0,H,10); Plot(neckline,"",colorYellow,styleLine); Short=Cross(ls1,C);Short=Ref(Short,-1);ShortPrice=O; Short=ExRem(Short,beHS); PlotShapes(IIf(Short,shapeSmallDownTriangle,shapeNone),colorRed,0,H,-15); PlotShapes(IIf(Short,shapeSmallCircle,shapeNone),colorWhite,0,ShortPrice,0); qq=Interval()/60; if(qq < 60){tf=" min";tt=qq;} else if(qq >= 60 AND qq < 1440){tf=" hrs";tt=qq/60;} else if(qq >= 1440){tf=" days";tt=(qq/60)/24;} qq=Max(tfrm/60,Interval()/60); if(qq < 60){tfa=" min";tta=qq;} else if(qq >= 60 AND qq < 1440){tfa=" hrs";tta=qq/60;} else if(qq >= 1440){tfa=" days";tta=(qq/60)/24;} Title = Name() + "\nNbar: " + nbar + "\nChart TF: " + tt + tf + "\nTrend TF: " + tta + tfa; abcdy_up=20; abcdy_dn=28; function GetVisibleBarCount() { lvb=Status("lastvisiblebar"); fvb=Status("firstvisiblebar"); return Min(lvb-fvb,BarCount-fvb); } function GfxConvertPixelsToBarX(Pixels) { lvb=Status("lastvisiblebar"); fvb=Status("firstvisiblebar"); pxchartleft=Status("pxchartleft"); pxchartwidth=Status("pxchartwidth"); fac=pxchartwidth/Pixels; bar=(lvb-fvb)/fac; return bar; } function GfxConvertPixelToValueY(Pixels) { local Miny,Maxy,pxchartbottom,pxchartheight; Miny=Status("axisminy"); Maxy=Status("axismaxy"); pxchartbottom=Status("pxchartbottom"); pxchartheight=Status("pxchartheight"); fac=pxchartheight/Pixels; Value=(Maxy-Miny)/fac; return Value; } AllVisibleBars=GetVisibleBarCount(); fvb=Status("firstvisiblebar"); abcdy_up=GfxConvertPixelToValueY(abcdy_up); abcdy_dn=GfxConvertPixelToValueY(abcdy_dn); for(i=0;i<AllVisibleBars;i++) { if(beHS[i+fvb] AND dispbeHS) { clr=colorRed; lvix=i+fvb; Plot(LineArray(Ax[lvix],Ay[lvix],Bx[lvix],By[lvix],0,True ),"",clr,styleThick); Plot(LineArray(Bx[lvix],By[lvix],Cx[lvix],Cy[lvix],0,True ),"",clr,styleThick); Plot(LineArray(Cx[lvix],Cy[lvix],Dx[lvix],Dy[lvix],0,True ),"",clr,styleThick); Plot(LineArray(Dx[lvix],Dy[lvix],Ex[lvix],Ey[lvix],0,True ),"",clr,styleThick); Plot(LineArray(Dx[lvix],Dy[lvix],Fx[lvix],Fy[lvix],0,True ),"",clr,styleDashed); Plot(LineArray(Bx[lvix],By[lvix],Dx[lvix],Dy[lvix],0,True ),"",clr,styleDashed); PlotText("A",Ax[lvix]-1,Ay[lvix]+abcdy_up,colorWhite,colorDarkRed); PlotText("B",Bx[lvix]-1,By[lvix]-abcdy_dn,colorWhite,colorDarkRed); PlotText("C",Cx[lvix]-1,Cy[lvix]+abcdy_up,colorWhite,colorDarkRed); PlotText("D",Dx[lvix]-1,Dy[lvix]-abcdy_dn,colorWhite,colorDarkRed); PlotText("E",Ex[lvix]-1,Ey[lvix]+abcdy_up,colorWhite,colorDarkRed); } }