1. 做市引擎概述:什么是做市引擎,做市策略的核心逻辑,延迟对做市的影响
做市引擎,说白了就是一套自动化报价系统。它不停地在市场上挂买单和卖单,赚取买卖价差。我做了这么多年低延迟系统,见过太多人把做市引擎想得太复杂——其实核心逻辑就三件事:怎么报价、怎么管理库存、怎么控制风险。
嗯,咱们先把这个概念理清楚。
1.1 做市引擎的本质
做市引擎不是交易策略,它是策略的执行层。你想想看,策略告诉你「现在应该报买价100.01,卖价100.03」,但怎么把这个指令变成交易所能识别的订单?怎么保证在1微秒内发出去?怎么处理撤单重发?这些才是做市引擎干的事。
核心职责:
- 接收策略层的报价信号
- 管理订单生命周期(创建、修改、撤销)
- 处理交易所的成交回报
- 维护本地订单簿状态
- 监控延迟和异常
我在项目中遇到过一家做市商,他们的策略模型很漂亮,但引擎层写得一塌糊涂。订单发出去后,成交回报回来要50微秒才处理完。结果呢?策略以为订单还在挂着,又发了一个新的,直接超仓。所以我说,引擎层才是做市的命门。
1.2 做市策略的核心逻辑
做市策略的核心逻辑,其实就一个公式:
报价 = 理论价格 + 库存调整 + 风险溢价
听起来简单吧?但每个分量怎么算,学问大了去了。
理论价格:通常是中间价,或者用订单簿的加权平均价。我习惯用买一价和卖一价的中间值,但遇到流动性差的市场,这个中间价可能失真。
库存调整:这是做市商最头疼的事。你手里囤了一堆货,价格一跌就亏钱。所以库存多了,报价要偏向卖出方向;库存少了,偏向买入方向。我曾经见过一个团队,库存调整系数设得太激进,结果一天之内把库存从正1000打到负2000,来回亏了两次价差。
风险溢价:市场波动大的时候,价差要拉宽。波动小的时候,价差可以收窄。这个参数我建议用实时波动率来算,别用历史数据——历史数据在极端行情下完全没用。
我的经验:库存管理是做市策略的「隐形杀手」。很多新手只盯着价差收入,忽略了库存风险。我建议每天收盘后做一次库存压力测试,看看如果市场反向波动2%,你的库存会亏多少。
1.3 延迟对做市的影响
延迟是做市的天敌。为什么?因为做市赚的是「速度钱」。
你想想看,你在100.01挂了买单,别人也在100.01挂了买单。谁的订单先到交易所,谁就能成交。延迟多1微秒,可能就少成交100笔。这不是夸张,我在实盘中见过,延迟从5微秒涨到10微秒,做市收益直接腰斩。
延迟的影响主要体现在三个方面:
| 延迟类型 | 影响 | 典型场景 |
|---|---|---|
| 网络延迟 | 订单到达交易所的时间变长 | 跨机房、跨地域部署 |
| 处理延迟 | 从收到行情到发出订单的时间 | 策略计算、订单编码 |
| 竞争延迟 | 被其他做市商抢先成交 | 同价位订单排队 |
我曾经优化过一个做市引擎,把处理延迟从20微秒降到了3微秒。你猜怎么着?做市收益提升了40%。不是因为策略变聪明了,只是因为订单比别人快了一步。
注意:延迟优化不是越极致越好。我见过有人为了省1微秒,把错误检查全砍了,结果一次异常订单亏了50万。延迟优化要在可靠性的前提下进行,这个度要把握好。
1.4 做市引擎的典型架构
下面这张图是我个人比较推崇的做市引擎架构。它把延迟敏感的部分和业务逻辑部分分开了。
这个架构里,引擎层是延迟优化的主战场。策略层可以写得慢一点,但引擎层必须快。我习惯把引擎层用C++写,策略层用Python或者C#,中间通过共享内存通信。这样既保证了速度,又保留了策略开发的灵活性。
1.5 做市引擎的延迟预算
做市引擎的延迟预算,我一般这么分配:
- 行情处理: 1-2微秒。包括解码、校验、更新本地订单簿。
- 策略计算: 1-3微秒。包括报价计算、库存调整。
- 订单发送: 1-2微秒。包括编码、加密、网络发送。
- 总预算: 3-7微秒。
你可能会问,7微秒够用吗?说实话,对于大部分做市场景,7微秒是及格线。低于3微秒是优秀,超过10微秒就要警惕了。我在优化一个期权做市引擎时,把总延迟从12微秒压到了4微秒,收益提升了30%。
一个小技巧:做延迟预算时,别只看平均值。要看P99和P99.9。我见过一个系统平均延迟5微秒,但P99.9延迟飙到50微秒。这种抖动对做市的影响比平均延迟大得多。
1.6 总结
做市引擎不是魔法,它就是个把策略想法变成实际订单的工具。但就是这个工具,决定了你能不能赚到钱。延迟每快1微秒,你的订单就比别人多一分成交机会。
我个人习惯把做市引擎分成三层:策略层、引擎层、接入层。引擎层是延迟优化的核心,也是我们这门课要重点讲的内容。后面的章节,我会带你一步步拆解每个模块的延迟优化技巧。
嗯,今天就先聊到这儿。记住一句话:做市赚的是速度钱,延迟就是你的竞争力。
公众号:蓝海资料掘金营,微信deep3321