OnBalanceVolume


Summary

On Balance Volume measures buying and selling pressure as a cumulative indicator that adds volume on up days and subtracts volume on down days.

Syntax

public interface OnBalanceVolume

Members

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

Example 1

private OnBalanceVolume _onBalanceVolume;
[Parameter]
public DataSeries Source { get; set; }
[Output("Main")]
public IndicatorDataSeries Result { get; set; }
protected override void Initialize()
{
   _onBalanceVolume = Indicators.OnBalanceVolume(Source);
}
public override void Calculate(int index)
{
   // Display Result of Indicator
   Result[index] = _onBalanceVolume.Result[index];
}

Example 2

using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo.Robots
{
    // This sample cBot shows how to use the On Balance Volume indicator
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class OnBalanceVolumeSample : Robot
    {
        private double _volumeInUnits;
        private OnBalanceVolume _onBalanceVolume;
        private SimpleMovingAverage _simpleMovingAverage;
        [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);
            _onBalanceVolume = Indicators.OnBalanceVolume(Bars.ClosePrices);
            _simpleMovingAverage = Indicators.SimpleMovingAverage(_onBalanceVolume.Result, 9);
        }
        protected override void OnBar()
        {
            if (_onBalanceVolume.Result.HasCrossedAbove(_simpleMovingAverage.Result, 0))
            {
                ClosePositions(TradeType.Sell);
                ExecuteMarketOrder(TradeType.Buy, SymbolName, _volumeInUnits, Label, StopLossInPips, TakeProfitInPips);
            }
            else if (_onBalanceVolume.Result.HasCrossedBelow(_simpleMovingAverage.Result, 0))
            {
                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