The Donchian channel is mainly used for providing entry signals. A long is established when the price closes above the Donchian Channel. Conversely, if it closes below, then a short is established.
//...privateDonchianChanneldonchian;//...protectedoverridevoidOnStart(){donchian=Indicators.DonchianChannel(Period);}protectedoverridevoidOnBar(){Print("Top Value = {0}",donchian.Top.LastValue);Print("Middle Value = {0}",donchian.Middle.LastValue);Print("Bottom Value = {0}",donchian.Bottom.LastValue);//...}
usingcAlgo.API;usingcAlgo.API.Indicators;namespacecAlgo.Robots{/// This sample cBot shows how to use the Donchian Channel indicator[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]publicclassDonchianChannelSample:Robot{privatedouble_volumeInUnits;privateDonchianChannel_donchianChannel;[Parameter("Volume (Lots)", DefaultValue = 0.01)]publicdoubleVolumeInLots{get;set;}[Parameter("Label", DefaultValue = "Sample")]publicstringLabel{get;set;}[Parameter("Source")]publicDataSeriesSource{get;set;}publicPosition[]BotPositions{get{returnPositions.FindAll(Label);}}protectedoverridevoidOnStart(){_volumeInUnits=Symbol.QuantityToVolumeInUnits(VolumeInLots);_donchianChannel=Indicators.DonchianChannel(20);}protectedoverridevoidOnBar(){if(Bars.LowPrices.Last(1)<=_donchianChannel.Bottom.Last(1)&&Bars.LowPrices.Last(2)>_donchianChannel.Bottom.Last(2)){ClosePositions(TradeType.Sell);ExecuteMarketOrder(TradeType.Buy,SymbolName,_volumeInUnits,Label);}elseif(Bars.HighPrices.Last(1)>=_donchianChannel.Top.Last(1)&&Bars.HighPrices.Last(2)<_donchianChannel.Top.Last(2)){ClosePositions(TradeType.Buy);ExecuteMarketOrder(TradeType.Sell,SymbolName,_volumeInUnits,Label);}}privatevoidClosePositions(TradeTypetradeType){foreach(varpositioninBotPositions){if(position.TradeType!=tradeType)continue;ClosePosition(position);}}}}