The underlying assumption of this indicator is that there is buying pressure when the price trades near the asking price and selling pressure when it trades near the bid.
privateTradeVolumeIndex_tradeVolume;[Parameter]publicDataSeriesSource{get;set;}[Output("Main")]publicIndicatorDataSeriesResult{get;set;}protectedoverridevoidInitialize(){_tradeVolume=Indicators.TradeVolumeIndex(Source);}publicoverridevoidCalculate(intindex){// Display Result of IndicatorResult[index]=_tradeVolume.Result[index];}
usingcAlgo.API;usingcAlgo.API.Indicators;namespacecAlgo.Robots{// This sample cBot shows how to use the Trade Volume Index indicator[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]publicclassTradeVolumeIndexSample:Robot{privatedouble_volumeInUnits;privateTradeVolumeIndex_tradeVolumeIndex;privateSimpleMovingAverage_simpleMovingAverage;[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);_tradeVolumeIndex=Indicators.TradeVolumeIndex(Bars.ClosePrices);_simpleMovingAverage=Indicators.SimpleMovingAverage(_tradeVolumeIndex.Result,14);}protectedoverridevoidOnBar(){if(_tradeVolumeIndex.Result.HasCrossedAbove(_simpleMovingAverage.Result,0)){ClosePositions(TradeType.Sell);ExecuteMarketOrder(TradeType.Buy,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}elseif(_tradeVolumeIndex.Result.HasCrossedBelow(_simpleMovingAverage.Result,0)){ClosePositions(TradeType.Buy);ExecuteMarketOrder(TradeType.Sell,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}}privatevoidClosePositions(TradeTypetradeType){foreach(varpositioninBotPositions){if(position.TradeType!=tradeType)continue;ClosePosition(position);}}}}