一、做市策略概述

什么是做市策略

做市策略,说白了就是「两边报价,赚取差价」。

我刚开始接触这个领域时,觉得它跟普通交易没什么两样。后来才发现,完全不是一回事。普通交易是「低买高卖」,做市则是「同时挂买单和卖单」。你想想看,一个交易对,我同时在买一价挂单买入,在卖一价挂单卖出。只要有人买我的卖单,有人卖给我的买单,我就赚到了中间的价差。

举个例子。假设 BTC/USDT 当前市场价是 50000。我挂单:

  • 买入价:49990(买一)
  • 卖出价:50010(卖一)

如果有人以 50010 从我这里买入,同时另一个人以 49990 卖给我,我就赚了 20 USDT 的差价。当然,这是理想情况。实际中要考虑手续费、库存风险、市场波动等等。

核心要点:做市策略不是预测价格涨跌,而是通过提供流动性来赚取买卖价差。说白了,你赚的是「服务费」。

做市商角色

做市商在市场中扮演什么角色?我个人的理解是——「市场的润滑剂」。

想象一下,如果没有做市商,你想买 100 个 ETH,可能得等半天才有人卖给你。价格还可能剧烈波动。做市商的存在,让市场随时都有对手盘。

具体来说,做市商承担了三个角色:

  • 流动性提供者:随时准备买卖,让交易者能快速成交
  • 价格稳定器:通过连续报价,减少价格跳空
  • 风险承担者:持有库存,承担价格波动风险

我在项目中遇到过一件事。某个新上线的代币,流动性极差,买卖价差能达到 5%。我们团队部署了做市策略后,价差直接压缩到 0.1%。交易所那边还专门发来了感谢信。嗯,这就是做市商的价值所在。

个人经验:做市商不是慈善家。我们提供流动性,本质上是为了赚钱。但客观上确实让市场变得更有效率了。双赢。

做市策略的核心盈利逻辑

盈利逻辑其实很简单,就三个字——「吃价差」。

但这里有个坑。我曾经以为只要挂单就能赚钱,结果亏得一塌糊涂。为什么?因为市场不是静止的。

核心盈利逻辑可以拆解为:

  1. 赚取买卖价差:这是最直接的收入来源。比如你在 100 挂买单,在 101 挂卖单,每成交一轮赚 1 个点。
  2. 赚取手续费返佣:很多交易所对做市商有手续费优惠,甚至返佣。这部分收入有时候比价差还多。
  3. 库存管理收益:通过动态调整库存,在价格波动中获利。比如价格涨了,你手里的库存升值了。

但要注意,盈利逻辑的反面就是风险:

盈利来源 对应风险
买卖价差 市场单边行情,价差被击穿
手续费返佣 交易量不足,返佣覆盖不了成本
库存管理 价格剧烈波动,库存大幅贬值

避坑指南:我曾经在某个山寨币上做市,以为价差稳赚。结果项目方砸盘,价格瞬间跌了 30%。我的库存全砸手里了。从那以后,我给自己定了个规矩——任何做市策略都必须有止损逻辑。

自动化交易系统的基本架构

做市策略靠手工操作?不现实。你想想看,同时监控几十个交易对,手动挂单撤单,根本忙不过来。所以必须自动化。

一个典型的自动化做市系统,我习惯把它分成四层:

  • 数据层:获取行情数据、订单簿数据、成交数据
  • 策略层:根据数据计算报价、管理库存、控制风险
  • 执行层:发送订单、撤单、查询订单状态
  • 监控层:实时监控系统状态、报警、日志记录

下面是我画的一张架构图,你可以直观感受一下:

自动化做市系统架构图 数据层 行情数据 | 订单簿 | 成交记录 | 账户信息 策略层 报价计算 | 库存管理 | 风险控制 | 参数调整 执行层 下单 | 撤单 | 订单查询 | 成交确认 监控层 实时监控 | 报警通知 | 日志记录

每一层都有它的职责。数据层负责「看」,策略层负责「想」,执行层负责「做」,监控层负责「盯」。

我建议初学者先从数据层开始搭建。为什么?因为数据是策略的基础。没有准确的数据,再好的策略也是空中楼阁。我记得刚开始做的时候,就因为行情数据延迟了 100 毫秒,导致报价总是慢半拍,亏了不少手续费。

关键点:自动化做市系统的核心是「低延迟」和「高可靠性」。延迟高了,你抢不到单;可靠性差了,系统崩溃可能让你爆仓。

举个简单的代码示例,展示数据层如何获取订单簿:

import requests

def get_orderbook(symbol, depth=10):
    """获取订单簿数据"""
    url = f"https://api.exchange.com/v1/orderbook/{symbol}"
    params = {"depth": depth}
    
    try:
        resp = requests.get(url, params=params, timeout=1)
        data = resp.json()
        return data["bids"], data["asks"]
    except Exception as e:
        print(f"获取订单簿失败: {e}")
        return None, None

# 使用示例
bids, asks = get_orderbook("BTCUSDT", depth=5)
print(f"买一价: {bids[0][0]}, 数量: {bids[0][1]}")
print(f"卖一价: {asks[0][0]}, 数量: {asks[0][1]}")

这段代码虽然简单,但已经能跑通基本流程了。实际生产环境中,我会加上重试机制、连接池、数据缓存等优化。嗯,这些后面章节会详细讲。

小技巧:刚开始做自动化系统时,别追求完美。先跑通一个最简单的版本,能赚钱了再慢慢优化。我见过太多人一开始就想搞个大而全的系统,结果半年了还没上线。

最后说一句,做市策略不是印钞机。它需要精细的参数调优、持续的风险监控,以及对市场深刻的理解。但如果你能掌握它,确实是一条稳定盈利的路子。


公众号:蓝海资料掘金营,微信deep3321