Hi Ed, Here is one link that defines what I called a "fractal": http://trading-stocks.netfirms.com/fractals.htm
I started by using zig percentage change to identify High and Low pivots but quickly discovered that it didn't work well for identifying price patterns. A pattern might exist but if the percentage is too sensitive or not sensitive enough the pattern would not be detected. I failed to find a universal setting that worked well for the varying prices of instruments. It amazes me that we are both doing almost the same thing using similar but slightly different methods. I use valuewhen to get the value at the peaks and trough and then sort them requiring h l h l sequence or l h l h sequence. I only use percentages for detecting patterns. You mention that you use percentage from tops and bottoms. I look for retracements that occur in reliable price patterns. I know your AB skills are beyond my "learn as I go" skills so if you ever get the itch to "team up" on a project that is in progress I would be happy to share it with you. I have created a procedure for identifying patterns but struggling with getting the various pattern names and retracement values from the procedure into an exploration. David K. Is the retracement at the previous pivot --- In [email protected], "Edward Pottasch" <empotta...@...> wrote: > > hi David, > > these "fractals" as you call them might indeed might be something to > investigate as entry points after a sell or buy is confirmed. Why do you call > them fractals? > > I add some code that gives basicly the same results you get. I just calculate > the precentage from tops and bottoms using the close at the tops and bottoms > so you get a slight different result. Also in my code I add whether a top or > a bottom is a higher high (hh), higher low (hl), double bottom (db), double > top (dt) etc. Then I calculate the arrays t1, t2, t3 and t4. t1 contains the > value of the last pivot. If the array index value of t1 is for instance 1 it > means that the last pivot was a lower low (ll). > > Therefor you can use these t1,t2 etc arrays to construct "pivot patterns". > For instance you can make the 123-system easily with this. This is not > included in this code but as an example you can construct a buy for the 123 > system using: > > // setup long: (HL OR LL)->(HH OR LH)->HL then breakout up from HH or LH > vhh = ValueWhen(hh OR lh,C); > Buy = IIf(t1 == 2 AND (t2 == 4 OR t2 == 3) AND (t3 == 2 OR t3 == 1) AND > Cross(C,vhh) AND buyValid,1,0); > Buy = Ref(Buy,-1);BuyPrice = O; > > > below the code, regards, Ed > > > // E.M.Pottasch > perc = Param("percentage", 0.5, 0.05, 5, 0.01); > dtdbthreshold = Param("dtdbthreshold", 25, 1, 50, 1); > > zz = Zig(C,perc); dzz = zz - Ref(zz,-1); > > PHigh = Ref(dzz,-1) > 0 AND dzz > 0 AND Ref(dzz,1) < 0; > PHighPrice = ValueWhen(PHigh,C); > > PLow = Ref(dzz,-1) < 0 AND dzz < 0 AND Ref(dzz,1) > 0; > PLowPrice = ValueWhen(PLow,C); > > ll = IIf( PLow AND PLowPrice < Ref(PLowPrice, -1), 1, 0 ); // shapedigit1 > hl = IIf( PLow AND PLowPrice >= Ref(PLowPrice, -1), 2, 0 ); // shapedigit2 > lh = IIf( PHigh AND PHighPrice < Ref(PHighPrice, -1), 3, 0 ); // shapedigit3 > hh = IIf( PHigh AND PHighPrice >= Ref(PHighPrice, -1), 4, 0 ); // shapedigit4 > db = IIf( PLow AND 100 * abs(PLowPrice - Ref(PLowPrice, -1)) / (abs(PLowPrice > + Ref(PLowPrice, -1)) / 2) < perc / dtdbthreshold, 5, 0 ); // shapedigit5 > dt = IIf( PHigh AND 100 * abs(PHighPrice - Ref(PHighPrice, -1)) / > (abs(PHighPrice + Ref(PHighPrice, -1)) / 2) < perc / dtdbthreshold, 6, 0 ); > // shapedigit6 > > // remove ll,hl,lh,hh when a dt or db is found > ll = IIf(db,0,ll); > hl = IIf(db,0,hl); > lh = IIf(dt,0,lh); > hh = IIf(dt,0,hh); > > combi = ll + hl + lh + hh + db + dt; > > t1 = ValueWhen(combi,combi,1); // last pivot > t2 = ValueWhen(combi,combi,2); // 1 pivot before last > t3 = ValueWhen(combi,combi,3); // 2 pivots before last > t4 = ValueWhen(combi,combi,4); // 3 pivots before last > > // zig code looks into the "future". This checks at which bar the threshold > perc has been passed > buyValid = IIf(Cross(C,(1 + (perc / 100) ) * (ValueWhen(PLow,C,1))),1,0); > buyValid = ExRem(buyValid,(ll OR hl OR db)); > buyLevel = ValueWhen(PLow,C,1) * (1 + (perc / 100)) * Flip(ll OR hl OR > db,Ref(buyValid,-1)); > buyLevel = IIf(buyLevel,buyLevel,Null); > sellValid = IIf(Cross((1 - (perc / 100) ) * (ValueWhen(PHigh,C,1)),C),1,0); > sellvalid = ExRem(sellvalid,(hh OR lh OR dt)); > sellLevel = ValueWhen(PHigh,C,1) * (1 - (perc / 100)) * Flip(lh OR hh OR > dt,Ref(sellValid,-1)); > sellLevel = IIf(sellLevel,sellLevel,Null); > > SetChartBkColor( ParamColor("ColorBG", ColorRGB( 0, 0, 0 ) ) ); > SetChartOptions(0, chartShowDates); > GraphXSpace = 5; > Plot(C,"\nLast=",ParamColor("ColorC",ColorRGB(176,224,230)),64); > Plot(buyLevel,"\nbuyLevel",ParamColor("Colorbl",ColorRGB(192,255,62)),1); > Plot(sellLevel,"\nsellLevel",ParamColor("Colorsl",ColorRGB(255,160,122)),1); > Plot(zz,"\nZig",ParamColor("ColorZZ",ColorRGB(198,226,255)),styleLine); > > PlotShapes(IIf(ll,shapeDigit1,shapeNone),ParamColor("ColorLL(1)",ColorRGB(255,0,0)),0,L,-15); > > PlotShapes(IIf(hl,shapeDigit2,shapeNone),ParamColor("ColorHL(2)",ColorRGB(0,255,0)),0,L,-15); > > PlotShapes(IIf(lh,shapeDigit3,shapeNone),ParamColor("ColorLH(3)",ColorRGB(255,0,0)),0,H,15); > > PlotShapes(IIf(hh,shapeDigit4,shapeNone),ParamColor("ColorHH(4)",ColorRGB(0,255,0)),0,H,15); > > PlotShapes(IIf(db,shapeDigit5,shapeNone),ParamColor("ColorDB(5)",ColorRGB(106,90,205)),0,L,-15); > > PlotShapes(IIf(dt,shapeDigit6,shapeNone),ParamColor("ColorDT(6)",ColorRGB(255,105,180)),0,H,15); > > > PlotShapes(IIf(buyValid,shapeUpArrow,shapeNone),ParamColor("ColorBV",ColorRGB(154,255,154)),0,L,-15); > > PlotShapes(IIf(sellValid,shapeDownArrow,shapeNone),ParamColor("ColorSV",ColorRGB(255,106,106)),0,H,-15); > > > SetBarsRequired(sbrAll,sbrAll); > > > > > > From: wooziwog > Sent: Sunday, March 14, 2010 9:33 PM > To: [email protected] > Subject: [amibroker] Re: need assistance in generating buy signal with zig > indicator > > > > rijnaa, > I have posted code that shows the zig Hi Lo pivots plotted as small pink and > green circles. In addition pink and green arrows are plotted showing when the > zig Hi or Lo would actually plot in real time. In other words the price must > change by "x" percent before the previous Hi or Lo becomes valid. You will > see visually that the zig line looks great but the valid entry and exits > often occur near turning points or pullbacks. > I have also included red and blue circles for Hi/Lo fractals. > They can produce much better results since you can confirm high and low > pivots quickly. No percentage settings are necessary for fractals, you just > need to filter the highs and lows (multiple highs may occur with no lows and > vice versa. > One example of a filter would be to check the percentage change of a fractal > Hi or Lo to your zig Hi Lo setting for pivot confirmation > > David K. > > function zhilo(pct) { > pk=PeakBars(H,pct)==0; tr=TroughBars(L,pct)==0; > zHi=Zig(H,pct); zLo=Zig(L,pct); HLAvg=(zHi+zLo)/2; > zv=IIf(pk,zHi,IIf(tr,zLo,IIf(HLAvg>Ref(HLAvg,-1),H,L))); > return Zig(zv,pct); } > //=========================== > Plot( C, "Close",47,64); > pct=0.50; > zhl=zhilo(pct); > plot(zhl,"",29,1); > ppR=Ref(zhl,-1)<zhl AND zhl>Ref(zhl,1);//pk > ppS=Ref(zhl,-1)>zhl AND zhl<Ref(zhl,1);//tr > PlotShapes(shapeSmallCircle*ppS,43,0,L,-10); > PlotShapes(shapeSmallCircle*ppR,40,0,H, 10); > //Zig RealTime Change > ppSv=IIf(L>(1+(LastValue(pct)/100))*(ValueWhen(ppS,L,1))AND > ROC(zhl,1)>0,1,0); > ppRv=IIf(H<(1-(LastValue(pct)/100))*(ValueWhen(ppR,H,1))AND > ROC(zhl,1)<0,1,0); > ppSv=ExRem(ppSv,ppRv); ppRv=ExRem(ppRv,ppSv); > PlotShapes(shapeUpArrow*ppSv,43,0,L,-20); > PlotShapes(shapeDownArrow*ppRv,40,0,H,-20); > > //Fractal High Lows > minbars=3; > bi= BarIndex(); > pk=H==HHV(H,2*minbars) AND Ref(HHV(H,minbars),minbars)< H; > pk=pk AND LastValue(bi)-ValueWhen(pk,bi)> minbars; > tr=L==LLV(L,2*minbars) AND Ref(LLV(L,minbars),minbars)> L; > tr=tr AND LastValue(bi)-ValueWhen(tr,bi)> minbars; > PlotShapes(shapeSmallCircle*pk,colorRed,0,H,20); > PlotShapes(shapeSmallCircle*tr,colorBlue,0,L,-20); > --- In [email protected], "rijnaars" <rijnaa@> wrote: > > > > How do i correct future related parts in Zig indicator > > > > i suppose it has to do with this part: > > > > change = Param("% change",5,0.1,25,0.1); > > > > need help > > > > --- In [email protected], "rijnaars" <rijnaa@> wrote: > > > > > > Thanks Mike, can you tell me where i should correct the signals to no > > > longer look in the future > > > > > > --- In [email protected], "Mike" <sfclimbers@> wrote: > > > > > > > > 1. You cannot trade a system that uses Zig unless you correct the > > > > signals to no longer be looking into the future. What you have now > > > > *looks into the future*, just be aware of that. > > > > > > > > 2. Zig is the name of a function, you cannot use it without providing > > > > the function arguments. > > > > > > > > e.g. > > > > Condition1 = Zig > Ref(Zig, -1); <-- this is wrong > > > > > > > > Instead do > > > > > > > > PZig = Zig(P, change); > > > > Condition1 = PZig > Ref(PZig, -1); > > > > > > > > Mike > > > > > > > > --- In [email protected], "rijnaars" <rijnaa@> wrote: > > > > > > > > > > _SECTION_BEGIN("ZIG - Zig"); > > > > > P = ParamField( "Price field" ); > > > > > change = Param("% change",5,0.1,25,0.1); > > > > > Plot( Zig(P, change), _DEFAULT_NAME(), ParamColor( "Color", > > > > > colorCycle ), ParamStyle("Style") ); > > > > > > > > > > Condition1=Zig>Ref(Zig,-1); > > > > > Condition2=Ref(Zig,-1)<Ref(Zig,-2); > > > > > Condition2=Zig<Ref(Zig,-1); > > > > > > > > > > Buy= Condition1; > > > > > Sell= Condition2; > > > > > > > > > > shape = Buy * shapeUpArrow + Sell * shapeDownArrow;//No same day buy > > > > > sell possible > > > > > PlotShapes( shape, IIf( Buy, colorGreen, colorRed ), 0, IIf( Buy, > > > > > Low, High ) );; > > > > > > > > > > _SECTION_END(); > > > > > > > > > > I get the next errors > > > > > > > > > > ln6 col15: error 31 syntax error expecting "(" > > > > > ln7 col15: error 31 syntax error expecting "(" > > > > > ln8 col15: error 31 syntax error expecting "(" > > > > > ln10 col16: error 29 variable condition1 used without having been > > > > > initialized. > > > > > ln11 col17: error 29 variable condition1 used without having been > > > > > initialized. > > > > > > > > > > > > > > >
