第3章 价差与滑点:做市商的核心博弈
做市商这行,说白了就是在价差和滑点之间找饭吃。
我刚开始做市商策略那会儿,总觉得只要把买卖单挂上去就能赚钱。结果呢?被滑点吃得骨头都不剩。今天咱们就聊聊这两个核心概念——价差和滑点,它们是怎么影响你口袋里的钱的。
3.1 买卖价差(Spread)的计算
价差,就是买一价和卖一价之间的差额。简单吧?但这里面的门道可不少。
Spread = Ask Price - Bid Price
或者用相对值:
Relative Spread = (Ask - Bid) / Mid Price × 100%
举个例子。假设某股票当前买一价是100.01,卖一价是100.03。那么:
- 绝对价差 = 100.03 - 100.01 = 0.02
- 中间价 = (100.01 + 100.03) / 2 = 100.02
- 相对价差 = 0.02 / 100.02 × 100% ≈ 0.02%
我个人习惯用相对价差,因为它能跨品种比较。比如比特币的价差可能是0.01%,而某些小盘股可能高达1%。你想想看,同样做一手,赚的完全不是一个量级。
3.2 影响价差的因素
价差不是固定的。它像水一样,随市场温度变化。我总结了几大关键因素:
| 因素 | 影响方向 | 我的经验 |
|---|---|---|
| 流动性 | 流动性越高,价差越小 | 我在BTC/ETH上见过0.005%的价差,而某些山寨币能到5% |
| 波动性 | 波动越大,价差越大 | 新闻发布前后,价差能扩大3-5倍 |
| 交易时间 | 非主流时段价差更大 | 凌晨3点的外汇市场,价差能翻倍 |
| 订单簿深度 | 深度越厚,价差越稳定 | 深度不足时,大单会直接吃掉价差 |
| 市场情绪 | 恐慌时价差急剧扩大 | 2020年3月,很多品种价差扩大了10倍 |
这里有个避坑指南:千万别在流动性差的时候做市。我曾经在某个小币种上挂单,结果一个突发消息让价差从0.1%瞬间跳到3%,我的止损单直接被打穿,亏了不小一笔。
3.3 滑点的成因与计算
滑点,就是你预期的成交价和实际成交价之间的差异。说白了,就是市场不给你面子。
Slippage = Actual Fill Price - Expected Price
正滑点:买贵了或卖便宜了(亏损)
负滑点:买便宜了或卖贵了(盈利)
滑点的成因主要有三个:
- 订单簿深度不足——你的单子太大,吃光了最优价位的挂单
- 市场波动剧烈——价格在你下单到成交之间发生了变动
- 延迟——网络延迟或交易所处理延迟
举个例子。你想以100.00的价格买入1000股,但买一只有200股。你的订单会这样成交:
- 200股 @ 100.00
- 300股 @ 100.01
- 500股 @ 100.02
实际成交均价 = (200×100.00 + 300×100.01 + 500×100.02) / 1000 = 100.013
滑点 = 100.013 - 100.00 = 0.013(每股多花了1.3分钱)
3.4 如何控制滑点风险
控制滑点,是做市商的核心技能之一。我这些年总结了几条实用策略:
- 拆单策略——大单拆成小单,分批进场。我习惯把单子拆到订单簿的5-10个价位上。
- 时间加权平均价格(TWAP)——把订单均匀分布在时间轴上。比如1000股分10分钟,每分钟100股。
- 成交量加权平均价格(VWAP)——根据历史成交量分布来安排订单。成交量大的时段多下,小的时段少下。
代码实现一个简单的拆单逻辑:
def split_order(total_qty, price_levels, order_book):
"""
将大单拆到多个价位
total_qty: 总数量
price_levels: 要拆到的价位数量
order_book: 当前订单簿
"""
# 获取每个价位的可用深度
depths = []
for level in range(price_levels):
depth = order_book.get_depth_at_level(level)
depths.append(depth)
total_depth = sum(depths)
# 按深度比例分配
orders = []
remaining = total_qty
for i, depth in enumerate(depths):
if remaining <= 0:
break
qty = min(int(total_qty * depth / total_depth), remaining)
if qty > 0:
orders.append((order_book.get_price_at_level(i), qty))
remaining -= qty
return orders
嗯,这里要注意:拆单不是万能的。在极端行情下,拆得太细反而会错过时机。我一般会设置一个最大滑点容忍度,比如0.1%。一旦超过这个值,就停止交易,等市场稳定再说。
3.5 知识体系总览
下面这张图,是我对本章内容的总结。你可以把它当作一个思维导图来看:
你看,价差和滑点就像一对孪生兄弟。价差是你的收入来源,滑点是你的成本支出。做市商的核心,就是让收入大于支出。
最后分享一个我自己的经验:永远不要追求零滑点。那是不可能的。你要做的是把滑点控制在一个可接受的范围内。我一般会把滑点预算设在预期收益的20%-30%。比如预期赚100块,就允许最多30块的滑点损失。超过这个数,要么撤单,要么调整策略。
好了,价差和滑点就聊到这儿。记住一句话:做市商赚的是流动性的钱,亏的是滑点的钱。把这两样搞明白了,你就已经入门了。