Assumes that the smart money is active on days when volume decreases (measured by the Negative Volume Index) and the not-so-smart money is active on days when volume increases.
privatePositiveVolumeIndex_positiveVolume;[Parameter]publicDataSeriesSource{get;set;}[Output("Main")]publicIndicatorDataSeriesResult{get;set;}protectedoverridevoidInitialize(){_positiveVolume=Indicators.PositiveVolumeIndex(Source);}publicoverridevoidCalculate(intindex){// Display Result of IndicatorResult[index]=_positiveVolume.Result[index];}
usingcAlgo.API;usingcAlgo.API.Indicators;namespacecAlgo.Robots{// This sample cBot shows how to use the Positive/Negative Volume Index indicators[Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]publicclassVolumeIndexSample:Robot{privatedouble_volumeInUnits;privatePositiveVolumeIndex_positiveVolumeIndex;privateNegativeVolumeIndex_negativeVolumeIndex;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);_positiveVolumeIndex=Indicators.PositiveVolumeIndex(Bars.ClosePrices);_negativeVolumeIndex=Indicators.NegativeVolumeIndex(Bars.ClosePrices);_simpleMovingAverage=Indicators.SimpleMovingAverage(Bars.ClosePrices,20);}protectedoverridevoidOnBar(){if(Bars.ClosePrices.Last(1)>_simpleMovingAverage.Result.Last(1)){ClosePositions(TradeType.Sell);if(BotPositions.Length==0&&_negativeVolumeIndex.Result.Last(1)>_positiveVolumeIndex.Result.Last(1)){ExecuteMarketOrder(TradeType.Buy,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}}elseif(Bars.ClosePrices.Last(1)<_simpleMovingAverage.Result.Last(1)){ClosePositions(TradeType.Buy);if(BotPositions.Length==0&&_negativeVolumeIndex.Result.Last(1)>_positiveVolumeIndex.Result.Last(1)){ExecuteMarketOrder(TradeType.Sell,SymbolName,_volumeInUnits,Label,StopLossInPips,TakeProfitInPips);}}}privatevoidClosePositions(TradeTypetradeType){foreach(varpositioninBotPositions){if(position.TradeType!=tradeType)continue;ClosePosition(position);}}}}