The Welles Wilder's Directional Movement Indicator calculation.
Remarks
Welles Wilder's Directional Movement System uses three indicators to determine whether the market is trending, and in which direction, and sends trading signals accordingly. A buy signal occurs when +DI line crosses above -DI line. A sell signal occurs when -DI line crosses below +DI line.
usingcAlgo.API;usingcAlgo.API.Indicators;namespacecAlgo.Robots{// This sample cBot shows how to use the Directional Movement System indicator[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]publicclassDirectionalMovementSystemSample:Robot{privatedouble_volumeInUnits;privateDirectionalMovementSystem_directionalMovementSystem;[Parameter("Volume (Lots)", DefaultValue = 0.01)]publicdoubleVolumeInLots{get;set;}[Parameter("Stop Loss (Pips)", DefaultValue = 10)]publicdoubleStopLossInPips{get;set;}[Parameter("Take Profit (Pips)", DefaultValue = 10)]publicdoubleTakeProfitInPips{get;set;}[Parameter("Label", DefaultValue = "Sample")]publicstringLabel{get;set;}publicPosition[]BotPositions{get{returnPositions.FindAll(Label);}}protectedoverridevoidOnStart(){_volumeInUnits=Symbol.QuantityToVolumeInUnits(VolumeInLots);_directionalMovementSystem=Indicators.DirectionalMovementSystem(20);}protectedoverridevoidOnBar(){if(_directionalMovementSystem.ADX.Last(1)<25)return;if(_directionalMovementSystem.DIPlus.Last(1)>_directionalMovementSystem.DIMinus.Last(1)&&_directionalMovementSystem.DIPlus.Last(2)<=_directionalMovementSystem.DIMinus.Last(2)){ClosePositions(TradeType.Sell);ExecuteMarketOrder(TradeType.Buy,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}elseif(_directionalMovementSystem.DIPlus.Last(1)<_directionalMovementSystem.DIMinus.Last(1)&&_directionalMovementSystem.DIPlus.Last(2)>=_directionalMovementSystem.DIMinus.Last(2)){ClosePositions(TradeType.Buy);ExecuteMarketOrder(TradeType.Sell,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}}privatevoidClosePositions(TradeTypetradeType){foreach(varpositioninBotPositions){if(position.TradeType!=tradeType)continue;ClosePosition(position);}}}}
1 2 3 4 5 6 7 8 910111213
importclrclr.AddReference("cAlgo.API")fromcAlgo.APIimport*classTest():definitialize(self):# Periods is parameter defined in C# file of indicatorself.dms=api.Indicators.DirectionalMovementSystem(api.Period)defcalculate(self,index):# Sell and Buy are outputs defined in C# file of indicatorifself.dms.DIMinus[index]>self.dms.DIPlus[index]:api.Sell[index]=api.Bars.ClosePrices[index]+api.Symbol.TickSize*100else:api.Buy[index]=api.Bars.ClosePrices[index]-api.Symbol.TickSize*100
""" VolumeInLots, Periods, StopLossInPips, TakeProfitInPips, and Label are parameters defined in C# file of cBot. """importclrclr.AddReference("cAlgo.API")# Import cAlgo API typesfromcAlgo.APIimport*# Import trading wrapper functionsfromrobot_wrapperimport*classDirectionalMovementSystemSample():defon_start(self):self.volumeInUnits=api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)self.detrendedPriceOscillator=api.Indicators.DirectionalMovementSystem(api.Periods)defon_bar_closed(self):ifself.detrendedPriceOscillator.ADX.Last(0)<api.AdxLevel:returnifself.detrendedPriceOscillator.DIPlus.Last(0)>self.detrendedPriceOscillator.DIMinus.Last(0)andself.detrendedPriceOscillator.DIPlus.Last(1)<=self.detrendedPriceOscillator.DIMinus.Last(1):self.close_positions(TradeType.Sell)api.ExecuteMarketOrder(TradeType.Buy,api.SymbolName,self.volumeInUnits,api.Label,api.StopLossInPips,api.TakeProfitInPips)elifself.detrendedPriceOscillator.DIPlus.Last(0)<self.detrendedPriceOscillator.DIMinus.Last(0)andself.detrendedPriceOscillator.DIPlus.Last(1)>=self.detrendedPriceOscillator.DIMinus.Last(1):self.close_positions(TradeType.Buy)api.ExecuteMarketOrder(TradeType.Sell,api.SymbolName,self.volumeInUnits,api.Label,api.StopLossInPips,api.TakeProfitInPips)defget_bot_positions(self):returnapi.Positions.FindAll(api.Label)defclose_positions(self,tradeType):forpositioninself.get_bot_positions():ifposition.TradeType!=tradeType:continueapi.ClosePosition(position)
Properties
ADX
Summary
The Average Directional Movement Index (ADX) indicates whether the market is trending or ranging.
Signature
1
publicabstractIndicatorDataSeriesADX{get;}
Return Value
IndicatorDataSeries
Examples
1 2 3 4 5 6 7 8 9101112131415
//...[Robot]publicclassSampleRobot:Robot//...privateDirectionalMovementSystem_dms;protectedoverridevoidInitialize(){_dms=Indicators.DirectionalMovementSystem(Period);}//...protectedoverridevoidOnBar(){Print("The Current Average Directional Movement Index is: {0}",_dms.ADX.LastValue);}//...
1 2 3 4 5 6 7 8 9101112
importclrclr.AddReference("cAlgo.API")# Import cAlgo API typesfromcAlgo.APIimport*# Import trading wrapper functionsfromrobot_wrapperimport*classTest():defon_start(self):# Periods is parameter defined in C# file of cBotself.dms=api.Indicators.DirectionalMovementSystem(api.Period)defon_bar(self):print(f"The Current Average Directional Movement Index is: {self.dms.ADX.LastValue}")
DIPlus
Summary
The Positive Direction Indicator (+DI) indicates upward trend movement.
Signature
1
publicabstractIndicatorDataSeriesDIPlus{get;}
Return Value
IndicatorDataSeries
Examples
1 2 3 4 5 6 7 8 9101112131415
//...[Robot]publicclassSampleRobot:Robot//...privateDirectionalMovementSystem_dms;protectedoverridevoidInitialize(){_dms=Indicators.DirectionalMovementSystem(Period);}//...protectedoverridevoidOnBar(){Print("The Current Positive Direction Indicator (+DI) is: {0}",_dms.DIPlus.LastValue);}//...
1 2 3 4 5 6 7 8 9101112
importclrclr.AddReference("cAlgo.API")# Import cAlgo API typesfromcAlgo.APIimport*# Import trading wrapper functionsfromrobot_wrapperimport*classTest():defon_start(self):# Periods is parameter defined in C# file of cBotself.dms=api.Indicators.DirectionalMovementSystem(api.Period)defon_bar(self):print(f"The Current Positive Direction Indicator (+DI) is: {self.dms.DIPlus.LastValue}")
DIMinus
Summary
The Negative Direction Indicator (-DI) indicates downward trend movement.
Signature
1
publicabstractIndicatorDataSeriesDIMinus{get;}
Return Value
IndicatorDataSeries
Examples
1 2 3 4 5 6 7 8 9101112131415
//...[Robot]publicclassSampleRobot:Robot//...privateDirectionalMovementSystem_dms;protectedoverridevoidInitialize(){_dms=Indicators.DirectionalMovementSystem(Period);}//...protectedoverridevoidOnBar(){Print("The Current Negative Direction Indicator (-DI) is: {0}",_dms.DIMinus.LastValue);}//...
1 2 3 4 5 6 7 8 9101112
importclrclr.AddReference("cAlgo.API")# Import cAlgo API typesfromcAlgo.APIimport*# Import trading wrapper functionsfromrobot_wrapperimport*classTest():defon_start(self):# Periods is parameter defined in C# file of cBotself.dms=api.Indicators.DirectionalMovementSystem(api.Period)defon_bar(self):print(f"The Current Positive Direction Indicator (-DI) is: {self.dms.DIMinus.LastValue}")