Average Daily Range (ADR): A Technical Indicator for Volatility

·

The Average Daily Range (ADR) is a powerful technical indicator used to measure market volatility by analyzing the average difference between an asset’s highest and lowest prices over a defined period. Traders and analysts use ADR to identify periods of heightened price movement, spot potential entry and exit points, and compare volatility across different assets. In this comprehensive guide, we’ll explore how ADR works, how to calculate it manually and programmatically in Python, its limitations, and how to enhance it for broader analytical use.

Understanding the Average Daily Range (ADR)

At its core, the ADR reflects the average intraday price range — the difference between the daily high and low — over a specified number of trading periods. Like a moving average, it smooths out short-term fluctuations to reveal underlying volatility trends.

ADR is particularly useful in:

A common lookback period is 20 days, which incorporates the most recent 19 trading sessions plus the current day. However, traders can adjust this window based on their strategy and timeframe.

👉 Discover how volatility metrics like ADR can improve your trading decisions.

How to Calculate the Average Daily Range

The formula for ADR is straightforward:

ADR = (Sum of Daily Ranges) / Number of Periods

Where:

Step-by-Step Calculation

  1. Choose a lookback interval (e.g., 5 days)
  2. For each day, compute the daily range: High – Low
  3. Sum all daily ranges over the interval
  4. Divide the total by the number of periods

For example:

DayHighLowDaily Range
1532
2743
3963
4734
5844

Total Daily Range = 2 + 3 + 3 + 4 + 4 = 16
ADR = 16 ÷ 5 = 3.2

This means, on average, the asset moved 3.2 units per day during this period.

Implementing ADR in Python

Modern traders rely on automation. Using Python with libraries like pandas and yfinance, we can efficiently calculate ADR from real market data.

Basic ADR Function

# Sample price data as list of dictionaries
prices = [
    {"high": 5, "low": 3},
    {"high": 7, "low": 4},
    {"high": 9, "low": 6},
    {"high": 7, "low": 3},
    {"high": 8, "low": 4}
]

# One-liner ADR calculation
adr = sum(day["high"] - day["low"] for day in prices) / len(prices)
print(adr)  # Output: 3.2

Applying ADR to Real Financial Data

Let’s fetch Ethereum (ETH-USD) price data from Yahoo Finance and compute its ADR:

import yfinance as yf
import pandas as pd

# Fetch 6 months of daily ETH data
eth_data = yf.Ticker("ETH-USD").history(period="6mo")[["High", "Low"]]

# Step 1: Calculate daily range
eth_data['daily_range'] = eth_data['High'] - eth_data['Low']

# Step 2: Compute 20-day ADR using rolling average
eth_data['adr'] = eth_data['daily_range'].rolling(window=20).mean()

# View last few rows
print(eth_data.tail())

After execution, you’ll see a new column adr showing the evolving average daily dollar movement. Note that the first 19 values will be NaN due to insufficient data for the rolling calculation.

Modified ADR: Normalizing for Price Differences

One major limitation of standard ADR is that it's not comparable across assets with different price levels. A $200 daily move in Ethereum doesn't mean the same thing as a $5 move in a $10 stock.

To solve this, we use a Modified ADR expressed as a percentage of daily price movement:

Modified ADR (%) = Average of [(High / Low) – 1] × 100

Why Use Percentage-Based ADR?

Python Implementation

# Calculate percentage-based daily range
eth_data['dr_pct'] = 100 * (eth_data['High'] / eth_data['Low'] - 1)

# Compute modified ADR over 20-day window
eth_data['mod_adr'] = eth_data['dr_pct'].rolling(window=20).mean()

print(eth_data[['dr_pct', 'mod_adr']].tail())

Now, if ETH shows a modified ADR of 5.48%, it means prices typically swing about 5.5% per day on average — a far more interpretable metric than raw dollar figures.

👉 See how advanced traders use normalized volatility indicators to find hidden opportunities.

ADR vs. Average True Range (ATR)

While both measure volatility, ADR and ATR differ significantly:

FeatureAverage Daily Range (ADR)Average True Range (ATR)
Data UsedHigh – Low of current periodConsiders gaps between sessions
Gap Sensitivity❌ Ignores overnight gaps✅ Includes previous close
Use CaseIntraday volatility analysisBroader volatility assessment

ATR accounts for:

This makes ATR more robust for swing trading and position sizing.

Practical Applications of ADR

Traders use ADR in several strategic ways:

Limitations of the ADR Indicator

Despite its usefulness, ADR has key drawbacks:

Frequently Asked Questions (FAQ)

Q: Can I use ADR for crypto trading?
A: Absolutely. Cryptocurrencies often exhibit high intraday volatility, making ADR especially valuable for identifying breakout conditions and managing risk.

Q: What’s a good lookback period for ADR?
A: The 20-day period is standard, but short-term traders may prefer 10 days, while long-term investors might use 30 or more.

Q: How does ADR help in setting stop-loss orders?
A: By understanding average daily movement, you can place stops outside normal volatility zones — for example, setting a stop below the low minus the ADR value.

Q: Is a higher ADR always better?
A: Not necessarily. High ADR indicates volatility, which brings opportunity but also risk. Stable assets with moderate ADR may suit conservative strategies.

Q: Can I automate ADR alerts in my trading system?
A: Yes. Using Python or platforms like TradingView, you can set alerts when price exceeds a multiple of the ADR (e.g., >2x), signaling potential breakouts.

Q: Should I use standard or modified ADR?
A: Use modified ADR (%) when comparing multiple assets or building screeners. Use standard ADR ($) when analyzing absolute price movements for a single asset.

👉 Start applying ADR insights with real-time market data and advanced charting tools.

Final Thoughts

The Average Daily Range (ADR) is a simple yet effective tool for assessing market volatility. Whether you're scanning for breakout candidates, refining entry timing, or normalizing comparisons across diverse assets with modified ADR, this indicator adds valuable context to technical analysis.

When combined with complementary tools like Bollinger Bands, RSI, or MACD, ADR becomes part of a robust framework for informed decision-making. While it doesn’t predict direction, it quantifies the “temperature” of the market — helping traders stay aligned with prevailing momentum and avoid being whipsawed by normal price noise.

As financial markets grow increasingly data-driven, mastering indicators like ADR through programming and statistical analysis gives modern traders a distinct edge — turning raw price data into actionable intelligence.


Core Keywords: Average Daily Range, volatility indicator, technical analysis, Python trading, modified ADR, market volatility, trading strategy