The cumulative indicators on the advances and declines for the NYSE are provided in the first section of code that follows. However, I have never liked cumulative indicators because results can vary depending on where the accumulation is started. I do not recommend using the first code set below that replicates the author’s indicator because it runs so slowly that you will think your computer is frozen. Thus, I coded an alternative that uses the built-in advance-decline (A/D) line and then takes a moving average of the built-in A/D line. This version runs quickly and probably gives similar results.
I did not test the first coded version. I tested my second code set as a timing system on the S&P 500 ETF (SPY) from 1981 to 2/12/2013 (Figure 7). As with most timing systems, the risk was reduced based on a lower sigma than that of the markets and the return was also less than just buying and holding the SPY for the test period.
The code and EDS file can be downloaded from
The code is also shown below.
!Author: Ron McEwan, TASC April 2013
!Coded by: Richard Denning
advMAlen is 252.
C is [close].
OSD is offSetToDate(month(),day(),year()).
!AUTHORS INDICATOR AND SYSTEM (processes very slowly-see alternate below):
DaysToStart is min(advMAlen,scanany(month()=02 and day()=05
and year()=1980,252*50) then OSD).
NYadv is TickerUDF(“DJIA”,[Adv Issues]).
NYdec is TickerUDF(“DJIA”,[Dec Issues]).
ADVpctTot is (NYadv-NYdec) / (NYadv+NYdec) * 1000.
ADVcumPct is sum(ADVpctTot,^DaysToStart).
ADVcumPctMA is simpleavg(ADVcumPct,252).
HD if hasdatafor(advMAlen +10) > advMAlen.
Buy if ADVcumPct > ADVcumPctMA and HD.
Sell if ADVcumPct < ADVcumPctMA.
!ALTERNATE TO ABOVE (due to processing speed recommend that this one is used):
ADline is tickerUDF(“DJIA”,[AD Line]).
ADlineMA is simpleavg(ADline,252).
BuyAlt if ADline > ADlineMA and HD.
SellAlt if ADline < ADlineMA.