一、订单簿基础:什么是订单簿?限价单与市价单的区别
各位同学,今天咱们来聊聊订单簿。这东西听起来挺唬人,其实说白了——它就是交易所里那个「挂单的账本」。我刚开始做量化的时候,觉得订单簿就是个价格列表,后来吃了不少亏才明白,它背后藏着市场的真实博弈。
1.1 订单簿到底是什么?
想象一下你去菜市场买菜。有人喊「西红柿三块一斤,我要买十斤」,有人喊「我两块五卖,谁要?」——这些喊价和喊量,就是订单。交易所把所有人的买卖意愿按价格排好,就成了订单簿。
订单簿分两边:
- 买单(Bids):大家想买的价格和数量,从高到低排
- 卖单(Asks):大家想卖的价格和数量,从低到高排
中间那个价差,就是买卖双方的心理差距。价差越小,说明市场越活跃。我见过比特币在波动剧烈时,价差能拉到几十美金,那时候做市商都不敢轻易挂单。
核心概念:订单簿不是静态的。每一秒都在变。你看到的瞬间,可能已经有人成交了。
下面这张图,是我手绘的订单簿结构,你看一眼就懂了:
1.2 限价单 vs 市价单
这两种订单,是交易里最基础的操作。我见过不少新手把两者搞混,结果亏了钱还不知道怎么回事。
限价单(Limit Order)
你指定一个价格,说「我只在这个价买/卖」。比如你挂一个「买入BTC,限价30000」,那只有价格跌到30000或以下才会成交。好处是你能控制成本,坏处是可能一直成交不了——市场没到那个价。
我的经验:做回测时,我习惯用限价单模拟真实交易。因为市价单在回测里容易产生「滑点幻觉」——看起来赚了,实际成交价差很多。
市价单(Market Order)
你不管价格,直接说「我要买,立刻成交」。系统会按当前最优价格给你成交。比如你下市价买单,它会吃掉订单簿里最便宜的卖单。速度快,但价格不可控——尤其在流动性差的时候。
我举个例子你就明白了:
| 订单类型 | 控制价格 | 保证成交 | 适用场景 |
|---|---|---|---|
| 限价单 | ✅ 完全控制 | ❌ 不一定 | 做市、挂单等待 |
| 市价单 | ❌ 不可控 | ✅ 立即成交 | 抢单、止损 |
避坑指南:我曾经在流动性差的币种上用了市价单,结果成交价比预期高了2%。从那以后,我遇到低流动性品种,一律用限价单+滑点容忍度设置。
1.3 订单簿里的「暗流」
你以为订单簿就是表面那些数字?太天真了。真正的老手会看这些东西:
- 深度:某个价格附近有多少挂单。深度厚,说明支撑/阻力强
- 挂单变化速度:突然撤单又挂单,可能是大资金在试盘
- 冰山订单:只显示一部分,实际挂单量更大。我见过有人用这个手法骗散户跟单
我记得有一次做回测,发现某个策略在回测里收益很好,实盘却一直亏。后来一查,原来是订单簿深度不够,市价单的滑点把利润全吃掉了。嗯,从那以后我回测必加滑点模型。
1.4 代码看一眼
下面是一个简单的订单簿数据结构,用Python表示:
# 一个简化的订单簿
order_book = {
'bids': [ # 买单,价格从高到低
{'price': 9.99, 'size': 500},
{'price': 9.98, 'size': 200},
{'price': 9.97, 'size': 100}
],
'asks': [ # 卖单,价格从低到高
{'price': 10.00, 'size': 300},
{'price': 10.01, 'size': 150},
{'price': 10.02, 'size': 200}
]
}
# 计算中间价和价差
best_bid = order_book['bids'][0]['price']
best_ask = order_book['asks'][0]['price']
spread = best_ask - best_bid
mid_price = (best_bid + best_ask) / 2
print(f"最佳买价: {best_bid}")
print(f"最佳卖价: {best_ask}")
print(f"价差: {spread}")
print(f"中间价: {mid_price}")
这段代码虽然简单,但它是所有订单簿分析的基础。你想想看,如果每秒更新一次这个结构,再记录变化,就能分析出很多市场行为。
1.5 小结一下
订单簿就是市场的「实时投票器」。限价单是「我坚持这个价」,市价单是「我现在就要」。两者没有绝对好坏,关键看你的策略和当前市场环境。
我个人建议:刚开始做回放训练时,先用限价单模拟,等熟悉了订单簿的跳动规律,再尝试市价单。别一上来就猛冲,容易交学费。
公众号:蓝海资料掘金营,微信deep3321