Idea in brief
The chandelier exit is a trailing stop that hangs below the trade's high, like a chandelier from a ceiling. The distance is set not in points or percent, but in ATR. For a long, the stop equals the highest price since entry minus several ATR. When price makes a new high, the stop rises. When volatility grows, the stop moves away and gives price more room. When volatility falls, the stop tightens toward price.
Richard Brennan, a systematic trend follower and co-host of the channel, calls the chandelier their trailing technique. Brennan has about ten systems with different entries, and each cuts losses in its own way. The common idea: a small initial stop and a trail that lets profit run while the trend is alive and decides by itself when the trend is over.
Brennan names neither the ATR multiplier nor the window length. Brennan describes how to find them: on the whole portfolio of markets at once, at the boundary between market noise and the tails of the distribution. The name and the classic form of this exit are usually attributed to Chuck LeBeau, who is not mentioned in the video. Below is an exit block that plugs into any strategy, and an example on the turtle card.
Why it might work
Brennan starts from the shape of the return distribution. Most of the time the market fluctuates around equilibrium, and such moves resemble coin flips. Occasionally there are long directional moves; these are the fat tails. A trend follower makes money only on the tails. So the stop should sit where the noise ends: closer, and it will knock you out of future trends; farther, and it will give back too much on reversals.
A distance in ATR tracks this boundary automatically. In a nervous market the noise is wider, and the stop moves away. In a calm market the noise is narrower, and the stop tightens. The same multiplier works on different markets and in different years, so it can be chosen on a portfolio of dozens of instruments rather than on a single chart.
The author shows what to expect from such an exit. About 90% of trades end in small losses or small profits, and 5-10% produce big wins that pay for everything else. This is the author's description of their systems in general; there are no separate statistics for the exit.
Rules
Exit block (author's type, Finetiq parameters)
// calculated at the close of each bar, the new level applies from the next bar
ATRn = ATR(22) // Finetiq: length 22, starting value
k = 3 // Finetiq: multiplier, starting value
// on the entry bar
LongStop = EntryPrice - k * ATRn // author: initial volatility-based stop, this is 1R
R = EntryPrice - LongStop
// on every following bar while the position is open
HighSince = highest High from the entry bar to the current bar // Finetiq: anchored to the trade's high
Chand = HighSince - k * ATRn
LongStop = MAX(LongStop[1], Chand) // reading 1: the stop only moves up
SELL STOP at LongStop // Finetiq: exit on touch
// reading 2: LongStop = Chand without MAX
// the author says the trail "breathes" in high volatility. Literally this means
// that the stop can move down when ATR rises. Test both readings
// short is mirrored
ShortStop = MIN(ShortStop[1], LowSince + k * ATRn)
BUY STOP at ShortStop
Execution variants
// close-based exit variant (Finetiq): the author does not specify touch or close
IF Close < LongStop THEN EXIT AT NEXT BAR OPEN
// anchor variant (Finetiq): from the high of the last 22 bars instead of the trade's high
Chand = Highest(High, 22) - k * ATRn
Calibration by the author's method
Brennan looks for the noise boundary on a large sample but does not name the metric for that boundary. Below is our formalization through MAE, the maximum adverse excursion.
// Finetiq: on the whole portfolio of markets at once, without tuning to an individual market
FOR each trade of the base strategy without trailing (time exit or signal exit)
MAE_ATR = (EntryPrice - lowest Low during the trade) / ATRn at entry
// look at the MAE_ATR distribution for trades that eventually made more than 5R
k = the value that 90% of such trades stay within // Finetiq: starting rule
// then test the neighborhood of k on the whole portfolio and choose a plateau, not a peak
Example: turtles with a chandelier exit
The turtle-4w-2w card: entry on a breakout of the 20-bar high, exit on a breakout of the 10-bar low. We change only the exit.
Entry20 = highest High of the last 20 closed bars // from the turtle card
IF position = FLAT
BUY STOP at Entry20
IF position = LONG
SELL STOP at LongStop // instead of SELL STOP at Exit10
// position size as in the turtle card: the same risk in money,
// distance to the stop = EntryPrice - (EntryPrice - k * ATRn) = k * ATRn
Contracts = floor(RiskMoney / (k * ATRn * PointValue))
Parameters
| Parameter | Value | Source |
|---|---|---|
| Exit type | trail from the extreme, adjusted for volatility | author |
| Initial stop | volatility-based, defines 1R | author |
| Calibration | on the whole portfolio, 70-100 markets | author |
| ATR length | 22 bars | Finetiq |
| Multiplier k | 3 | Finetiq |
| Anchor | highest price since entry | Finetiq |
| Stop movement | only in the direction of the trade | Finetiq |
| Execution | stop order on touch | Finetiq |
| Timeframe | D1 | Finetiq |
| MAE calibration threshold | 90% of trades above 5R | Finetiq |
What to test
- Parameter neighborhood on many markets. k = 2, 2.5, 3, 4, 5 and ATR 10, 22, 50 on 20-30 markets at once. Look at the median across markets and at the shape of the surface. The author chooses stops on a portfolio, not on a single chart, and this is the main protection against overfitting.
- Ratchet versus breathing. Reading 1 (the stop only tightens) versus reading 2 (the stop moves away when ATR rises). Compare the average loss on reversals and the number of trades knocked out before the trend continued.
- From the trade's high or from a window. Anchoring to the highest price since entry versus the high of the last 22 bars. On long trends the difference is small, on short trades it is noticeable.
- Touch versus close. A stop order versus an exit at the open after a close beyond the level. A close-based exit gets knocked out less often on noisy bars, but does worse on gaps.
- Versus a channel exit. Turtles with Exit10 versus turtles with the chandelier on the same portfolio. Compare not only the total, but also the share of trades above 10R and the contribution of the best 5% of trades. This is exactly how the author's positive skew thesis is tested.
- Compression before a spike. Select trades closed on the first wide bar after a period of low volatility. If there are many, the stop tightens too much in the calm phase, and a minimum distance is needed.
- Gaps. Count losses larger than 1R caused by gaps through the stop. On stocks with earnings reports and on CFDs after weekends they happen more often than on futures.
Platform notes
TradingView (Pine Script)
ta.atruses Wilder smoothing. In EasyLanguage and MQL5 the built-in ATR is a simple average of TR, so stop levels will differ between the three platforms. Choose one formula and calculate it the same way everywhere.- Set the stop as a price:
strategy.exit("CH", "L", stop = longStop), recalculating the level on every bar. Thetrail_pointsandtrail_offsetparameters are set in ticks and keep a fixed distance; they do not account for ATR. - The highest price since entry is easier to accumulate yourself: a
var float hhvariable that equalshighon the entry bar andmath.max(hh, high)afterwards. Entry bar:strategy.opentrades.entry_bar_index(0). - The ratchet is also manual:
longStop := math.max(nz(longStop[1]), hh - k * atr), reset when the position closes.
MultiCharts and TradeStation (EasyLanguage)
AvgTrueRange(22)is a simple average. For Wilder smoothing:ATRw = ATRw[1] + (TrueRange - ATRw[1]) / 22.- Exit as a price:
Sell next bar at LongStop stop. The order lives one bar and is sent on every bar while the position is open. - Highest price since entry:
Highest(High, BarsSinceEntry + 1). On the entry barBarsSinceEntry = 0, so the window is one bar. SetDollarTrailingmeasures the distance in money from the maximum open profit. That is a different exit, and it does not account for ATR.
MetaTrader 5 (MQL5)
iATRis also a simple average of TR. To match Pine, calculate the Wilder version yourself.- The trail is done by modifying the position's SL on a new bar (
CTrade::PositionModify). Take the level from the closed bar (index 1), otherwise the stop will move within the bar, both in the tester and live. - Bars are built on Bid. A long's SL triggers on Bid, a short's SL on Ask. At the broker's day rollover the spread widens, and a short gets stopped out by the spread even though the chart price never touched the stop.
- Daily bars follow server time. Short Sunday bars understate ATR and pull the stop closer than on exchange data.
Where the idea can break
- The author gave no parameters and no separate statistics for the exit. The author's figures (90% noise, big wins of about 100R) refer to an ensemble of ten systems on 70-100 markets. On a single market the positive skew may not show up.
- "The boundary between the normal distribution and the tails" is not a formula. Our MAE calibration is only one way to approximate it.
- In a sideways market an ATR trail produces many small losses in a row. For a trend system this is normal, but the streak can be long.
- A stop order does not protect against a gap: the loss at an open beyond the stop can be several times larger than 1R.
- In a calm phase the stop tightens toward price right before a volatility spike. The first wide bar can close the trade just before the move.
- The author trades CFDs with long holding periods, from months to years. Swaps and overnight financing charges noticeably change the result and are not visible in a test on clean prices.