← Back to Blog

Market Making Strategy: How to Earn the Bid-Ask Spread

Published April 7, 2026 · 10 min read · By BreakOrb

Every time you buy or sell an asset on an exchange, there is someone on the other side of that trade. Market makers are the participants who provide that liquidity. They continuously place both buy and sell orders in the order book, profiting from the difference between the two prices. This difference is called the bid-ask spread, and capturing it repeatedly is the foundation of market making.

Market making is one of the oldest strategies in financial markets. Banks, hedge funds, and proprietary trading firms have used it for decades on equities, futures, and forex. In crypto, the same principles apply but the markets run around the clock and volatility creates both larger spreads and greater risk.

What Is Market Making?

A market maker places limit orders on both sides of the order book simultaneously. On the buy side, they place bids slightly below the current mid-price. On the sell side, they place asks slightly above it. When both orders fill, the maker earns the spread between them without taking a directional bet on price.

Think of it like running a currency exchange at an airport. You buy euros from travelers at one rate and sell euros to other travelers at a slightly higher rate. The gap between those two rates is your profit. You do not care whether the euro goes up or down tomorrow. You care about the volume of transactions flowing through your booth.

Core principle: Market makers earn the spread by providing liquidity on both sides of the order book. Profitability depends on volume and spread width, not on predicting price direction.

On most exchanges, market makers also benefit from reduced fees or even fee rebates. Exchanges want deep order books because tight spreads attract more traders. Maker orders (limit orders that add liquidity) typically pay lower fees than taker orders (market orders that remove liquidity). On some venues, makers receive a rebate, meaning the exchange pays them for every filled limit order.

How the Bid-Ask Spread Works

Every asset on an exchange has two prices displayed at any moment. The bid is the highest price someone is willing to pay right now. The ask is the lowest price someone is willing to sell at right now. The gap between them is the spread.

Suppose BTC is trading with a bid of $65,000 and an ask of $65,010. The spread is $10. If a market maker places a buy order at $65,000 and a sell order at $65,010, and both fill, the maker earns $10 per BTC on that round-trip before fees. On a position size of 0.1 BTC, that is $1 per completed cycle. Repeat this hundreds of times per day and those small amounts compound.

Spreads are not fixed. They widen during low-liquidity periods like weekends or after major news events, and they tighten on high-volume pairs during peak hours. A skilled market making bot dynamically adjusts its spread parameters based on current market conditions.

How BreakOrb's Market Making Bot Works

The bot operates on a continuous cycle. Every few seconds, it evaluates the current order book, cancels any stale orders that have drifted too far from mid-price, and places fresh orders at optimal distances. The cycle looks like this:

  1. Cancel stale orders — Remove any open limit orders that are too far from the current mid-price or have been sitting unfilled beyond the refresh threshold.
  2. Calculate mid-price — Determine the current mid-point between the best bid and best ask on the exchange.
  3. Place buy orders below mid — Set one or more limit buy orders at specified distances below the mid-price (e.g., 0.1%, 0.2%, 0.3% below).
  4. Place sell orders above mid — Set matching limit sell orders at specified distances above the mid-price.
  5. Wait for fills — Monitor which orders get filled. When a buy fills, the bot has acquired inventory. When a sell fills, it has reduced inventory and locked in spread profit.
  6. Repeat — After the refresh interval, the cycle starts again. Unfilled orders are cancelled and replaced with fresh ones at updated prices.

This creates a self-sustaining loop. The bot never holds a strong directional opinion. It simply provides liquidity and collects the spread on every completed buy-sell pair.

Key Parameters

Understanding the configuration parameters is essential for tuning performance. Here are the six most important settings:

bid_spread and ask_spread

These control how far from the mid-price your buy and sell orders are placed, expressed as a percentage. A bid_spread of 0.1% means your buy order sits 0.1% below mid. A wider spread means more profit per fill but fewer fills. A tighter spread means more fills but less profit each. Finding the right balance depends on the pair's typical spread and volatility.

order_amount

The size of each individual order in base currency units. Larger orders earn more per fill but carry more inventory risk. Start small and increase gradually as you observe how the bot performs on your chosen pair.

order_levels

The number of orders placed on each side of the book. With order_levels set to 3, the bot places three buy orders at increasing distances below mid and three sell orders above. More levels provide deeper liquidity and capture larger price swings, but they also increase capital requirements and inventory exposure.

order_level_spread

The distance between each level. If your base spread is 0.1% and order_level_spread is 0.05%, your three buy orders would sit at 0.1%, 0.15%, and 0.2% below mid-price. This staggering ensures you capture moves of different magnitudes.

order_refresh_time

