订单管理:订单类型、生命周期与状态机
做市系统的核心,说白了就是管好每一笔订单。我做了这么多年交易系统,见过太多因为订单管理混乱导致的惨案——资金损失、交易所封号,甚至整个策略崩盘。今天咱们就把订单管理这块彻底讲透。
一、订单类型:三种基础武器
做市交易中,我们主要跟三种订单打交道。每种都有它的脾气,用错了会出大问题。
1. 限价单(Limit Order)
限价单是我个人最常用的订单类型。你指定一个价格,只有市场达到这个价格时才会成交。说白了,就是「不到这个价我不卖」。
核心特点:
- 保证成交价格,不保证成交时间
- 做市策略的基石,用来提供流动性
- 可能部分成交,也可能完全不成交
我在项目中遇到过一个问题:限价单挂在盘口,结果市场剧烈波动,价格直接跳过你的挂单价。这时候订单就「飘」在那里了。嗯,这就是所谓的「滑点风险」。
2. 市价单(Market Order)
市价单就是「不管什么价格,立刻给我成交」。它保证成交时间,但不保证成交价格。
避坑指南:
我曾经在流动性差的币对上用过市价单,结果成交价格比预期差了2%。那笔交易直接亏掉了当天的利润。记住:市价单只适合高流动性市场。
3. 止损单(Stop Order)
止损单是个有意思的东西。它平时不干活,一旦价格触及止损价,就变成市价单或限价单去执行。
你想想看,为什么需要止损单?因为人盯盘总有疏忽的时候。我习惯在策略启动时就把止损单挂好,这样即使网络断了,系统也能自动保护自己。
| 订单类型 | 价格保证 | 时间保证 | 典型用途 |
|---|---|---|---|
| 限价单 | 是 | 否 | 做市挂单、套利 |
| 市价单 | 否 | 是 | 紧急平仓、大单拆小 |
| 止损单 | 部分保证 | 触发后保证 | 风险控制、趋势跟踪 |
二、订单生命周期:从生到死
一笔订单从创建到最终消失,经历的过程就是生命周期。我把它分成四个阶段:
- 创建阶段:系统生成订单,校验参数
- 存活阶段:订单在订单簿上等待成交
- 成交阶段:部分或全部成交
- 终结阶段:完全成交、被撤销或过期
这里有个细节很多人会忽略:订单的生命周期不是线性的。比如一个限价单可能先部分成交,然后你撤单,剩下的部分就终结了。我见过新手写的代码,以为订单要么全成交要么全撤,结果状态机跑飞了。
三、订单状态机:核心逻辑
状态机是订单管理的灵魂。我画了一张图,你看完就明白了:
这张图展示的是标准的状态流转。实际项目中,我还会加一些中间状态,比如「等待确认」、「重试中」。为什么?因为网络延迟会导致状态不同步,你发了个撤单指令,交易所还没处理完,这时候订单就处于一个「薛定谔的状态」。
四、撤单逻辑:细节决定成败
撤单看起来简单,发个指令就行。但实际坑很多:
我的经验:
撤单要分两步走:先发撤单请求,再确认撤单结果。我曾经只发了请求就不管了,结果交易所那边没处理成功,订单还在挂着。后来市场反转,那个订单被成交了,亏了不少。
正确的撤单逻辑应该是:
def cancel_order(order_id):
# 第一步:发送撤单请求
send_cancel_request(order_id)
# 第二步:等待确认(带超时)
result = wait_for_cancel_confirm(order_id, timeout=5)
if result == 'confirmed':
# 更新本地状态
update_order_status(order_id, 'CANCELLED')
elif result == 'timeout':
# 查询实际状态
actual_status = query_order_status(order_id)
if actual_status == 'FILLED':
# 订单已被成交,处理成交逻辑
handle_fill(order_id)
else:
# 重试撤单
retry_cancel(order_id)
你想想看,如果撤单超时了怎么办?直接认为撤单成功?那万一订单其实成交了呢?所以一定要查一下实际状态。这个逻辑我称之为「撤单三明治」——先发请求,再确认,最后兜底。
五、实战中的状态管理
做市系统里,订单状态管理有几个关键点:
- 本地状态 vs 交易所状态:永远以交易所状态为准。我见过有人本地状态和交易所不一致,结果重复下单,被交易所警告了。
- 状态同步频率:我建议每100ms同步一次活跃订单的状态。太频繁浪费资源,太慢容易错过机会。
- 异常状态处理:比如订单「消失」了——既没成交也没撤单。这种情况通常是交易所内部错误,需要人工介入。
重要提醒:
不要相信任何「看起来没问题」的订单。我有个血的教训:一个订单显示「已提交」,但实际交易所那边已经宕机了。等恢复后,那个订单被以极差的价格成交了。从那以后,我所有订单都加了健康检查机制。
好了,订单管理这块就讲到这里。记住:订单是策略和市场的桥梁,管好订单,你的做市系统就成功了一半。
无相订单流研究社 微信Lucian808555