Modified on 2008/04/14 10:01 by Administrator — Categorized as: Standard Indicators


public static DIMinus Series(WealthLab.Bars bars, int period)

Parameter Description

bars The Bars object
period Indicator calculation period


DIMinus is a component of the Directional Movement System developed by Welles Wilder. This system attempts to measure the strength of price movement in positive and negative directions, as well as the overall strength of the trend. DIPlus is normally used with the DIMinus, DX and ADX indicators and typically uses 14 periods.

The DIMinus value represents downward price movement as a percentage of true range. The more each down bar's price is equal to the true range, the larger the value of the DIMinus. The DIPlus and the DIMinus are not mirror images.



-DI = Round( ( -DM / TR )* 100 )

-DI = DIMinus
TR = True Range of current bar

The -DI is then smoothed over the Period specified, the same way as a simple moving average, and, -DM is calculated as follows:

  1. For uptrending days, -DM = zero
  2. For downtrending days, -DM = yesterday's low - today's low
  3. For inside days, -DM = zero
  4. For outside days, if yesterday's low - today's low, is greater than today's high- yesterday's high, then -MD = yesterday's low - today's low, otherwise -DM = zero
  5. For upwards gap days, -DM = zero
  6. For downwards gap days, -DM = yesterday's low - today's low


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;

namespace WealthLab.Strategies { public class MyStrategy : WealthScript { protected override void Execute() { // Color bars green when DI+ > DI-, otherwise color them red ChartPane ADXPane = CreatePane( 50, true, true ); PlotSeries( ADXPane, DIMinus.Series( Bars, 14 ), Color.Red, LineStyle.Solid, 2 ); PlotSeries( ADXPane, DIPlus.Series( Bars, 14 ), Color.Green, LineStyle.Solid, 2 ); // DIPlus and DIMinus require stabilizing so start the bar count 3 to 4 times their period for(int bar = 50; bar < Bars.Count; bar++) { if( DIPlus.Series( Bars, 14 )[bar] > DIMinus.Series( Bars, 14 )[bar] ) SetBarColor( bar, Color.Green ); else SetBarColor( bar, Color.Red ); } } } }