Oops, left some dead code in (i.e., "change").  You can use "change" to specify 
the minimum amount of change needed to meet the condition by modifying as 
follows: 

citLow = IIF( (change * MA( C, 27 ) ) < Ref( MA( C, 27 ), -1 ), etc.

You could also play around with the Ref() lookback by replacing -1 with
  
lookback = Param( "Lookback",  -1, -5, -1, 1 );

And similarly with the 27 MA period.

Have fun.

Bill

----- Original Message ----- 
From: wavemechanic 
To: [email protected] 
Sent: August 05, 2010 1:00 PM
Subject: Re: [amibroker] Ned Davis' Slope Rule


Abbie,

Instead of wandering around in "loop land" think about arrays (see Users Guide 
for array discussion).  Then something along these lines would give you Davis' 
rule:

change  = Param( "Change", 1.005, 1, 1.01, .001 );
citLow = IIF( MA( C, 27 ) < Ref( MA( C, 27 ) , -1 ), 1, 0 );
citHigh = IIF( MA( C, 27 ) > Ref( MA( C, 27 ), -1 ), 1, 0 );
Plot( ( citLow * -1 ) + ( citHIgh * 1 ), "",  IIF( citLow, colorRed, colorWhite 
) );

Bill
  ----- Original Message ----- 
  From: sendfreetest 
  To: [email protected] 
  Sent: August 05, 2010 12:06 PM
  Subject: [amibroker] Ned Davis' Slope Rule


  Hi,

  I am trying to use Ned Davis' "slope rule" to determine if the
  market is up or down.

  The market is bullish when the ^DJU - 27 week simple moving
  average has been trending down and then rises by any amount
  (i.e. reverses).
  ( Then the variable djupermit should be assigned a value of 1.)

  The market is bearish when the ^DJU - 27 week simple moving
  average has been trending up and then falls by 3%.
  ( Then the variable djupermit should be assigned a value of -1.)


  I have been struggling to write a nested loop with multiple
  undefined variables to accomplish the above. I'm not sure
  if I should be writing a function instead?

  Any help or guidance getting the code below to work 
  would be most appreciated.

  Sincerely,

  Abbie Drew


  SetForeign( "^DJU" );
  TimeFrameSet( inWeekly );
  wc = Close ;
  sMA = MA( C, 27 );

  djupermit[0]=0;

  djulow[0] = 0;

  djuhigh[0] = 0;

  for ( i = 1; i < BarCount; i++ )
  //Calculate dju low
  {
      if ( djupermit[ i] = -1 AND djupermit[ i -1] != -1 ) { djulow[ i ] = 
sMA[i]; }
      else if ( djupermit[ i] != 1 AND sMA[i] < djulow[ i -1 ]) { djulow[ i ] = 
sMA[i]; }
      else djulow[ i ] = djulow[ i - 1 ];
  }

  //Calculate dju high
  for ( i = 1; i < BarCount; i++ )
  {
      if ( djupermit[ i] = 1 AND djupermit[ i -1] != 1 ) { djuhigh[ i ] = 
sMA[i]; }
      else if ( djupermit[ i] != -1 AND sMA[i] > djuhigh[ i -1 ]) { djuhigh[ i 
] = sMA[i]; }
      else djuhigh[ i ] = djuhigh[ i - 1 ];
  }
  //Calculate dju permission
  for ( i = 1; i < BarCount; i++ )
  {

      if ( djupermit[ i -1] != 1 AND sMA[i] > djulow[i - 1]) { djupermit[ i ] = 
1 ; }
      else if ( djupermit[ i -1] != -1 AND sMA[i] < (djuhigh[ i -1 ]*0.97)) { 
djupermit[ i ] = -1; }
      else djupermit[ i ] = djupermit[ i - 1 ] ;
  }

  RestorePriceArrays();
  Filter = 1 ;
           AddColumn( TimeFrameExpand( djupermit, inWeekly ), "djupermit", 1.2 
);
           AddColumn( TimeFrameExpand( djulow, inWeekly ), "djulow", 1.2 );
           AddColumn( TimeFrameExpand( djuhigh, inWeekly ), "djuhigh", 1.2 );
           AddColumn( TimeFrameExpand( sMA, inWeekly ), "sma", 1.2 );
           AddColumn( TimeFrameExpand( wC, inWeekly ), "wc", 1.2);





  ------------------------------------

  **** IMPORTANT PLEASE READ ****
  This group is for the discussion between users only.
  This is *NOT* technical support channel.

  TO GET TECHNICAL SUPPORT send an e-mail directly to 
  SUPPORT {at} amibroker.com

  TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
  http://www.amibroker.com/feedback/
  (submissions sent via other channels won't be considered)

  For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
  http://www.amibroker.com/devlog/

  Yahoo! Groups Links



Reply via email to