Skip to content

Rate of Change with Bands ​

Rate of Change (ROC) with Bands, created by Vitali Apirine, is a volatility banded variant of Rate of Change (ROC). [Discuss] 💬

Loading chart data...
csharp
// C# usage syntax
IReadOnlyList<RocWbResult> results =
  bars.ToRocWb(lookbackPeriods, emaPeriods, stdDevPeriods);

Parameters ​

paramdescription
lookbackPeriods
int
Number of periods (N) to go back. Must be greater than 0. Typical values range from 10-20. Default is 20.
emaPeriods
int
Number of periods for the ROC EMA line. Must be greater than 0. Default is 5.
stdDevPeriods
int
Number of periods the standard deviation for upper/lower band lines. Must be greater than 0 and not more than lookbackPeriods. Default is 5.

Historical price bars requirements ​

You must have at least N+1 periods of bars to cover the warmup periods.

bars is a collection of generic TBar historical price bars. It should have a consistent frequency (day, hour, minute, etc). See the Guide for more information.

Response ​

csharp
IReadOnlyList<RocWbResult>

RocWbResult ​

propertydescription
Timestamp
DateTime
Date from evaluated TBar
Roc
double?
Rate of Change over N lookback periods (%, not decimal)
RocEma
double?
Exponential moving average (EMA) of Roc
UpperBand
double?
Upper band of ROC (overbought indicator)
LowerBand
double?
Lower band of ROC (oversold indicator)

Utilities ​

See Utilities and helpers for more information.

Streaming ​

Use the buffer-style List<T> when you need incremental calculations without a hub:

csharp
RocWbList rocWbList = new(lookbackPeriods, emaPeriods, stdDevPeriods);

// call from your WebSocket or SSE message handler
void OnBarReceived(IBar bar) => rocWbList.Add(bar);

// based on `ICollection<RocWbResult>`; fills as the handler runs
IReadOnlyList<RocWbResult> results = rocWbList;

Subscribe to a BarHub for advanced streaming scenarios:

csharp
BarHub barHub = new();
RocWbHub observer = barHub.ToRocWbHub(lookbackPeriods, emaPeriods, stdDevPeriods);

// call from your WebSocket or SSE message handler
void OnBarReceived(IBar bar) => barHub.Add(bar);

// results fill as the handler runs
IReadOnlyList<RocWbResult> results = observer.Results;

See Buffer lists and Stream hubs for full usage guides.

Chaining ​

This indicator may be generated from any chain-enabled indicator or method.

csharp
// example
var results = bars
    .Use(CandlePart.HL2)
    .ToRocWb(..);

Results can be further processed on Roc with additional chain-enabled indicators.

csharp
// example
var results = bars
    .ToRocWb(..)
    .ToEma(..);

See Chaining indicators for more.