Market Making in Crypto
I am new to market making models and wanted try it out on real time data to see the performance. So I wrote a market making script which uses AS model on real time BTC data with dynamic parameters adjustment based on market conditions.
In addition to the model parameters (volatility, order arrival, risk aversion, spread, inventory etc.) I assumed an order fill probability to simulate the real condition as closely as possible.
I ran the model on paper (but real time data) assuming a starting capital of $10,000 on different time horizons - 1 hour, 30 mins, 10 mins, 5 mins etc.
I always get a positive return. The number of buy and sell orders are close enough, not skewed in one direction. The closing inventory is small, often close to zero. This tells me on paper that it's working like a market maker.
I have not yet included any "alpha" in the model or micro structure features for short term price prediction.
This is what I don't understand - why is it working ? (even without any "alpha"?) I am sure it can't be as simple as this. What challenges come up in actual market maker's trading?
Here's the result from one of the runs. Every run gives almost similar results:
📊 PERFORMANCE:
Duration: 610.1s
Total Trades: 325
Buy/Sell Ratio: 160/165
Initial Capital: $10000.00
Final Value: $10036.96
Total Return: $36.96
Return %: 0.3696%
Total Fees: $2.0965
Net Return: $34.87
Max Drawdown: 0.0%
🎯 INVENTORY MANAGEMENT:
Final Position: -0.0011 BTC
Position Value: $-98.29
Max Inventory: 0.02 BTC
Inventory Ratio: -5.5%
📈 SPREAD ANALYSIS:
Avg Spread: 30.0 bps
Min Spread: 30.0 bps
Max Spread: 30.0 bps
Avg Bid Spread: 15.0 bps
Avg Ask Spread: 15.0 bps
⚙️ MODEL PARAMETERS:
Risk Aversion (γ): 0.100
Volatility (σ): 1.8%
Order Rate (λ): 0.8/s
Market Regime: LOW_VOLATILITY
⚠️ RISK METRICS:
Emergency Mode: NO
Consecutive Losses: 0
Cash: 10135.249513438286
Inventory Value: -98.28522766172692
Total Value: 10036.96428577656
Posted Jan 3, 2026, 9:25 AM UTC