VolumeROC


Summary

The Volume Rate of Change indicator measures the Rate Of Change of the tick volume.

Remarks

It shows whether or not a volume trend is developing and can be used to confirm price moves.

Syntax

public interface VolumeROC

Members

NameTypeSummary
Result PropertyGets or sets the time series of the Volume ROC indicator.

Example 1

private VolumeROC _volumeROC;
[Parameter("Period", DefaultValue = 14)]
public int Period { get; set; }
[Output("Main")]
public IndicatorDataSeries Result { get; set; }
protected override void Initialize()
{
   _volumeROC = Indicators.VolumeROC(Period);
}
public override void Calculate(int index)
{
   // Display Result of Indicator
   Result[index] = _volumeROC.Result[index];
}

Example 2

using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Robots
{
    /// 
    /// This sample cBot shows how to use the Volume ROC indicator
    /// 
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class VolumeROCSample : Robot
    {
        private double _volumeInUnits;
        private VolumeROC _volumeROC;
        private SimpleMovingAverage _priceSimpleMovingAverage;
        private SimpleMovingAverage _volumeROCSimpleMovingAverage;
        [Parameter("Volume (Lots)", DefaultValue = 0.01)]
        public double VolumeInLots { get; set; }
        [Parameter("Stop Loss (Pips)", DefaultValue = 10)]
        public double StopLossInPips { get; set; }
        [Parameter("Take Profit (Pips)", DefaultValue = 10)]
        public double TakeProfitInPips { get; set; }
        [Parameter("Label", DefaultValue = "Sample")]
        public string Label { get; set; }
        public Position[] BotPositions
        {
            get
            {
                return Positions.FindAll(Label);
            }
        }
        protected override void OnStart()
        {
            _volumeInUnits = Symbol.QuantityToVolumeInUnits(VolumeInLots);
            _volumeROC = Indicators.VolumeROC(14);
            _volumeROCSimpleMovingAverage = Indicators.SimpleMovingAverage(_volumeROC.Result, 14);
            _priceSimpleMovingAverage = Indicators.SimpleMovingAverage(Bars.ClosePrices, 14);
        }
        protected override void OnBar()
        {
            if (_volumeROC.Result.Last(1) < _volumeROCSimpleMovingAverage.Result.Last(1)) return;
            if (Bars.ClosePrices.Last(1) > _priceSimpleMovingAverage.Result.Last(1) && Bars.ClosePrices.Last(2) <= _priceSimpleMovingAverage.Result.Last(2))
            {
                ClosePositions(TradeType.Sell);
                ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
            }
            else if (Bars.ClosePrices.Last(1) < _priceSimpleMovingAverage.Result.Last(1) && Bars.ClosePrices.Last(2) >= _priceSimpleMovingAverage.Result.Last(2))
            {
                ClosePositions(TradeType.Buy);
                ExecuteMarketOrder(TradeType.Sell, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
            }
        }
        private void ClosePositions(TradeType tradeType)
        {
            foreach (var position in BotPositions)
            {
                if (position.TradeType != tradeType) continue;
                ClosePosition(position);
            }
        }
    }
}
Reference