Craig: I've added the buy signal to the scan. This is the best I can do for now, it seems.
The picks seem accurate, but one problem with the scan now is that the output gives the date of the last Shark signal, not the date of the buy signal. I'd like to change this, but right now, I'm stumped. The scan does look only for those stocks that have given a buy signal over the past 25 days.
The idea behind the system is: Look for a three-bar shark pattern, based on progressively smaller ranges. It looks like a shark fin. Once that pattern appears, a level is set by the highest point in the fin, which is the high(-2). In the scan, I call that level "Sharkhigh." To get a buy signal, the price has to close above that level within 25 days. If you want to plot "sharkhigh" over a chart with the price, you can do it with the "BuyOK" part of the Metastock formula by plotting this:
Symmetry:=.28; Apex:=(H+L)/2; WB:=Ref(H,-2)-Ref(L,-2); 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)), If(apex <= (Ref(H,-2)-(WB*Symmetry)) AND Apex >= (Ref(L,-2)+(WB*Symmetry)) ,1,0),0);
Buyok:=ValueWhen(1,Shark=1,Ref(H,-2));
Buyok;
That's like a resistance level that the price has to break through. It lasts for 25 days or until a new Shark signal appears.
The QP scan looks for stocks that break above the high point in the shark pattern.
As I said, the one improvement I'd like to make is to have the scan give the date when the price closes above the high point in the shark pattern.
Here's the scan:
//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 symmetry, i; float shark, apex, WB, fin, sharkhigh;
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;
if close(0)>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),", ", "Sharkhigh: ", sharkhigh; //date is date when shark equals 1, not date of signal endif;
next i; |