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 ....
alternative ZIG type function, Fibs added for Amibroker (AFL)
Copy & Paste Friendly
Back
// Amibroker AFL code by Edward Pottasch, Nov 2012 // Alternative ZIG type function based on the ATR and VSTOP functions // Added multiple timeframes. Maximum timeframe set to 1440 minutes // Added Fib retrace levels x=xx=BarIndex(); tc=ParamList("Display Mode","ZIG|VSTOP|ZIG&VSTOP",0); disp0=ParamToggle("Display labels","Off|On",1); disp1=ParamToggle("Display value labels","Off|On",1); tf=Param("Time Frame (min)",60,1,1440,1);tfrm=in1Minute*tf; perBull=Param("perBull",20,1,150,1); perBear=Param("perBear",20,1,150,1); multBull=Param("multBull",2,0.05,4,0.05); multBear=Param("multBear",2,0.05,4,0.05); perc=Param("Percentage Range (S/R lines)",20,0.05,100,0.01); npiv=Param("N Pivots Used (S/R lines)",1,1,250,1); disp2=ParamToggle("Display S/R levels","Off|On",0); disp3=ParamToggle("Display Fibonacci levels","Off|On",0); nlev=Param("Number of Fib Levels to display",7,0,12,1); TimeFrameSet(tfrm); function vstop_func(trBull,trBear) { trailArray[0]=C[0]; for(i=1;i<BarCount;i++) { prev=trailArray[i-1]; if(C[i]>prev AND C[i-1]>prev) { trailArray[i]=Max(prev,C[i]-trBull[i]); } else if(C[i]<prev AND C[i-1]< prev) { trailArray[i]=Min(prev,C[i]+trBear[i]); } else if (C[i]>prev) { trailArray[i]=C[i]-trBull[i]; } else { trailArray[i]=C[i]+trBear[i]; } } return trailArray; } trBull=multBull*ATR(perBull); trBear=multBear*ATR(perBear); trailArray = vstop_func(trBull,trBear); ts=IIf(trailArray>C,trailArray,Null); tl=IIf(trailArray<C,trailArray,Null); TimeFrameRestore(); ts=TimeFrameExpand(ts,tfrm,expandLast); tl=TimeFrameExpand(tl,tfrm,expandLast); GraphXSpace = 5; SetChartOptions(0, chartShowDates); SetBarFillColor(IIf(C>O,ParamColor("Candle Up Color", colorBrightGreen),IIf(C<=O,ParamColor("Candle Down Color", colorRed),colorLightGrey))); Plot(C,"Price",IIf(C>O,ParamColor("Shadow Up Color", ColorRGB(0,255,0)),IIf(C<=O,ParamColor("Shadow Color", ColorRGB(255,0,0)),colorLightGrey)),64,0,0,0,0,1); lll=LLV(L,BarsSince(!IsEmpty(tl)));lll=IIf(ts,lll,Null);llls=lll; ttt1=IIf((!IsEmpty(ts) AND IsEmpty(Ref(ts,1))) OR BarIndex()==BarCount-1,1,Null); ttt=ValueWhen(ttt1,lll,0);ttt=IIf(ts,ttt,Null);ttt=IIf(ttt1,Ref(ttt,-1),ttt); tr=L==ttt;lll=Sum(tr,BarsSince(!IsEmpty(tl))); qqq=ValueWhen(ttt1,lll,0);qqq=IIf(ts,qqq,Null);qqq=IIf(ttt1,Ref(qqq,-1),qqq);tr=tr AND lll==qqq; tr=IIf((!IsEmpty(ts) AND IsEmpty(Ref(ts,1)) AND IsEmpty(Ref(ts,-1))),1,tr);//exception hhh=HHV(H,BarsSince(!IsEmpty(ts)));hhh=IIf(tl,hhh,Null);hhhs=hhh; ttt1=IIf((!IsEmpty(tl) AND IsEmpty(Ref(tl,1))) OR BarIndex()==BarCount-1,1,Null); ttt=ValueWhen(ttt1,hhh,0);ttt=IIf(tl,ttt,Null);ttt=IIf(ttt1,Ref(ttt,-1),ttt); pk=H==ttt;hhh=Sum(pk,BarsSince(!IsEmpty(ts))); sss=ValueWhen(ttt1,hhh,0);sss=IIf(tl,sss,Null);sss=IIf(ttt1,Ref(sss,-1),sss);pk=pk AND hhh==sss; pk=IIf((!IsEmpty(tl) AND IsEmpty(Ref(tl,1)) AND IsEmpty(Ref(tl,-1))),1,pk);//exception 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); minipk=H>=Ref(HHV(H,1),-1) AND Ref(HHV(H,1),1)<H; minitr=L<=Ref(LLV(L,1),-1) AND Ref(LLV(L,1),1)>L; switch(tc) { case("ZIG"): aa1=IIf(px0>tx1,(ph0-tl1)/(px0-tx1),0);aa1=IIf(pk,Ref(aa1,-1),aa1);ls1=aa1*(xx-tx1)+tl1; bb1=IIf(px0>tx1 AND px1<tx1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null); Plot(ls1,"",colorBlue,styleLine,0,0,0,2,3); aa1=IIf(tx0>px1,(tl0-ph1)/(tx0-px1),0);aa1=IIf(tr,Ref(aa1,-1),aa1);ls1=aa1*(xx-px1)+ph1; bb1=IIf(tx0>px1 AND tx1<px1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null); Plot(ls1,"",colorOrange,styleLine,0,0,0,2,3); break; case("VSTOP"): Plot(ts,"\ntrailShort",colorRed,styleLine,0,0,0,1,1); Plot(llls,"",colorRed,styleDashed,0,0,0,1,1); Plot(tl,"\ntrailLong",colorGreen,styleLine,0,0,0,1,1); Plot(hhhs,"",colorGreen,styleDashed,0,0,0,1,1); break; case("ZIG&VSTOP"): aa1=IIf(px0>tx1,(ph0-tl1)/(px0-tx1),0);aa1=IIf(pk,Ref(aa1,-1),aa1);ls1=aa1*(xx-tx1)+tl1; bb1=IIf(px0>tx1 AND px1<tx1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null); Plot(ls1,"",colorBlue,styleLine,0,0,0,2,3); aa1=IIf(tx0>px1,(tl0-ph1)/(tx0-px1),0);aa1=IIf(tr,Ref(aa1,-1),aa1);ls1=aa1*(xx-px1)+ph1; bb1=IIf(tx0>px1 AND tx1<px1,1,0);bb1=bb1+Ref(bb1,-1);bb1=IIf(bb1,1,0);ls1=IIf(bb1,ls1,Null); Plot(ls1,"",colorOrange,styleLine,0,0,0,2,3); Plot(ts,"\ntrailShort",colorRed,styleLine,0,0,0,1,1); Plot(llls,"",colorRed,styleDashed,0,0,0,1,1); Plot(tl,"\ntrailLong",colorGreen,styleLine,0,0,0,1,1); Plot(hhhs,"",colorGreen,styleDashed,0,0,0,1,1); break; } PlotShapes(shapeSmallCircle*tr,colorGreen,0,L,-10); PlotShapes(shapeSmallCircle*pk,colorRed,0,H,10); 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() + "\nChart TF: " + tt + tf + "\nZig TF: " + tta + tfa; dxhm=14;dxlm=10;dxh=0;dxl=0;dyhm=5;dylm=3;dyh=18;dyl=29;hm=30;lm=30; dyl2=42;dylm2=16;dyhm2=18;dyh2=31; 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; } 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; miny=Status("axisminy"); maxy=Status("axismaxy"); AllVisibleBars=GetVisibleBarCount(); fvb=Status("firstvisiblebar"); LowMargin=Miny+GfxConvertPixelToValueY(lm); HighMargin=Maxy-GfxConvertPixelToValueY(hm); dyllm=GfxConvertPixelToValueY(dylm); dyhhm=GfxConvertPixelToValueY(dyhm); dyll=GfxConvertPixelToValueY(dyl); dyhh=GfxConvertPixelToValueY(dyh); dxllm=GfxConvertPixelsToBarX(dxlm); dxhhm=GfxConvertPixelsToBarX(dxhm); dxll=GfxConvertPixelsToBarX(dxl); dxhh=GfxConvertPixelsToBarX(dxh); dyllm2=GfxConvertPixelToValueY(dylm2); dyll2=GfxConvertPixelToValueY(dyl2); dyhhm2=GfxConvertPixelToValueY(dyhm2); dyhh2=GfxConvertPixelToValueY(dyh2); if(disp0) { for(i=0;i<AllVisibleBars;i++) { // HH,HL etc. labels if(ll[i+fvb] AND L[i+fvb]>LowMargin) PlotText("LL",i+fvb+dxll,L[i+fvb]-dyll,colorWhite,colorDefault); if(ll[i+fvb] AND L[i+fvb]<=LowMargin) PlotText("LL",i+fvb+dxll+dxllm,L[i+fvb]-dyllm,colorWhite,colorDefault); if(hl[i+fvb] AND L[i+fvb]>LowMargin) PlotText("HL",i+fvb+dxll,L[i+fvb]-dyll,colorWhite,colorDefault); if(hl[i+fvb] AND L[i+fvb]<=LowMargin) PlotText("HL",i+fvb+dxll+dxllm,L[i+fvb]-dyllm,colorWhite,colorDefault); if(db[i+fvb] AND L[i+fvb]>LowMargin) PlotText("DB",i+fvb+dxll,L[i+fvb]-dyll,colorWhite,colorDefault); if(db[i+fvb] AND L[i+fvb]<=LowMargin) PlotText("DB",i+fvb+dxll+dxllm,L[i+fvb]-dyllm,colorWhite,colorDefault); if(hh[i+fvb] AND H[i+fvb]<HighMargin) PlotText("HH",i+fvb+dxhh,H[i+fvb]+dyhh,colorWhite,colorDefault); if(hh[i+fvb] AND H[i+fvb]>=HighMargin) PlotText("HH",i+fvb+dxhh+dxhhm,H[i+fvb]+dyhhm,colorWhite,colorDefault); if(lh[i+fvb] AND H[i+fvb]<HighMargin) PlotText("LH",i+fvb+dxhh,H[i+fvb]+dyhh,colorWhite,colorDefault); if(lh[i+fvb] AND H[i+fvb]>=HighMargin) PlotText("LH",i+fvb+dxhh+dxhhm,H[i+fvb]+dyhhm,colorWhite,colorDefault); if(dt[i+fvb] AND H[i+fvb]<HighMargin) PlotText("DT",i+fvb+dxhh,H[i+fvb]+dyhh,colorWhite,colorDefault); if(dt[i+fvb] AND H[i+fvb]>=HighMargin) PlotText("DT",i+fvb+dxhh+dxhhm,H[i+fvb]+dyhhm,colorWhite,colorDefault); } } if(disp1) { for(i=0;i<AllVisibleBars;i++) { // value labels at HH,HL etc. if(ll[i+fvb] AND L[i+fvb]>LowMargin) PlotText(""+L[i+fvb],i+fvb+dxll,L[i+fvb]-dyll2,colorWhite,colorDefault); if(ll[i+fvb] AND L[i+fvb]<=LowMargin) PlotText(""+L[i+fvb],i+fvb+dxll+dxllm,L[i+fvb]-dyllm2,colorWhite,colorDefault); if(hl[i+fvb] AND L[i+fvb]>LowMargin) PlotText(""+L[i+fvb],i+fvb+dxll,L[i+fvb]-dyll2,colorWhite,colorDefault); if(hl[i+fvb] AND L[i+fvb]<=LowMargin) PlotText(""+L[i+fvb],i+fvb+dxll+dxllm,L[i+fvb]-dyllm2,colorWhite,colorDefault); if(db[i+fvb] AND L[i+fvb]>LowMargin) PlotText(""+L[i+fvb],i+fvb+dxll,L[i+fvb]-dyll2,colorWhite,colorDefault); if(db[i+fvb] AND L[i+fvb]<=LowMargin) PlotText(""+L[i+fvb],i+fvb+dxll+dxllm,L[i+fvb]-dyllm2,colorWhite,colorDefault); if(hh[i+fvb] AND H[i+fvb]<HighMargin) PlotText(""+H[i+fvb],i+fvb+dxhh,H[i+fvb]+dyhh2,colorWhite,colorDefault); if(hh[i+fvb] AND H[i+fvb]>=HighMargin) PlotText(""+H[i+fvb],i+fvb+dxhh+dxhhm,H[i+fvb]+dyhhm2,colorWhite,colorDefault); if(lh[i+fvb] AND H[i+fvb]<HighMargin) PlotText(""+H[i+fvb],i+fvb+dxhh,H[i+fvb]+dyhh2,colorWhite,colorDefault); if(lh[i+fvb] AND H[i+fvb]>=HighMargin) PlotText(""+H[i+fvb],i+fvb+dxhh+dxhhm,H[i+fvb]+dyhhm2,colorWhite,colorDefault); if(dt[i+fvb] AND H[i+fvb]<HighMargin) PlotText(""+H[i+fvb],i+fvb+dxhh,H[i+fvb]+dyhh2,colorWhite,colorDefault); if(dt[i+fvb] AND H[i+fvb]>=HighMargin) PlotText(""+H[i+fvb],i+fvb+dxhh+dxhhm,H[i+fvb]+dyhhm2,colorWhite,colorDefault); } } if(disp2) { miny=LastVisibleValue(C)-LastVisibleValue(C)/100*perc; maxy=LastVisibleValue(C)+LastVisibleValue(C)/100*perc; for (i=1;i<=npiv;i++) { rr=ValueWhen(pk,H,i); rr=IIf(rr>maxy OR rr<miny,Null,rr); ss=ValueWhen(tr,L,i); ss=IIf(ss>maxy OR ss<miny,Null,ss); Plot(rr,"",colorBlue,styleNoLine|styleDots,0,0,0,-1); Plot(ss,"",colorRed,styleNoLine|styleDots,0,0,0,-1); } } if(disp3) { fiblevel[0]=0;fiblevel[1]=0.23;fiblevel[2]=0.38;fiblevel[3]=0.5;fiblevel[4]=0.62; fiblevel[5]=0.78;fiblevel[6]=1;fiblevel[7]=1.27;fiblevel[8]=1.62;fiblevel[9]=2; fiblevel[10]=2.62;fiblevel[11]=4.24; rr=ValueWhen(pk,H,1); ss=ValueWhen(tr,L,1); delta=rr-ss; fvb=Status("firstvisiblebar"); for(i=0;i<nlev;i++) { l1=IIf(Flip(tr,pk),ValueWhen(tr,ss+delta*fiblevel[i]),Null); Plot(l1,"",ColorRGB(255-15*i,0,0),1); l2=IIf(Flip(pk,tr),ValueWhen(pk,rr-delta*fiblevel[i]),Null); Plot(l2,"",ColorRGB(0,255-15*i,0),1); for(j=0;j<AllVisibleBars;j++) { if(tr[j+fvb]) PlotText(""+NumToStr(fiblevel[i]),fvb+j,l1[fvb+j],colorWhite); if(pk[j+fvb]) PlotText(""+NumToStr(fiblevel[i]),fvb+j,l2[fvb+j],colorWhite); } } }