Idea in brief
Toby Crabel, founder of Crabel Capital and known for work on the opening range breakout, says that Crabel's new work increasingly combines price and volume. Crabel reads a bar as the ratio of the size of its range to the volume traded within that range. This is an old idea from Richard Wyckoff: effort (volume) versus result (price movement). According to Crabel, it has hardly been used systematically, because database builders considered volume unimportant.
Crabel's observation: now that markets have more mean reversion, highs and lows often come with relatively high volume and narrowing ranges. According to Crabel, many important daily extremes arrive with this structure. Wyckoff would have called it churning or laboring: great effort without result. Crabel stresses that this is only a warning. The entry should come after a test of the level and confirmation, and there is no reason to step in front of the move without that check.
The interview gives no thresholds. Crabel named the normalization method (a 10-20 day average on daily bars, the same time of day on intraday data), the shape of the signal and the sequence of actions. The thresholds, the definition of the test and the exit are ours.
The difference from prior-extreme-raid-reclaim: there the level is the prior day's, with a reclaim back across it, price only. Here the level comes from a volume signature at a multi-day extreme, and the entry waits for a separate retest several days later.
Why it might work
Wyckoff's logic is about the balance of forces. If many contracts traded at the high but price barely moved, the buying met an equal volume of selling. A large seller is distributing a position into demand, and the next attempt higher will most likely run into that seller again. At a low it is mirrored: heavy selling is absorbed, and price does not go lower.
Crabel links the frequency of such extremes to the general shift of markets toward mean reversion. In the same interview, Crabel says that large participants increasingly step in front of moves at one- and two-day extremes (covered in prior-extreme-raid-reclaim). The public part of the interview contains no test of this link.
Crabel ranks volume below price: price is the market's reality, and volume can be deceptive. That is why the signal in this card requires price confirmation.
Rules
Normalized volume and range, daily bars (author)
// daily bars of a liquid futures contract
Range = High - Low
RelVol = Volume / SMA(Volume, 20)[1] // author: average over 10 or 20 days
RelRange = Range / SMA(Range, 20)[1] // author: range relative to the same average
// Finetiq: length 20, average excluding the current bar
Intraday normalization (author)
// author: intraday volume has a "smile", compare with prior days at the same time
Slot = bar open time on the exchange clock, for example 10:00-10:30 ET
SlotVol = average Volume of the same Slot over the last 20 days // Finetiq: 20 days
SlotRange = average Range of the same Slot over the last 20 days
RelVolI = Volume / SlotVol
RelRangeI = Range / SlotRange
// from here on, the same rules as on daily bars, with RelVolI and RelRangeI
Warning: effort without result (author, thresholds Finetiq)
AtHigh = High >= Highest(High, 20)[1] // Finetiq: 20-bar extreme
AtLow = Low <= Lowest(Low, 20)[1]
Effort = RelVol >= 1.5 // author: relatively high volume; Finetiq: 1.5
NoResult = RelRange <= 0.8 // author: narrowing range; Finetiq: 0.8
WarnTop = AtHigh AND Effort AND NoResult
WarnBottom = AtLow AND Effort AND NoResult
// variant to test: a 2-3 bar signature at the extreme,
// average RelVol >= 1.3 and each bar's RelRange smaller than the previous one
IF WarnTop THEN Level = High, WarnBar = current bar
IF WarnBottom THEN Level = Low, WarnBar = current bar
Test and confirmation (Finetiq)
// author: wait for the test, get confirmation, only then enter
// the whole definition of the test below is ours
// short after WarnTop
TestWindow = from 2 to 10 bars after WarnBar // Finetiq
Test = High >= Level - 0.25 * ATR(20) // price came back to the level
AND High <= Level + 0.5 * ATR(20) // and did not go far above it
AND Close < Level // closed below the level
Confirm = Test AND Close < (High + Low) / 2 // close in the lower half of the bar
IF Confirm within TestWindow
SELL SHORT STOP at Low of the test bar - 1 tick // price confirmation, the order lives 1 bar
StopLoss = MAX(Level, High of the test bar) + 0.25 * ATR(20)
IF Close > Level + 0.5 * ATR(20) before the test THEN CANCEL // level broken, signal withdrawn
// exit: short holding, like the core products of Crabel's firm (up to two days)
EXIT at the close of the second day after entry
// variant: target SMA(Close, 20) or the opposite edge of the WarnBar range
// long after WarnBottom is mirrored
Plugging into cards in the base (Finetiq)
// example 1: prior-extreme-raid-reclaim, variant C (fade of a two-day extreme)
IF DayHigh > H2 AND Close60 < H2 // as in the card
AND WarnTop on at least one of the last 5 days // volume signature at this extreme
SELL SHORT AT NEXT BAR OPEN
// compare with the version without the signature: does volume add anything to the price reclaim
// example 2: prev-high-breakout-adx (buying a breakout of yesterday's high)
IF WarnTop on yesterday's bar
CANCEL BUY STOP // do not buy a breakout of an effort-without-result bar
Parameters
| Parameter | Value | Source |
|---|---|---|
| Normalization average on daily bars | 10 or 20 days | author |
| Chosen length | 20 days | Finetiq |
| Intraday normalization | the same time slot on prior days | author |
| Days in the slot average | 20 | Finetiq |
| Extreme | 20-day high or low | Finetiq |
| High volume | RelVol of 1.5 or more | Finetiq |
| Narrow range | RelRange up to 0.8 | Finetiq |
| Test window | 2-10 bars | Finetiq |
| Test zone | from 0.25 ATR below to 0.5 ATR above the level | Finetiq |
| Confirmation | close in the lower half and a break of the test bar low | Finetiq |
| Stop | beyond the level or the test high plus 0.25 ATR | Finetiq |
| Exit | close of the second day | Finetiq (based on the up-to-two-day holding at the author's firm) |
What to test
- Does the signature mark extremes. Label all 20-day highs on ES, CL, GC and ZN. Compare the share that remained the high for the next 10 days among WarnTop and among the rest. This is a direct test of Crabel's observation.
- Threshold neighborhood. RelVol of 1.2, 1.5 and 2.0; RelRange of 0.6, 0.8 and 1.0; an average of 10 and 20 days. The signal is rare, so also look at the number of events.
- Is the test needed. A short on the day after WarnTop versus an entry after the test. Crabel insists on the test, so check whether it pays for the missed trades.
- Volume versus range alone. The same signal with NoResult only, without the volume condition. If the result is the same, volume adds nothing, and the data requirements get simpler.
- Years. Split the result into five-year periods. Crabel talks about today's market with more mean reversion. If the signal is weaker on older data, that will be consistent with Crabel's words.
- Intraday version. Normalization by time slot versus normalization by an average of neighboring bars. On bars near the open and the close the difference should be noticeable.
- Costs. A two-day holding period and a stop in fractions of ATR on futures. Add slippage on the stop entry.
Platform notes
TradingView (Pine Script)
- Daily futures bars have volume, and RelVol and RelRange take a couple of lines with
ta.sma. - Intraday normalization needs averages per time slot, which are convenient to store in an
arrayindexed by slot number. Define the slot in exchange time viatime(timeframe.period, "1000-1030", "America/New_York"), otherwise it will shift when daylight saving time changes. - Intraday history depth is limited by your subscription plan. 20 days per slot plus a test over several years may not fit.
- On a continuous futures series, volume on rollover days is split between contracts. RelVol drops or jumps near expiration, so check those dates separately.
MultiCharts and TradeStation (EasyLanguage)
- For futures, the TradeStation daily bar closes at settlement, while the 1440-minute bar closes at the last trade. Settlement changes only the close. High, Low and the range of the two bar types differ only if their session boundaries differ, for example a daily bar on the regular session and a 1440-minute bar on the full session. Check the session templates, otherwise RelRange and WarnTop may fall on different days. With the same boundaries, only calculations based on the close differ.
- On TradeStation intraday bars, total volume has historically been stored in
Ticks, whileVolumemay contain only up volume. In MultiCharts the field is set by a symbol setting (Build Volume On). Sell Short next bar at X stoplives for one bar, which matches the confirmation rule. Store the level and the test window in variables.AvgTrueRangeis a simple average of TR. The test zone in fractions of ATR will be slightly different than in Pine.
MetaTrader 5 (MQL5)
- CFDs and forex have only tick volume (
iTickVolume): the number of quote changes at the broker, not contracts. High volume without result cannot be tested with it. Real volume (iRealVolume) is available only for exchange-traded futures at a few brokers. - Without volume, only the price part remains: a narrow range at an extreme. That is a different idea and needs to be tested separately (test 4).
- A CFD daily bar and intraday slots are built on the broker's server time. Convert the 10:00 ET slot to server time, accounting for daylight saving time.
- Set the level and stop as prices, not in
_Point.
Where the idea can break
- Crabel described an observation, not a system. The thresholds, test, confirmation and exit are ours, and a weak result may reflect a weak formalization.
- The interview has no figures. The breakdown of charts with volume went into a paid bonus episode for members of the host's community, and the public part has only words.
- Volume on a continuous futures series is distorted at rollovers, and data vendors build continuous contracts in different ways.
- The signal is rare: a 20-day extreme with high volume and a narrow range happens a few times a year per market. A usable sample needs dozens of markets.
- Crabel warns that volume can be deceptive and that price comes first.
- The episode advertises the host's crypto trading course.