The Average Directional Movement Index Rating (ADXR) measures the strength of the Average Directional Movement Index (ADX). It's calculated by taking the average of the current ADX and the ADX from one time period before.
usingcAlgo.API;usingcAlgo.API.Indicators;namespacecAlgo.Robots{// This sample cBot shows how to use the Average Directional Movement Index Rating indicator[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]publicclassAverageDirectionalMovementIndexRatingSample:Robot{privatedouble_volumeInUnits;privateAverageDirectionalMovementIndexRating_averageDirectionalMovementIndexRating;[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);_averageDirectionalMovementIndexRating=Indicators.AverageDirectionalMovementIndexRating(20);}protectedoverridevoidOnBar(){if(_averageDirectionalMovementIndexRating.ADXR.Last(1)<25)return;if(_averageDirectionalMovementIndexRating.DIPlus.Last(1)>_averageDirectionalMovementIndexRating.DIMinus.Last(1)&&_averageDirectionalMovementIndexRating.DIPlus.Last(2)<=_averageDirectionalMovementIndexRating.DIMinus.Last(2)){ClosePositions(TradeType.Sell);ExecuteMarketOrder(TradeType.Buy,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}elseif(_averageDirectionalMovementIndexRating.DIPlus.Last(1)<_averageDirectionalMovementIndexRating.DIMinus.Last(1)&&_averageDirectionalMovementIndexRating.DIPlus.Last(2)>=_averageDirectionalMovementIndexRating.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);}}}}
""" VolumeInLots, 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*classAverageDirectionalMovementIndexRatingSample():defon_start(self):self.volumeInUnits=api.Symbol.QuantityToVolumeInUnits(api.VolumeInLots)self.averageDirectionalMovementIndexRating=api.Indicators.AverageDirectionalMovementIndexRating(20);defon_bar_closed(self):ifself.averageDirectionalMovementIndexRating.ADXR.Last(0)<api.ADXRLevel:returnifself.averageDirectionalMovementIndexRating.DIPlus.Last(0)>self.averageDirectionalMovementIndexRating.DIMinus.Last(0)andself.averageDirectionalMovementIndexRating.DIPlus.Last(1)<=self.averageDirectionalMovementIndexRating.DIMinus.Last(1):self.close_positions(TradeType.Sell)api.ExecuteMarketOrder(TradeType.Buy,api.SymbolName,self.volumeInUnits,api.Label,api.StopLossInPips,api.TakeProfitInPips)elifself.averageDirectionalMovementIndexRating.DIPlus.Last(0)<self.averageDirectionalMovementIndexRating.DIMinus.Last(0)andself.averageDirectionalMovementIndexRating.DIPlus.Last(1)>=self.averageDirectionalMovementIndexRating.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)