You probably are using a great deal of data. If so, limit the number of bars used to 1000 or so which runs very quickly.
Bill ----- Original Message ----- From: abdulazizmr To: [email protected] Sent: Tuesday, September 02, 2008 7:41 PM Subject: [amibroker] why my Amibroker hangs and freezes when i use Demark demand formula?? Hi all.. whenever I use the DeMark Demand formula with Amibroker, the program freez and hang... it sometimes takes more than 5 minutes to upload... is there any soultion.... _SECTION_BEGIN("DeMark's Demand "); /* DeMark's Demand and Supply Line Trading System - Original code by marmal417, Johsun, Dimitris Tsokakis with variations by Bill Barnard, 2/19/04. The numerous loops make for a slow calculation when the stock of interest has more than two or three years of data. Suggest making short-lived duplicates of stocks to be studied. Colors set for use with black background */ /* Following line allows changing the number of days which must preceed a pivot. "equal" allows a pivot which is equal in value to the preceeding day. */ rules = Param("1-1day, 2-Equal, 3-3day", 3,1,3,1); /* Following line allows the use of DeMark's three qualifiers for a legitimate breakout. */ Q_On = Param("Use Qualifier", 1,0,1,1); extension = 20; // length of demand/supply line extension Plot(C,"",colorWhite,styleCandle | styleNoLabel); prevLow = IIf(Ref(L,-1)<Ref(C,-2), Ref(L,-1), Ref(C,-2)); prevHigh = IIf(Ref(H,-1)>Ref(C,-2), Ref(H,-1), Ref(C,-2)); pivothigh = IIf(rules==1, prevHigh<H AND H>Ref(H,1), IIf(rules==2, prevHigh<=H AND H>Ref(H,1), IIf(rules==3, Ref(C,-3)<H AND Ref(H,-2)<H AND Ref(H,-1)<H AND H>=Ref(H,1), 0))); pivotlow = IIf(rules==1, prevLow>L AND L<Ref(L,1), IIf(rules==2, prevLow>=L AND L<Ref(L,1), IIf(rules==3, Ref(C,-3)>L AND Ref(L,-2)>L AND Ref(L,-1)>L AND L<=Ref(L,1), 0))); /* Following section loops through the data to develop all the Buy/Sell points for back testing purposes. */ pLo = IIf(pivotLow==1, L, 1000000); pHi = IIf(pivotHigh==1, H, 0); By = 0; Sel = 0; CountHi = 0; CountLo = 0; for (i=3; i<BarCount; i++) { if (plo[i]<1000000) { CountLo = CountLo + 1; j = i; while (plo[j-0]>=plo[i] AND j>2) { pplo[j-1] = plo[j-1]; j = j - 1; } dLine = IIf(CountLo<2 OR pplo[j]>plo[i],Null, LineArray(j,pplo[j],i,plo[i],1)); exit = 0; for (k = i+2; exit==0 AND k<BarCount; k++) { SellQualifier = IIf(Q_On, C[k-1]>C[k-2] OR (2*C[k-1] - IIf(H[k-1]<C[k-2], C[k-2], H[k-1])) > dLine[k-1] OR O[k] < dLine[k], 1); if (L[k]<dLine[k] AND SellQualifier) { Sel[k] = 1; SellPrice[k]=ShortPrice[k]=dLine[k]; exit = 1; for (m=k+1; m<BarCount; m++) { Sel[m] = 0; } } } } if (phi[i]>0) { CountHi = CountHi + 1; j = i; while (phi[j-0]<=phi[i] AND j>2) { pphi[j-1] = phi[j-1]; j = j - 1; } sLine = IIf(CountHi<2 OR pphi[j]<phi[i], Null, LineArray(j,pphi[j],i,phi[i],1)); exit = 0; for (k = i+2; exit==0 AND k<BarCount; k++) { BuyQualifier = IIf(Q_On, C[k-1]<C[k-2] OR (2*C[k-1] - IIf(L[k-1]>C[k-2], C[k-2], L[k-1])) < sLine[k-1] OR O[k] > sLine[k], 1); if (H[k]>sLine[k] AND BuyQualifier) { By[k] = 1; BuyPrice[k] = CoverPrice[k]= sLine[k]; exit = 1; for (m=k+1; m<BarCount; m++) { By[m] = 0; } } } } } Buy = Cover = ExRem(By, Sel); Sell = Short = ExRem(Sel, By); SetTradeDelays(0, 0, 0, 0); eq = Equity( 0, -2 ); /* Following section constructs the plots of the demand and supply lines at the area of selection with the pole. */ x1=SelectedValue(ValueWhen(pivotlow,BarIndex(),1)); y1=SelectedValue(ValueWhen(pivotlow,L,1)); x0=SelectedValue(ValueWhen(pivotlow AND L<y1,BarIndex(),1)); y0=SelectedValue(ValueWhen(pivotlow AND L<y1,L,1)); x3=SelectedValue(ValueWhen(pivothigh,BarIndex(),1)); y3=SelectedValue(ValueWhen(pivothigh,H,1)); x2=SelectedValue(ValueWhen(pivothigh AND H>y3,BarIndex(),1)); y2=SelectedValue(ValueWhen(pivothigh AND H>y3,H,1)); demandLine =IIf(x0==0,Null,LineArray(x0,y0,x1,y1,1)); supplyLine =IIf(x2==0,Null,LineArray(x2,y2,x3,y3,1)); Plot(IIf(Cum(1)<x3+extension, supplyLine, Null),"",colorWhite, styleLine|styleThick|styleNoRescale|styleNoLabel); Plot(IIf(Cum(1)<x1+extension, demandLine, Null),"",colorWhite, styleLine|styleThick|styleNoRescale|styleNoLabel); BuyQualifier = IIf(Q_On, Ref(C, -1)<Ref(C,-2) OR (2*Ref(C,-1) - IIf(Ref(L,-1)>Ref(C,-2), Ref(C,-2), Ref(L,-1))) < Ref(supplyline, -1) OR O > supplyline, 1); SellQualifier = IIf(Q_On, Ref(C, -1)>Ref(C,-2) OR (2*Ref(C,-1) - IIf(Ref(H,-1)<Ref(C,-2), Ref(C,-2), Ref(H,-1))) > Ref(demandline, -1) OR O < demandline, 1); By = Cross(Cum(H>supplyline AND BarIndex()-1>x3 AND BuyQualifier),0); Sel = Cross(Cum(L<demandLine AND BarIndex()-1>x1 AND SellQualifier),0); PlotShapes((BarIndex()==x0 OR BarIndex()==x1)* shapeSmallCircle,colorWhite,0,L, -8); PlotShapes(Sell*shapeDownArrow,colorRed,0,H); PlotShapes(Sel*shapeDownArrow,colorLightOrange,0,H,-25); PlotShapes((BarIndex()==x2 OR BarIndex()==x3)* shapeSmallCircle,colorWhite,0,H,8); PlotShapes(Buy*shapeUpArrow,colorBrightGreen,0,L); PlotShapes(By*shapeUpArrow,colorAqua,0,L, -25); // buy and hold simulation for plotting in IB Short = Cover =0; Buy = Status("firstbarintest"); Sell = Status("lastbarintest"); SetTradeDelays(0,0,0,0); PositionSize = -100; ApplyStop(0,0,0,0); ApplyStop(1,0,0,0); ApplyStop(2,0,0,0); bh = Equity( 0, -2 ); /* Following section sets limits for StyleOwnScale plots. A typical plot statement would be: Plot(xxxx, "xxxx", 0, styleOwnScale, LL2(xxxx, yyyy, 5), UL1(xxxx, yyyy, 20)); where the 5 and the 20 represent the percent of freespace below and above the plots of xxxx and yyyy */ function LL2 (Variable1, Variable2, FreespacePercent) // lower { barpresent = Status("barvisible"); Hii = IIf(LastValue(Highest(Variable1*barpresent)) > LastValue(Highest(Variable2*barpresent)), LastValue(Highest(Variable1*barpresent)), LastValue(Highest(Variable2*barpresent))); Loo = IIf(LastValue(Lowest((Variable1-Hii)*barpresent)+Hii)< LastValue(Lowest((Variable2-Hii)*barpresent)+Hii), LastValue(Lowest((Variable1-Hii)*barpresent)+Hii), LastValue(Lowest((Variable2-Hii)*barpresent)+Hii)); range = Hii -Loo; result = Loo - 0.01*FreespacePercent*range; return result; } function UL2 (Variable1, Variable2, FreespacePercent) // upper { barpresent = Status("barvisible"); Hii = IIf(LastValue(Highest(Variable1*barpresent)) > LastValue(Highest(Variable2*barpresent)), LastValue(Highest(Variable1*barpresent)), LastValue(Highest(Variable2*barpresent))); Loo = IIf(LastValue(Lowest((Variable1-Hii)*barpresent)+Hii)< LastValue(Lowest((Variable2-Hii)*barpresent)+Hii), LastValue(Lowest((Variable1-Hii)*barpresent)+Hii), LastValue(Lowest((Variable2-Hii)*barpresent)+Hii)); range = Hii -Loo; result = Loo + range / (1 - 0.01*FreespacePercent); return result; } Plot( bh,"Buy&Hold", colorWhite, styleOwnScale, LL2(bh, eq, 5), UL2(bh, eq, 70)); Plot(eq, "Trading Result", colorRed, styleOwnScale, LL2(bh, eq, 5), UL2(bh, eq, 70)); Title= Name()+" "+Date()+EncodeColor(colorWhite)+ " Open "+WriteVal(Open, 1.3)+" Hi "+WriteVal(High,1.3)+ " Lo "+WriteVal(Low,1.3)+" Close "+WriteVal(Close,1.3)+ EncodeColor(colorRed)+" Sell =,"+WriteVal((y1-y0)/(x1-x0)+ SelectedValue(DEMAndline),1.3)+EncodeColor(colorBrightGreen)+ " Buy =,"+WriteVal((y3-y2)/(x3-x2)+ SelectedValue(supplyline),1.3 )+ "\n\\c03Use Param to select Qualifiers and Days \n "+ EncodeColor(colorWhite)+" Buy and Hold = "+WriteVal(bh, 1.3)+ EncodeColor(colorRed)+"\n Trading Result = "+WriteVal(eq, 1.3); GraphXSpace=24; _SECTION_END(); ------------------------------------ Please note that this group is for discussion between users only. To get support from AmiBroker please send an e-mail directly to SUPPORT {at} amibroker.com For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG: http://www.amibroker.com/devlog/ For other support material please check also: http://www.amibroker.com/support.html Yahoo! Groups Links ------------------------------------------------------------------------------ No virus found in this incoming message. Checked by AVG - http://www.avg.com Version: 8.0.169 / Virus Database: 270.6.15/1648 - Release Date: 9/2/2008 5:29 PM
