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