Constant Range Bars (CRB) is a type of candlestick charting method that does not draw a new candle every unit of time (like every 1/5/15/30 minutes), but every time the range (high-low) of the candlestick has reached a certain preset value (e.g. 8 pips in eur/usd). Meaning that all candles have the same range, but possibly wildly varying time duration: you can have 5 candles in a minute during a news announcement, or 1 candle lasting 6 hours during a quiet Asian trading session, both with the same high minus low range. This can possibly result in smoother, more persistent intra-day charts.

If the range of the CRB is set at e.g. 8 pips for eur/usd, it can be seen that sometimes this CRB-chart will show you a nicely trending (up & down), persistent, smooth chart (the green rectangle in the image below). Sometimes however, the range of the candles will be "wrong", resulting in consecutive overlapping, noisy candle segments (the segment in the red rectangle in the image below).

enter image description here

I would think you need to create a feed-back loop that measures certain things on a moving window, both on your input (tick-data chart or maybe M1 chart) and your output: the resulting range bar chart. The goal is to dynamically adjust the range variable of the candlesticks, to create the smoothest, most persistently trending "Dynamic Range Bar" chart.

I would assume you need to calculate some of the following elements on a moving window:

==> On your input data: (the tick / M1 chart):

  • a time-based intra-day volatility measure (Standard Deviation, Average True Range, Bollinger Band width,...)
  • maybe some historical intra-day seasonality data: there is clear evidence of periodic intra-day volatility because of the nature of fx: different market centers open at different times: low vol in Asia, rising as the European banks & large funds open their desks, maximum during the overlap of the US-EU sessions, then declining as the dateline travels over the pacific, to pick back up as Wellington & Tokyo wake up.

==> On the resulting "Dynamic Range Bar Chart": measure smoothness:

  • a measure of overlap / anti-persistence (compare high, low, open, close of several consecutive candles)
  • number of directional changes: count the number of times the sign of first difference changes up, up, up, up, down, down, down, down, up, up, up, up (would be 3 out of 12: the lower the better)
  • Hurst exponent (>0.6 and the higher the better)
  • Efficiency indicator (the net change in the price movement over an n number of periods divided by the sum of the absolute values of all the bar-to-bar price changes over these same n-periods).

If your goal was to maximize the smoothness / persistence of the new "Dynamic" Range Bar chart, what criterion could you use to dynamically adjust the range? Would the above elements be enough? And how would you combine them to reach the goal?

  • $\begingroup$ Maybe I misunderstand your chart, but if a new candle is drawn everytime the high/low is a distance of 8pips then surely every candle has the same height, i.e. 8, since if it is greater it forms a new and if it is less it waits. But your image does not show this, the candles are different lengths, or are these cause by discontinuous jumps perhaps? In which case there are a few in your chart? $\endgroup$
    – Attack68
    Jun 15, 2018 at 8:15
  • $\begingroup$ I came across the same question and I've been studying for a long time a way for the bars to change with volatility but without losing their characteristics like many indicators I've found for this purpose, which would be "Perfect Range Bars". I realize that your post is 4 years old... what conclusion did you reach on this topic? $\endgroup$ Aug 21, 2022 at 16:26


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.