Liquidity Analysis for Algorithmic Trading
Understand order book depth, market impact, and optimal execution strategies to minimize slippage in thin Indian markets.
Liquidity is oxygen for algo traders. Without it, your strategy suffocates—orders don’t fill, slippage explodes, profits vanish. Indian markets are less liquid than US/Europe, making liquidity analysis critical.
This guide teaches you to measure liquidity, predict market impact, and execute large orders without moving markets against you.
Measuring Liquidity
Key Metrics
import pandas as pd
import numpy as np
class LiquidityAnalyzer:
"""
Analyze stock liquidity
"""
def __init__(self, market_data: pd.DataFrame):
self.data = market_data
def calculate_bid_ask_spread(self) -> pd.Series:
"""Bid-ask spread as % of mid-price"""
spread = (self.data['ask'] - self.data['bid']) / \
((self.data['ask'] + self.data['bid']) / 2)
return spread
def calculate_depth(self, n_levels: int = 5) -> pd.DataFrame:
"""Order book depth at N levels"""
bid_depth = self.data[[f'bid_qty_{i}' for i in range(n_levels)]].sum(axis=1)
ask_depth = self.data[[f'ask_qty_{i}' for i in range(n_levels)]].sum(axis=1)
return pd.DataFrame({
'bid_depth': bid_depth,
'ask_depth': ask_depth,
'total_depth': bid_depth + ask_depth
})
def calculate_amihud_illiquidity(self) -> float:
"""Amihud illiquidity ratio"""
daily_returns = self.data['close'].pct_change().abs()
dollar_volume = self.data['volume'] * self.data['close']
illiquidity = (daily_returns / dollar_volume).mean() * 1e6
return illiquidity
analyzer = LiquidityAnalyzer(market_data)
spread = analyzer.calculate_bid_ask_spread()
print(f"Avg Spread: {spread.mean():.4%}")