1. Introduction

Bollinger Bands, introduced by John Bollinger in the 1980s, remain one of the most widely used volatility-based indicators in quantitative trading. The core idea is straightforward: price tends to oscillate within a range defined by its own recent volatility, and extreme deviations from the mean often signal the beginning of a sustained trend rather than a mere aberration.

This article examines a breakout strategy that combines three technical indicators in a coherent framework:

  • Bollinger Bands define the breakout thresholds based on rolling volatility.
  • CCI (Commodity Channel Index) serves as a directional filter to distinguish bullish from bearish regimes.
  • ATR (Average True Range) provides a volatility-adaptive trailing stop mechanism.

The strategy waits for price to pierce the Bollinger Band boundary in the direction confirmed by CCI, and manages risk through a chandelier-style trailing stop anchored to ATR.

2. Statistical Foundation of Bollinger Bands

2.1 Definition

Given a time series of closing prices {Ct}\{C_t\}, the Bollinger Band at time tt with window length nn and deviation multiplier kk is defined as:

Middle Bandt=SMA(C,n)t=1ni=0n1Cti\text{Middle Band}_t = \text{SMA}(C, n)_t = \frac{1}{n}\sum_{i=0}^{n-1} C_{t-i}Upper Bandt=SMA(C,n)t+kσt\text{Upper Band}_t = \text{SMA}(C, n)_t + k \cdot \sigma_tLower Bandt=SMA(C,n)tkσt\text{Lower Band}_t = \text{SMA}(C, n)_t - k \cdot \sigma_t

where the rolling standard deviation is:

σt=1n1i=0n1(CtiSMA(C,n)t)2\sigma_t = \sqrt{\frac{1}{n-1}\sum_{i=0}^{n-1}(C_{t-i} - \text{SMA}(C, n)_t)^2}

2.2 Normality Assumption and Bandwidth Interpretation

The construction of Bollinger Bands implicitly assumes that price returns are approximately normally distributed. Under this assumption, the probability of price falling within kk standard deviations of the mean follows directly from the Gaussian cumulative distribution:

Multiplier kkProbability of Containment
1.068.27%
2.095.45%
3.099.73%

When k=3.4k = 3.4 (as used in this strategy), the theoretical containment probability exceeds 99.93%. In practice, financial return distributions exhibit excess kurtosis and fat tails, meaning the actual containment rate is lower than the Gaussian prediction. Nevertheless, a wide band ensures that only genuinely extreme moves trigger entries, filtering out noise and false breakouts.

2.3 Bandwidth as a Volatility Measure

The Bandwidth indicator normalizes the distance between bands relative to the middle band:

BWt=Upper BandtLower BandtMiddle Bandt=2kσtSMA(C,n)t\text{BW}_t = \frac{\text{Upper Band}_t - \text{Lower Band}_t}{\text{Middle Band}_t} = \frac{2k\sigma_t}{\text{SMA}(C, n)_t}

A shrinking bandwidth (the “squeeze”) signals low volatility and often precedes a significant directional move. This property makes Bollinger Bands particularly suitable for breakout strategies: periods of compressed volatility tend to be followed by expansion.

3. CCI as a Trend Filter

3.1 Definition

The Commodity Channel Index, proposed by Donald Lambert in 1980, measures the deviation of typical price from its statistical mean:

TPt=Ht+Lt+Ct3\text{TP}_t = \frac{H_t + L_t + C_t}{3}CCIt=TPtSMA(TP,n)t0.015MDt\text{CCI}_t = \frac{\text{TP}_t - \text{SMA}(\text{TP}, n)_t}{0.015 \cdot \text{MD}_t}

where the mean deviation is:

MDt=1ni=0n1TPtiSMA(TP,n)t\text{MD}_t = \frac{1}{n}\sum_{i=0}^{n-1}|\text{TP}_{t-i} - \text{SMA}(\text{TP}, n)_t|

The constant 0.015 is Lambert’s scaling factor, chosen so that approximately 70–80% of CCI values fall within the range [100,+100][-100, +100].

3.2 Relationship to Standard Deviation

There is a useful connection between mean deviation and standard deviation. For a normal distribution, the ratio σ/MD1.2533\sigma / \text{MD} \approx 1.2533, which implies:

CCItTPtTPˉ0.015σt/1.2533=83.56(TPtTPˉ)σt\text{CCI}_t \approx \frac{\text{TP}_t - \bar{\text{TP}}}{0.015 \cdot \sigma_t / 1.2533} = \frac{83.56 \cdot (\text{TP}_t - \bar{\text{TP}})}{\sigma_t}

This reveals that CCI is essentially a scaled z-score of typical price. A CCI value above zero indicates that typical price is above its moving average, consistent with a bullish regime; a value below zero suggests bearish conditions.

3.3 Role as a Directional Gate

In this strategy, CCI serves as a binary directional filter rather than a continuous signal:

  • CCI>0\text{CCI} > 0: The market is in a bullish phase; only long entries are permitted.
  • CCI<0\text{CCI} < 0: The market is in a bearish phase; only short entries are permitted.

This gating mechanism prevents the strategy from entering breakouts against the prevailing trend direction, reducing the frequency of whipsaw trades.

4. ATR Chandelier Stop

4.1 True Range and ATR

The True Range (TR), introduced by J. Welles Wilder in 1978, captures the full range of price movement including gaps:

TRt=max(HtLt,  HtCt1,  LtCt1)\text{TR}_t = \max\left(H_t - L_t,\; |H_t - C_{t-1}|,\; |L_t - C_{t-1}|\right)

The Average True Range is an exponential moving average of TR:

