Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Anny26022/chartsmaze_clone/llms.txt

Use this file to discover all available pages before exploring further.

This section documents volume and liquidity metrics that help assess trading activity and stock tradability.

Relative Volume

RVOL
number
Relative Volume - current volume compared to 20-day average.Calculation:
avg_vol_20 = df['Volume'].tail(21).iloc[:-1].mean()
rvol = latest['Volume'] / avg_vol_20 if avg_vol_20 > 0 else 0
Example: 2.50 (current volume is 2.5x the 20-day average)Source: Calculated from OHLCV dataLocation: advanced_metrics_processor.py:65-66, 82Precision: Rounded to 2 decimal placesInterpretation:
  • RVOL < 0.5: Very low volume (illiquid day)
  • RVOL 0.8-1.2: Normal volume
  • RVOL 1.5-2.5: Above average interest
  • RVOL > 3.0: Exceptional volume (investigate catalyst)
Use Cases:
  • Breakout confirmation (high RVOL + price move = stronger signal)
  • Liquidity screening (avoid stocks with consistently low RVOL)
  • Event detection (spikes indicate news/results/corporate actions)

Volume Moving Averages

200 Days EMA Volume
number
200-day Exponential Moving Average of daily volume.Calculation:
df['EMA_Vol_200'] = df['Volume'].ewm(span=200, adjust=False).mean()
ema_vol_200_latest = df['EMA_Vol_200'].iloc[-1]
Example: 5234567 (shares)Source: Calculated from OHLCV dataLocation: advanced_metrics_processor.py:68-69, 86Precision: Rounded to 0 decimal places (integer shares)Use Cases:
  • Long-term volume trend assessment
  • Compare current volume against long-term baseline
  • Identify structural changes in trading activity
% from 52W High 200 Days EMA Volume
number
Distance from 52-week high of 200-day EMA Volume.Calculation:
ema_vol_200_52w_high = df['EMA_Vol_200'].tail(252).max()
pct_from_ema_200_52w_high = ((ema_vol_200_latest - ema_vol_200_52w_high) / ema_vol_200_52w_high) * 100 if ema_vol_200_52w_high > 0 else 0
Example: -25.30 (volume trend is 25.3% below its 52-week peak)Source: Calculated from OHLCV dataLocation: advanced_metrics_processor.py:71-73, 87Precision: Rounded to 2 decimal placesInterpretation:
  • Negative: Volume trend declining (possible loss of interest)
  • Near 0%: Volume at peak levels (high participation)
  • Positive: Volume expanding beyond historical norms
Use Case: Detect waning/increasing market interest over time

Rupee Turnover Metrics

30 Days Average Rupee Volume(Cr.)
number
Average daily rupee turnover over the past 30 days.Unit: Crores (Cr.)Calculation:
df['Turnover_Cr'] = (df['Close'] * df['Volume']) / 10000000
avg_rupee_vol_30 = df['Turnover_Cr'].tail(30).mean()
Example: 450.80Source: Calculated from OHLCV dataLocation: advanced_metrics_processor.py:62-63, 81Precision: Rounded to 2 decimal placesUse Cases:
  • Institutional liquidity threshold screening
  • Position sizing (ensure turnover supports your trade size)
  • Market impact estimation
Daily Rupee Turnover 20(Cr.)
number
20-day moving average of daily rupee turnover.Unit: Crores (Cr.)Calculation:
turnover_20 = df['Turnover_Cr'].tail(20).mean()
Example: 425.60Source: Calculated from OHLCV dataLocation: advanced_metrics_processor.py:76, 83Precision: Rounded to 2 decimal places
Daily Rupee Turnover 50(Cr.)
number
50-day moving average of daily rupee turnover.Unit: Crores (Cr.)Calculation:
turnover_50 = df['Turnover_Cr'].tail(50).mean()
Example: 410.30Source: Calculated from OHLCV dataLocation: advanced_metrics_processor.py:77, 84Precision: Rounded to 2 decimal places
Daily Rupee Turnover 100(Cr.)
number
100-day moving average of daily rupee turnover.Unit: Crores (Cr.)Calculation:
turnover_100 = df['Turnover_Cr'].tail(100).mean()
Example: 395.20Source: Calculated from OHLCV dataLocation: advanced_metrics_processor.py:78, 85Precision: Rounded to 2 decimal placesUse Case: Long-term liquidity trend analysis

Turnover Analysis

Comparing the three turnover moving averages reveals liquidity trends:
  • 20 > 50 > 100: Increasing liquidity (bullish for tradability)
  • 100 > 50 > 20: Decreasing liquidity (caution for large positions)
  • All similar: Stable liquidity environment

Liquidity Screening Guidelines

For different trading strategies:

Intraday Trading

  • Minimum RVOL: > 1.0
  • Minimum Daily Rupee Turnover 20: > 50 Cr.
  • Day Range(%): > 2% (sufficient volatility)

Swing Trading (1-2 weeks)

  • Minimum Daily Rupee Turnover 20: > 20 Cr.
  • Minimum 30 Days Average Rupee Volume: > 15 Cr.

Positional Trading (1-3 months)

  • Minimum Daily Rupee Turnover 50: > 10 Cr.
  • Consistent volume (avoid stocks with erratic RVOL)

Institutional/Large Orders

  • Minimum Daily Rupee Turnover 100: > 100 Cr.
  • 200 Days EMA Volume: High and stable
  • Market Cap: > 5,000 Cr. (cross-reference with valuation fields)

Data Sources

  1. OHLCV CSV Data (ohlcv_data/*.csv): All volume and turnover calculations
  2. Calculation Engine: advanced_metrics_processor.py with pandas operations

Processing Notes

  • EMA Calculation: Uses pandas ewm(span=periods, adjust=False).mean()
  • Turnover Formula: (Close Price × Volume) / 10,000,000 for Crore conversion
  • Default Values: All fields default to 0.0 if OHLCV data unavailable
  • Thread Pool Execution: Volume calculations run in parallel (10 workers) for performance
  • Minimum Data Requirement: At least 5 rows of OHLCV data needed per symbol

Source Code Reference

  • Volume calculations: advanced_metrics_processor.py:62-78, 81-87
  • EMA helper function: advanced_metrics_processor.py:14-15
  • Parallel processing: advanced_metrics_processor.py:125-130
  • Field merging: advanced_metrics_processor.py:132-166
  • Output schema: all_stocks_fundamental_analysis.json

Build docs developers (and LLMs) love