I modified it to show only sell signals, ie. SAR below price
Webb: You'd better check your scan, as Richard says. When SAR falls below the price, it's a buy signal. Take a look at SAR in Metastock, and you'll see.
Someone inadvertently mixed up the buy and sell signals in one of the SAR scans posted on this thread, I seem to remember. The error was fixed quickly. You might want to make sure you have the correct version. Here it is:
//SAR, by Jeff Grover (with some changes by Bob Jagow) input = "portfoli.lst"; output = "sar.lst"; float accdelta, accfac, SIP, SAR, SARp, xprice; integer j, count, buysell,firstday, flipday; accdelta := .02; accfac := accdelta; count := -100; buysell := 0; // 1-long, 0-short firstday := 1; SAR := high(count); SARp := SAR; SIP := SAR; xprice := high(count);
for j = count-1 to 0 step 1 do if( buysell = 0 ) then // short position if( firstday = 1 ) then SAR := SIP; firstday := 0; else if( low(j) < xprice ) then xprice := low(j); if( accfac < .2 ) then accfac := accfac + accdelta; endif; endif; SAR := SARp - accfac * abs(xprice - SARp); endif;
if( SAR <= high(j) or SAR <= high(j-1) ) then if( high(j) >= high(j-1)) then SAR := high(j); else SAR := high(j-1); endif; buysell := 1; flipday:= j; accfac := accdelta; SIP := xprice; firstday := 1; endif; endif;
if( buysell = 1 ) then // long position if( firstday = 1 ) then SAR := SIP; firstday := 0; else if( high(j) > xprice ) then xprice := high(j); if( accfac < .2 ) then accfac := accfac + accdelta; endif; endif; SAR := SARp + accfac * abs(xprice - SARp); endif;
if( SAR >= low(j) or SAR >= low(j-1) ) then if( low(j) <= low(j-1)) then SAR := low(j); else SAR := low(j-1); endif; buysell := 0; flipday:= j; accfac := accdelta; SIP := xprice; firstday := 1; endif; endif;
SARp := SAR; next j;
if buysell = 0 then println symbol," Sell on ", date(flipday),",",close(flipday):6:3; endif; if buysell = 1 then println symbol," Buy on ", date(flipday),",",close(flipday):6:3; endif; |