Dysart's Negative Volume Index assumes that the smart money is active on days when volume decreases and the not-so-smart money is active on days when volume increases (measured by the Positive Volume Index).
Signature
1
publicabstractinterfaceNegativeVolumeIndex
Namespace
cAlgo.API.Indicators
Examples
1 2 3 4 5 6 7 8 91011121314
privateNegativeVolumeIndex_negativeVolume;[Parameter]publicDataSeriesSource{get;set;}[Output("Main")]publicIndicatorDataSeriesResult{get;set;}protectedoverridevoidInitialize(){_negativeVolume=Indicators.NegativeVolumeIndex(Source);}publicoverridevoidCalculate(intindex){// Display Result of IndicatorResult[index]=_negativeVolume.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);}}}}
1 2 3 4 5 6 7 8 91011
importclrclr.AddReference("cAlgo.API")fromcAlgo.APIimport*classTest():definitialize(self):# Source is a parameter defined in C# file of indicatorself.negativeVolumeIndex=api.Indicators.NegativeVolumeIndex(api.Source)defcalculate(self,index):# Result is an indicator output defined in C# file of indicator# Display Result of Indicatorapi.Result[index]=self.negativeVolumeIndex.Result[index]
importclrclr.AddReference("cAlgo.API")fromcAlgo.APIimport*classTest():defon_start(self):# Source is a parameter defined in C# file of cBotself.negativeVolumeIndex=api.Indicators.NegativeVolumeIndex(api.Source)defon_bar(self,index):currentValue=self.negativeVolumeIndex.Result.LastValue