The AIQ code based on Perry Kaufman’s article in the June 2014 Stocks & Commodities magazine, “Slope Divergence: Capitalizing On Uncertainty,” is provided at
www.TradersEdgeSystems.com/traderstips.htm.
I have modified the implementation somewhat from the author’s descriptions. I did not find that the system was exiting in an average of six days but was holding for a longer period. My exits might be the issue so I added a time exit that can be used to force an exit after the “maxBars” input number of bars. I liked the results when my time exit was set to hold for a maximum of nine bars.
Figure 7 shows the AIQ EDS summary long-only backtest report using the NASDAQ 100 list of stocks over the prior four years ending 4/10/2014. Neither commission nor slippage have been subtracted from these results. To get the short side of the system to show a profit, I added slope filters on the NASDAQ 100 index. Note that my parameter settings differ from those suggested by the author.
The code and EDS file can be downloaded from www.TradersEdgeSystems.com/traderstips.htm. The code is also shown here:
!SLOPE DIVERGENCE: CAPITALIZING ON UNCERTAINTY !Author: Perry Kaufman, TASC June 2014 !Coded by: Richard Denning 4/7/2014 !www.TradersEdgeSystems.com !INPUTS: momLen is 10. dvgLen1 is 5. dvgLen2 is 7. dvgLen3 is 10. entryNum is 3. maxDiverg is 3. minPrice is 10. maxBars is 3. !USER DEFINED FORMULAS: C is [close]. L is [low]. H is [high]. HH is highresult(H,momLen). LL is lowresult(L,momLen). stoch is (C - LL) / (HH - LL). momSlope1 is slope2(stoch,dvgLen1). momSlope2 is slope2(stoch,dvgLen2). momSlope3 is slope2(stoch,dvgLen3). priceSlope1 is slope2(C,dvgLen1). priceSlope2 is slope2(C,dvgLen2). priceSlope3 is slope2(C,dvgLen3). dvgBuy1 if priceSlope1 > 0 and momslope1 < 0. dvgBuy2 if priceSlope1 > 0 and momslope2 < 0. dvgBuy3 if priceSlope1 > 0 and momslope3 < 0. dvgSell1 if priceSlope1 < 0 and momslope1 > 0. dvgSell2 if priceSlope1 < 0 and momslope2 > 0. dvgSell3 if priceSlope1 < 0 and momslope3 > 0. nPriceSUp is priceSlope1 > 0 + priceSlope2 > 0 + priceSlope3 > 0. nMomSUp is momSlope1 > 0 + momSlope2 > 0 + momSlope3 > 0. nPriceSDown is priceSlope1 < 0 + priceSlope2 < 0 + priceSlope3 < 0. nMomSDown is momSlope1 < 0 + momSlope2 < 0 + momSlope3 < 0. dvgBuySum is dvgBuy1 + dvgBuy2 + dvgBuy3. dvgSellSum is dvgSell1 + dvgSell2 +dvgSell3. Buy if dvgBuySum >= entryNum and C > minPrice. AllComboExit if (nPriceSDown = maxDiverg and nMomSDown = maxDiverg) or (nPriceSUp = maxDiverg and nMomSUp = maxDiverg). Time if {position days} >= maxBars. ExitBuy if AllComboExit or Sell or Time. Sell if dvgSellSum >= entryNum. ExitSell if AllComboExit or Buy or Time.