Volume Profile Analysis System Development
Volume Profile is one of the most informative technical analysis tools. Unlike standard volume indicator (volume per bar), Volume Profile shows distribution of trading volume across price levels. This allows seeing not "when" there was volume, but "where" main market activity is concentrated.
Key Concepts
POC (Point of Control) — price level with maximum volume for selected period. Price tends to return to POC especially in ranging markets. POC often acts as magnet and key support/resistance level.
Value Area (VA) — price range where 70% of all trading volume occurred. The 70% standard comes from Market Profile (TPO method) by Peter Steidlmayer.
- VAH (Value Area High) — upper boundary of value zone
- VAL (Value Area Low) — lower boundary of value zone
HVN (High Volume Node) — price zones with high volume. Serve as support/resistance: price spends time in them, difficult to pass through.
LVN (Low Volume Node) — low volume zones. Price passes them quickly — "air pockets" where movement can accelerate.
Volume Profile Calculation
Step 1: Define Range
Select period (session, week, month, custom range) and price range [low, high].
Step 2: Create Price Buckets
Split range into N equal price bins (usually 100–300):
def calculate_volume_profile(df, n_bins=200):
price_min = df['low'].min()
price_max = df['high'].max()
bin_size = (price_max - price_min) / n_bins
profile = np.zeros(n_bins)
for _, row in df.iterrows():
candle_low_bin = int((row['low'] - price_min) / bin_size)
candle_high_bin = int((row['high'] - price_min) / bin_size)
bins_covered = candle_high_bin - candle_low_bin + 1
vol_per_bin = row['volume'] / bins_covered
profile[candle_low_bin:candle_high_bin+1] += vol_per_bin
return profile, price_min, bin_size
Step 3: Calculate POC and Value Area
Expand from POC in both directions to capture target volume percentage.
Types of Volume Profile
Session Volume Profile — single trading session profile (24h for crypto). Shows fair value for day.
Composite Volume Profile — profile over multiple sessions/weeks. Long-term market structure.
Anchored Volume Profile — profile starting from specific event: ATH, major breakout, trend start. Most flexible tool.
Visible Range Volume Profile — profile of visible chart range. Auto-recalculates on scroll.
Fixed Range — user defines start and end candle manually.
Trading Applications
VA Rule:
- Price enters VA from below (from VAL) → high probability movement to POC then VAH
- Price cannot hold beyond VA (opened outside, cannot sustain) → return inside VA
- Break and close outside VA with volume → trend move
POC as Magnet: price gravitates to POC in ranging movement. Trading range often "gravitates" around POC.
LVN as Speed Zones: entering LVN in trend direction — price passes quickly to next HVN.
Integration with Other Indicators
Volume Profile most effective combined with:
- VWAP — where is VWAP relative to POC?
- Support/Resistance levels — do they coincide with HVN/LVN?
- Order Flow — cumulative delta at POC level
System Architecture
Data: full tick data or aggregated OHLCV + volume per bar. For accurate profile need volume per price level — tick data or footprint from exchange.
Exchanges with tick/footprint API: Binance (aggTrades), Coinbase Advanced Trade, Kraken (trades endpoint). All trades stored in ClickHouse (optimal for time-series with aggregations).
Calculation: Python/NumPy for fast profile calculation. Composite VP calculation for 30 days on 1m data takes 2–5 seconds.
Visualization: horizontal histogram beside price chart. POC — bright horizontal line, VA — semi-transparent rectangle, HVN — dark bars, LVN — light bars.
Real-time updates: current session profile updates on each new trade. Cache in Redis for fast client delivery.
Frontend: React + D3.js for custom histogram. TradingView custom indicator via Pine Script v5 for embedded VP.
We develop complete Volume Profile system with Session/Composite/Anchored/Visible Range VP support, real-time calculation, TradingView export and web dashboard.