ATRt=EMA(TR,n)t=ATRt1+2n+1(TRtATRt1)\text{ATR}_t = \text{EMA}(\text{TR}, n)_t = \text{ATR}_{t-1} + \frac{2}{n+1}(\text{TR}_t - \text{ATR}_{t-1})

or equivalently, a simple moving average can be used:

ATRt=1ni=0n1TRti\text{ATR}_t = \frac{1}{n}\sum_{i=0}^{n-1}\text{TR}_{t-i}

4.2 Chandelier Stop Derivation

The chandelier exit, proposed by Charles Le Beau and popularized by Alexander Elder, hangs the stop level from the highest high (for longs) or lowest low (for shorts), offset by a multiple of ATR:

Long Stopt=HHtmATRt\text{Long Stop}_t = \text{HH}_t - m \cdot \text{ATR}_tShort Stopt=LLt+mATRt\text{Short Stop}_t = \text{LL}_t + m \cdot \text{ATR}_t

where HHt\text{HH}_t and LLt\text{LL}_t are the highest high and lowest low since entry, and mm is the ATR multiplier.

The intuition is as follows. If we model price as a random walk with drift, the maximum excursion over TT bars from the entry price follows an approximate distribution related to the range of a Wiener process. For a zero-drift random walk with step volatility σ\sigma, the expected maximum drawdown over TT steps scales as σ2T/π\sigma\sqrt{2T/\pi}. The ATR multiplier mm provides a buffer proportional to the current volatility regime. When m=5.2m = 5.2 (as in this strategy), the stop is placed approximately 5.2 average true ranges below the peak, which accommodates normal volatility while still protecting against adverse trend reversals.

4.3 Adaptive Properties

The chandelier stop adapts to market conditions in two dimensions:

  1. Volatility adaptation: As ATR increases, the stop moves further from the extreme, giving the position more room in volatile markets.
  2. Price adaptation: As the position moves into profit (new extremes are set), the stop ratchets upward for longs (or downward for shorts), locking in gains.

The stop never moves against the position: for longs, Long Stopt=max(Long Stopt1,  HHtmATRt)\text{Long Stop}_t = \max(\text{Long Stop}_{t-1},\; \text{HH}_t - m \cdot \text{ATR}_t).

5. Strategy Specification

5.1 Parameters

ParameterSymbolDefaultDescription
Bollinger windownBn_B18SMA period for Bollinger Bands
Bollinger deviationkk3.4Standard deviation multiplier
CCI windownCn_C10Period for CCI calculation
ATR windownAn_A30Period for ATR calculation
Stop multipliermm5.2ATR multiplier for chandelier stop

5.2 Entry Logic

At each bar, the strategy computes the three indicators and evaluates entry conditions:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function ON_BAR(bar):
    boll_mid = SMA(close, n_B)
    boll_up  = boll_mid + k * StdDev(close, n_B)
    boll_low = boll_mid - k * StdDev(close, n_B)
    cci      = CCI(high, low, close, n_C)
    atr      = ATR(high, low, close, n_A)

    if position == 0:
        if cci > 0:
            # Bullish regime: place buy stop above upper band
            BUY_STOP(boll_up, quantity)
        else if cci < 0:
            # Bearish regime: place sell stop below lower band
            SELL_STOP(boll_low, quantity)

    if position > 0:
        intra_high = max(intra_high, bar.high)
        long_stop  = intra_high - m * atr
        # Trail stop upward only
        long_stop  = max(prev_long_stop, long_stop)
        SELL_STOP(long_stop, position)

    if position < 0:
        intra_low  = min(intra_low, bar.low)
        short_stop = intra_low + m * atr
        # Trail stop downward only
        short_stop = min(prev_short_stop, short_stop)
        BUY_STOP(short_stop, abs(position))

5.3 Risk Management Summary

The strategy’s risk framework consists of three layers:

  1. Band width filter: The 3.4σ\sigma Bollinger Band ensures only extreme moves trigger entry.
  2. Directional filter: CCI gating prevents counter-trend entries.
  3. Volatility stop: The 5.2 ×\times ATR chandelier stop provides a wide, adaptive trailing stop that respects the current volatility regime.

6. Design Rationale

Several design choices warrant discussion:

Wide Bollinger Bands (k=3.4k = 3.4). Standard practice uses k=2k = 2, which captures approximately 95% of price action under Gaussian assumptions. The wider band at k=3.4k = 3.4 significantly raises the bar for entry, accepting fewer signals in exchange for higher selectivity. This is appropriate for trend-following strategies where the profit distribution is characterized by many small losses and few large gains.

CCI as a binary filter. Using CCI solely for direction (positive/negative) rather than as a continuous strength measure avoids the need for additional threshold optimization and keeps the signal robust across instruments and timeframes.

Large stop multiplier (m=5.2m = 5.2). A stop placed 5.2 ATR from the extreme is intentionally wide. In trend-following, the primary risk is being stopped out prematurely during normal retracements. The large buffer reduces this risk at the cost of larger per-trade losses when the stop is eventually hit.

Timeframe selection. Operating on a 15-minute bar compresses high-frequency noise and reduces the number of signals, aligning with the strategy’s goal of capturing sustained trends rather than scalping intraday fluctuations.

References

  1. Bollinger, J. (2001). Bollinger on Bollinger Bands. McGraw-Hill.
  2. Lambert, D. (1980). “Commodity Channel Index: Tool for Trading Cyclic Trends.” Commodities Magazine.
  3. Wilder, J. W. (1978). New Concepts in Technical Trading Systems. Trend Research.
  4. Le Beau, C., & Lucas, D. W. (1992). Computer Analysis of the Futures Market. Business One Irwin.
  5. Elder, A. (1993). Trading for a Living. John Wiley & Sons.