Market Making System Development for Exchange Liquidity

Without liquidity, an exchange is dead: wide spread, deep price impact, traders leaving to competitors. Consider a typical task: an exchange launches a BTC/USDT pair, but the spread is 50 bps at a volume of $1000. Traders move to Binance. Our solution is to deploy a bot with a dynamic spread of 10 b

Blockchain Development Services

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1441
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    998
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1267
  • image_logo-advance_0.webp
    B2B Advance company logo design
    713
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    1003

Without liquidity, an exchange is dead: wide spread, deep price impact, traders leaving to competitors. Consider a typical task: an exchange launches a BTC/USDT pair, but the spread is 50 bps at a volume of $1000. Traders move to Binance. Our solution is to deploy a bot with a dynamic spread of 10 bps and a depth of $50k. Result: spread reduces to 15 bps, volume grows 5x. We develop turnkey market making systems — from strategy to production. The team has 10+ projects in DeFi and CeFi. Developing an exchange liquidity system (market making) requires deep understanding of market microstructure and risk management.

Why dynamic spread is critical for liquidity?

Static spread does not adapt to volatility and events. The result is either a loss during high volatility or loss of competitiveness. We use dynamic spread that widens during high volatility and before important events (FED, halvings). This allows maintaining profitability and providing liquidity in any situation.

How market making solves the liquidity problem?

Dynamic spread vs static — developing a liquidity system

Static spread does not adapt to volatility and events. The result is either a loss during high volatility or loss of competitiveness. We use dynamic spread that widens during high volatility and before important events (FED, halvings).

Inventory risk management

Without inventory management, a market maker can accumulate a huge position and lose money during a market reversal. Our bot automatically calculates inventory skew and shifts quotes to return to a neutral position. If limits are exceeded, a forced market order is placed on an external exchange.

Execution risk when hedging

The delay between a client trade and a hedge on Binance (1-100 ms) creates slippage risk. We minimize it through low-latency API and server colocation.

How is the bot architecture structured?

Basic bot architecture

class MarketMaker: def __init__(self, symbol: str, config: MMConfig): self.symbol = symbol self.spread_bps = config.spread_bps self.order_size_base = config.order_size self.num_layers = config.num_layers self.layer_spacing_bps = config.layer_spacing async def compute_quotes(self, mid_price: float) -> list[Quote]: quotes = [] inventory_skew = self.calculate_inventory_skew() for i in range(1, self.num_layers + 1): bid_offset_bps = self.spread_bps * i + inventory_skew ask_offset_bps = self.spread_bps * i - inventory_skew bid_price = mid_price * (1 - bid_offset_bps / 10000) ask_price = mid_price * (1 + ask_offset_bps / 10000) size = self.order_size_base / i quotes.append(Quote('buy', bid_price, size)) quotes.append(Quote('sell', ask_price, size)) return quotes def calculate_inventory_skew(self) -> float: target_inventory = 0 current_inventory = self.get_current_inventory() inventory_deviation = current_inventory - target_inventory skew = inventory_deviation * self.inventory_skew_factor return max(-self.max_skew_bps, min(self.max_skew_bps, skew)) 

Hedging

async def hedge_trade(self, trade: InternalTrade): hedge_side = 'buy' if trade.side == 'sell' else 'sell' await self.hedge_exchange.market_order( symbol=self.symbol, side=hedge_side, quantity=trade.quantity ) 

Inventory management

The key metric is inventory skew. We track the position in real time and shift quotes to return to neutrality.

def get_inventory_metrics(self) -> dict: current_pos = self.get_position_btc() pos_value_usd = current_pos * self.get_mid_price() return { "position_btc": current_pos, "position_usd": pos_value_usd, "max_inventory_usd": self.config.max_inventory_usd, "utilization": abs(pos_value_usd) / self.config.max_inventory_usd, "pnl_unrealized": self.calculate_unrealized_pnl(current_pos) } 

What is execution risk and how to minimize it?

Execution risk arises from the delay between a client trade and the hedge. The longer the delay, the higher the probability that the price on the external exchange will change. We reduce this risk through low-latency API and server colocation near the exchange. In critical cases, we use a fixed spread to cover possible slippage.

How is dynamic spread calculated?

The spread is calculated as the sum of carry cost, expected adverse selection, and margin. Adverse selection is the probability of trading against an informed trader. In crypto, it is higher during high volatility and before major events.

def calculate_dynamic_spread(self) -> float: base_spread = self.config.base_spread_bps volatility = self.get_realized_volatility_1h() vol_multiplier = max(1.0, volatility / self.baseline_volatility) event_factor = 1.5 if self.is_event_window() else 1.0 hedge_spread = self.get_hedge_exchange_spread() hedge_factor = max(1.0, hedge_spread / self.baseline_hedge_spread) return base_spread * vol_multiplier * event_factor * hedge_factor 

Liquidity provider program

An exchange can attract external market makers via fee rebate. Standard tiers:

Tier Maker volume/30d Maker fee Taker fee
Standard < $1M 0.10% 0.15%
Market Maker 1 $1M+ -0.01% (rebate) 0.10%
Market Maker 2 $10M+ -0.02% (rebate) 0.08%
Market Maker 3 $100M+ -0.03% (rebate) 0.06%

Negative maker fee means the exchange pays the market maker for each executed order. This is standard practice.

Performance requirements

def check_mm_performance(self, mm_id: str, period_minutes: int = 60) -> MMScore: quotes = self.db.get_mm_quotes(mm_id, period_minutes) total_seconds = period_minutes * 60 active_seconds = sum(q.duration for q in quotes if q.has_both_sides) uptime = active_seconds / total_seconds avg_spread = statistics.mean(q.spread_bps for q in quotes) avg_depth_usd = statistics.mean(q.total_depth_usd for q in quotes) return MMScore( uptime=uptime, avg_spread_bps=avg_spread, avg_depth_usd=avg_depth_usd ) 

On-chain AMM liquidity

For DEX, liquidity is provided through LP positions. Comparison:

Parameter CEX Market Making AMM LP
Price control Full Algorithmic
Impermanent loss No (hedged) Yes
Infrastructure requirements Bot + API Simple transaction
Risk management Active Passive
Profitability Higher Lower

For serious volume, CEX market making is more efficient. AMM is suitable as backstop liquidity for long-tail tokens.

Work process

  1. Liquidity and competitor analysis
  2. Strategy design with risk consideration
  3. Bot development in Python/Solidity + Foundry
  4. Historical testing and simulation
  5. Production deployment and monitoring

Timeline: from 2 weeks to 2 months depending on complexity. Cost is calculated individually.

What is included in the work?

  • Architecture and strategy documentation
  • Bot source code with exchange integration
  • Hedging and inventory management setup
  • Testing and optimization
  • Support and improvements during the warranty period

We guarantee quality: certified engineers, experience with over 10 successful projects. Contact us for a project evaluation. Order turnkey market making system development — get a consultation on your project.

Wikipedia: Market maker