How often the bot cancels and replaces all open orders, in seconds. A shorter refresh time keeps orders closer to the current price but generates more API calls. A longer refresh time reduces API load but risks orders becoming stale during fast moves. Values between 10 and 60 seconds are typical.

Recommended starting config: bid_spread 0.1%, ask_spread 0.1%, order_levels 3, order_level_spread 0.05%, order_refresh_time 15s. Adjust after observing fill rates for 24-48 hours.

Inventory Skew: Staying Balanced

The biggest challenge in market making is not capturing the spread. It is managing what happens when fills are one-sided. If price drops steadily, your buy orders keep filling while your sell orders sit untouched. You accumulate a growing long position in a falling market. This is called inventory risk.

Inventory skew is the mechanism that counteracts this problem. When the bot detects that it holds more inventory than its target, it automatically adjusts its pricing to encourage fills on the opposite side.

Here is how it works. The bot tracks an inventory_target_pct, typically set to 50% (meaning it aims to hold half its capital in the base asset and half in quote). When inventory drifts above target (too much base asset), the bot:

When inventory drops below target (too little base asset), the opposite happens. The bid tightens and the ask widens. The inventory_skew parameter controls how aggressively this adjustment is applied. A higher value means stronger corrections when inventory drifts.

This keeps the bot roughly neutral over time. It still earns the spread on each completed pair of trades, but it avoids the dangerous situation of building a large directional position in a trending market.

When to Use Market Making

Market making performs best under specific conditions. Not every pair or every market regime is suitable.

High-volume pairs

You need consistent order flow to fill both sides of your orders. Pairs with thin volume will leave you holding one-sided inventory for extended periods. BTC/USDT, ETH/USDT, and other top-10 pairs by volume are the safest starting points.

Ranging markets

Market making thrives when price oscillates within a range. The bot buys low and sells high repeatedly. Strong trends are the enemy because one side of your orders keeps filling while the other never does, building up adverse inventory.

Tight native spreads

Paradoxically, you want pairs that already have relatively tight spreads. These pairs attract high volume, which means more fill opportunities. Extremely wide spreads often indicate low liquidity, meaning your orders may sit unfilled.

Favorable fee structures

Since market making operates on thin margins, fees matter enormously. A pair where you pay 0.1% maker fees on a 0.05% spread is a guaranteed loss. Look for exchanges and tiers that offer maker rebates or at minimum very low maker fees.

Risks of Market Making

Market making is not risk-free income. Understanding the risks is essential before deploying capital.

Adverse selection

Informed traders who know something you do not will take the other side of your orders right before a big move. They buy from your asks before a pump and sell into your bids before a dump. Your limit orders become free options for anyone with better information. This is the single largest cost for market makers.

Inventory risk in trending markets

During a sustained trend, the bot accumulates a growing position on the losing side. If BTC drops 5% in an hour, your buy orders fill continuously while sells never execute. You end up long a falling asset. Inventory skew helps but cannot fully offset a strong directional move.

Fee considerations

If your effective spread after fees is negative, you lose money on every completed round-trip. Always calculate your expected profit per cycle: (bid_spread + ask_spread) minus (maker_fee_buy + maker_fee_sell). This number must be positive.

Exchange risk

Your capital sits on the exchange. Exchange outages, API failures, or in extreme cases insolvency can result in loss of funds. Using non-custodial exchanges or keeping only working capital on centralized venues reduces this risk.

Getting Started with BreakOrb Market Making

Here is a practical checklist for your first market making deployment:

  1. Choose a high-volume pair — Start with BTC/USDT or ETH/USDT. These have the deepest liquidity and tightest native spreads.
  2. Set conservative spreads — Begin with bid_spread and ask_spread at 0.1%. You can tighten later once you see consistent fills.
  3. Use 3 order levels — This gives you depth without overexposing capital. Set order_level_spread at 0.05%.
  4. Set order_refresh_time to 15 seconds — This balances freshness with API rate limits.
  5. Enable inventory skew — Set inventory_target_pct to 50% and inventory_skew to a moderate value. Monitor how it adjusts during your first 24 hours.
  6. Start with small order_amount — Use the minimum viable size for your chosen exchange. Scale up only after observing stable performance over several days.
  7. Monitor fill rates — If fewer than 60% of your orders fill within their refresh window, your spreads may be too wide. If nearly 100% fill instantly, your spreads are too tight and you are giving away edge.

Market making is available on BreakOrb's Pro and Elite plans. The Pro plan includes single-pair market making with standard parameters. The Elite plan adds multi-pair support, advanced inventory management, and custom skew profiles.

Ready to Start Market Making?

BreakOrb's market making bot is available on Pro and Elite plans.

View Plans