[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Basic plot chart not so basic after all



PureBytes Links

Trading Reference Links

Martin,

Thanks for starting this topic. I have been following the work you 
and other have been doing on the TD lines with great interest. It 
prompted me to reread DeMark (about six times on the first chapter). 
I have concluded that the requirement that a line be questioned or 
invalidated if the close following the pivot violates the line 
pertains more to his technique of projecting price peaks or valleys 
after a break of the line than to generating timely buy or sell 
signals. It appears to me that incorporating that condition delays 
the signals, so I have not included it in my version of the code. I 
have added several things to the code you and others have posted; 
particularly, a lot of loops designed to generate all the signals 
needed for back testing. Following is my code.

Bill

//---------------------------------------------------------------

   /*  DeMark's Demand and Supply Line Trading System - 
       Original code by marmal417, Johsun, Dimitris Tsokakis 
       with variations by Bill Barnard, 2/18/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", 2,1,3,1);
// Following line allows the use of DeMark's three
// qualifiers for a legitimate breakout.
Q_On 	  = Param("Use Qualifier", 0,0,1,1); 
extension = 20;

Plot(C,"",colorWhite,styleCandle);

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;
            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;
            exit = 1;
            for (m=k+1; m<BarCount; m++)    
            {
               By[m] = 0;
            }
         }
      }
   } 
}

Buy  = ExRem(By, Sel);
Sell = ExRem(Sel, By);

// 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);

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);

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\\c03 Param Select Qualifiers and Days";

GraphXSpace=14;

//-----------------------------------------------------------------



Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
     http://groups.yahoo.com/group/amibroker/

<*> To unsubscribe from this group, send an email to:
     amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
     http://docs.yahoo.com/info/terms/