Oh, and my 200MMX couldn't keep from overheating on the full-blown date reporting version.
Craig: The date-reporting version is the best version. Moving "symmetry" to float did the trick. The picks appear to be the same as those found with the Metastock formula, incredibly enough.
It isn't just that this version reports the date; it looks for the price closing above the high point in the shark pattern on any day after the pattern has occurred. The faster, shorter version looks only for stocks that closed on the most recent day -- close(0)-- above the high point ("Sharkhigh").
The most accurate version is the slow date-reporting version, unforch. Here it is again:
//Shark-32, by Walter T. Downs, translated for QP2 by Brooke
//Shark:=If((H<Ref(H,-1) AND L>Ref(L,-1) AND // Ref(H,-1)<Ref(H,-2) AND Ref(L,-1)>Ref(L,-2))=1, //If(apex <= (Ref(H,-2)-(WB*Symmetry)) AND // Apex >= (Ref(L,-2)+(WB*Symmetry)) ,1,0),0);
output = "shark.lst"; input="commplus.lst"; //ProcessMS = "d:\meta\macdup\",VMS;
integer i, j; float shark, apex, WB, fin, sharkhigh, symmetry;
for i = -24 to 0 step 1 do
symmetry:=.28; apex:=(high(i)+low(i))/2; WB:=high(i-2)-low(i-2);
if apex<=(high(i-2)-(WB*Symmetry)) and apex>=(low(i-2)+(WB*Symmetry)) then fin:=1; else fin:=0; endif;
sharkhigh:=0; if high(i)<high(i-1) and low(i)>low(i-1) and high(i-1)<high(i-2) and low(i-1)>low(i-2) then shark:=fin; else shark:=0; endif;
if shark=1 then sharkhigh:=high(-2+i); endif;
for j = 24 to 0 step -1 do
if i+j <=0 then if close(i+j)>sharkhigh and sharkhigh>0 and shark =1 then println symbol,",", "Close: ", close(0):6:2,", ", "Change: ", Close(0)-Close(-1):5:2, ", ", "Date: ", date(i+j),", ", "Sharkhigh: ", sharkhigh; //date of buy signal endif; endif; next j;
next i; |