Skip to main content

Volume Profile Indicator

Overview

Volume Profile is an advanced volume analysis tool that shows trading activity at specific price levels. This implementation will include dynamic price level binning, Point of Control (POC) identification, and Value Area analysis.

Status

  • Domain Model Design
  • Core Implementation
  • API Integration
  • Testing
  • Documentation

Components

1. Domain Model

interface VolumeProfileData {
// Core Values
price_levels: PriceLevel[]; // Volume distribution by price
point_of_control: number; // Price level with highest volume
value_area_high: number; // Upper value area bound
value_area_low: number; // Lower value area bound

// Analysis
volume_distribution: Distribution; // Volume distribution characteristics
profile_shape: ProfileShape; // Profile shape classification
support_resistance: Level[]; // Key S/R levels from profile

// Signals
signal: SignalType; // Trading signal
signal_strength: number; // Signal confidence (0-1)
}

interface PriceLevel {
price: number; // Price level
volume: number; // Volume at price
relative_volume: number; // Volume relative to total
is_poc: boolean; // Point of Control flag
in_value_area: boolean; // Within Value Area flag
}

enum Distribution {
NORMAL = 'normal',
BIMODAL = 'bimodal',
SKEWED_UP = 'skewed_up',
SKEWED_DOWN = 'skewed_down',
}

enum ProfileShape {
P_SHAPE = 'p_shape', // Accumulation
B_SHAPE = 'b_shape', // Distribution
D_SHAPE = 'd_shape', // Trending
BALANCED = 'balanced', // Consolidation
}

2. Configuration

interface VolumeProfileSettings {
price_levels: number; // Number of price levels (default: 24)
value_area_volume: number; // % of volume for VA (default: 0.68)
min_volume_threshold: number; // Min volume for level significance
dynamic_level_adjustment: boolean; // Adjust levels based on volatility
}

3. API Endpoints

REST API

  • GET /v1/volume-profile
    • Parameters:
      • symbol: Trading pair
      • timeframe: Analysis timeframe
      • lookback_periods: Analysis window
      • price_levels: Optional level count
      • value_area_volume: Optional VA %

WebSocket

  • Channel: volume_profile
    • Updates: Profile updates on significant changes
    • Frequency: Configurable (tick/trade based)

Technical Implementation

1. Core Calculation

def compute_volume_profile(
df: pd.DataFrame,
settings: VolumeProfileSettings
) -> pd.DataFrame:
"""
Calculate Volume Profile with dynamic price levels.

Args:
df: DataFrame with OHLCV data
settings: Profile calculation settings

Returns:
DataFrame with Volume Profile analysis
"""
# Calculate price range and level size
price_range = df['high'].max() - df['low'].min()
level_size = price_range / settings.price_levels

# Create price levels
levels = create_price_levels(df, level_size)

# Calculate volume distribution
volume_dist = calculate_volume_distribution(df, levels)

# Find POC and Value Area
poc = find_point_of_control(volume_dist)
va_high, va_low = calculate_value_area(
volume_dist,
poc,
settings.value_area_volume
)

return pd.DataFrame({
'levels': levels,
'poc': poc,
'va_high': va_high,
'va_low': va_low,
'distribution': analyze_distribution(volume_dist),
'shape': analyze_profile_shape(volume_dist, poc)
})

2. Analysis Functions

def analyze_distribution(
volume_dist: pd.Series
) -> Distribution:
"""Analyze volume distribution characteristics."""
# Implementation details

def analyze_profile_shape(
volume_dist: pd.Series,
poc: float
) -> ProfileShape:
"""Determine profile shape and market phase."""
# Implementation details

def find_support_resistance(
volume_dist: pd.Series,
min_threshold: float
) -> List[Level]:
"""Identify significant support/resistance levels."""
# Implementation details

def generate_signal(
current_price: float,
profile: VolumeProfileData
) -> Tuple[SignalType, float]:
"""Generate trading signals based on profile analysis."""
# Implementation details

3. Integration Points

  • Real-time volume aggregation
  • Integration with VWAP analysis
  • Support/Resistance level detection
  • Market phase identification

Configuration

TIMEFRAME_SETTINGS: Dict[str, VolumeProfileSettings] = {
"1h": VolumeProfileSettings(
price_levels=24,
value_area_volume=0.68,
min_volume_threshold=0.05,
dynamic_level_adjustment=True
),
"4h": VolumeProfileSettings(...),
"1d": VolumeProfileSettings(...)
}

Development Guidelines

1. Performance Optimization

  • Efficient price level binning
  • Optimized volume aggregation
  • Smart update triggers
  • Memory-efficient data structures

2. Testing Strategy

def test_level_creation():
"""Test price level generation."""

def test_volume_distribution():
"""Test volume distribution calculation."""

def test_poc_detection():
"""Test Point of Control identification."""

def test_value_area():
"""Test Value Area calculation."""

def test_profile_analysis():
"""Test profile shape and distribution analysis."""

3. Error Handling

  • Handle price gaps
  • Manage low volume periods
  • Validate configuration
  • Handle real-time data issues

Dependencies

  • NumPy: Numerical operations
  • Pandas: Data manipulation
  • SciPy: Distribution analysis
  • FastAPI: REST endpoints

Future Enhancements

  1. Composite Volume Profile (multiple timeframes)
  2. Dynamic Value Area calculation
  3. Market profile integration
  4. Machine learning for pattern recognition

References

  1. Volume Profile Trading
  2. Market Profile Theory
  3. Order Flow Analysis