第29章 做市策略中的高频做市技术:FPGA加速、硬件时钟同步、订单簿重建、市场微观结构分析
做市做到高频这个层面,说白了就是跟时间赛跑。我刚开始接触高频做市时,总觉得软件层面优化到极致就够了。直到有一次,我在一个竞争激烈的期权品种上,眼睁睁看着自己的订单总是慢别人几微秒成交——嗯,那感觉就像百米赛跑,你起跑就慢了半拍,后面再怎么追都白搭。
这一章,我们聊聊高频做市里那些硬核技术。FPGA加速、硬件时钟同步、订单簿重建、市场微观结构分析,这些词你可能都听过。但真正把它们串起来,形成一套能赚钱的策略,才是关键。
29.1 FPGA加速:把逻辑烧进芯片里
先说说FPGA。你想想看,CPU处理数据,是一条指令一条指令地跑。哪怕你代码写得再漂亮,指令流水线再优化,终究是串行的。FPGA不一样,它是硬件逻辑,可以并行处理。
我在做市策略里,把最耗时的几个环节搬到了FPGA上:
- 行情解码:交易所发来的二进制行情,CPU解码大概要1-2微秒。FPGA呢?几百纳秒搞定。
- 订单簿维护:每次行情更新,都要增删改查订单簿。CPU做这个,涉及内存分配、链表操作。FPGA直接用硬件逻辑维护一个固定深度的订单簿,一个时钟周期就能完成更新。
- 信号计算:比如价差、中间价、波动率这些基础指标,FPGA可以流水线计算,每个时钟周期出一个结果。
核心思路:FPGA不是替代CPU,而是做CPU不擅长的事。CPU擅长复杂逻辑判断,FPGA擅长固定流程的极速处理。两者配合,才是最优解。
我习惯把策略拆成两部分:
- FPGA层:处理行情、维护订单簿、计算基础信号。这部分逻辑固定,延迟敏感。
- CPU层:做策略决策、风险管理、订单管理。这部分逻辑复杂,需要灵活性。
举个例子,一个简单的价差做市策略,FPGA负责实时计算买卖价差和中间价,当价差超过阈值时,直接向CPU发送一个触发信号。CPU收到信号后,再决定是否下单、下什么单。
避坑指南:我曾经在FPGA上实现了一个过于复杂的策略逻辑,结果调试了整整两周。后来学乖了——FPGA只做简单、固定、高频的操作。复杂逻辑留给CPU,别跟自己过不去。
29.2 硬件时钟同步:别让你的时间乱了套
做高频做市,时间就是一切。你下的订单,什么时候到达交易所?你收到的行情,是什么时候产生的?如果时间不同步,你连自己比别人快还是慢都搞不清楚。
我见过最惨的案例:一个团队用NTP同步时间,误差在毫秒级别。他们以为自己比别人快,实际上慢了几百微秒。结果呢?天天被市场收割。
硬件时钟同步,目前主流方案是PTP(Precision Time Protocol),配合硬件时间戳。说白了,就是在网卡或者交换机上打时间戳,精度能达到亚微秒级。
具体怎么做?
- PTP主时钟:通常用GPS或北斗信号作为基准,精度在纳秒级。
- PTP从时钟:你的服务器网卡支持PTP,硬件自动同步主时钟。
- 硬件时间戳:网卡收到网络包时,直接打上硬件时间戳,不经过CPU。这样避免了软件延迟带来的误差。
注意:不是所有网卡都支持硬件PTP。买之前一定要确认。我吃过这个亏,买了一批号称支持PTP的网卡,结果只是软件PTP,精度差了一个数量级。
有了硬件时钟同步,你才能准确测量延迟。比如,从行情到达网卡,到策略发出订单,再到订单到达交易所,每个环节的延迟都能精确到微秒级。这样你才能知道瓶颈在哪,优化才有方向。
29.3 订单簿重建:从原始数据到市场全貌
交易所发来的行情数据,通常是增量更新的。比如,某价格上的挂单量变了,或者新增了一个价格档位。你要把这些增量数据拼起来,重建出完整的订单簿。
这个环节,看似简单,实则坑很多。
我遇到过的问题:
- 数据乱序:交易所的行情数据可能不是严格按照时间顺序到达的。比如,先收到一个删除订单的消息,后收到这个订单的创建消息。如果你按顺序处理,订单簿就乱了。
- 数据丢失:网络抖动,可能丢包。丢了一个增量消息,订单簿就永远对不上了。
- 快照与增量:交易所通常会定期发送快照(完整的订单簿),平时发增量。你要在收到快照后,用增量持续更新。但快照和增量之间可能有时间差,处理不好就会出错。
我的做法是:
- 维护一个序列号:每个行情消息都有序列号。按序列号处理,乱序的缓存起来,等前面的补上了再处理。
- 定期校验:收到快照后,用快照覆盖当前订单簿。然后从快照之后的第一条增量开始重新处理。这样即使之前有错误,也能纠正过来。
- 冗余设计:同时维护两份订单簿。一份用于策略决策,一份用于校验。两份不一致时,触发告警。
关键点:订单簿重建的延迟和准确性,直接影响策略表现。延迟高了,你看到的市场已经变了。准确性差了,你的策略基于错误的数据做决策,后果可想而知。
29.4 市场微观结构分析:读懂市场的语言
高频做市,不能只看价格和成交量。你要读懂市场的微观结构——订单流的模式、挂单的行为、撤单的规律。这些东西,才是高频做市的真正武器。
我常用的几个微观结构指标:
| 指标 | 含义 | 做市中的应用 |
|---|---|---|
| 订单到达率 | 单位时间内新订单的数量 | 判断市场活跃度,调整报价频率 |
| 撤单率 | 挂单后被撤销的比例 | 高撤单率说明市场不稳定,缩小报价价差 |
| 订单簿不平衡 | 买卖两侧挂单量的差异 | 判断短期价格方向,调整报价偏向 |
| 价差分布 | 不同价差出现的频率 | 找到最优报价价差,平衡成交概率和利润 |
| 大单冲击 | 大额订单对订单簿的影响 | 识别机构行为,提前调整仓位 |
举个例子,订单簿不平衡这个指标。如果买单侧的挂单量远大于卖单侧,说明市场短期看涨情绪浓。这时候,我作为做市商,会适当提高卖单报价,降低买单报价。说白了,就是顺势而为。
但要注意,微观结构分析不能孤立使用。我曾经犯过一个错误:只看订单簿不平衡,忽略了整体市场趋势。结果市场突然反转,订单簿不平衡瞬间逆转,我被打了个措手不及。
我的习惯:微观结构指标作为辅助信号,结合宏观趋势和波动率一起用。比如,波动率高的时候,微观结构信号的权重降低。因为高波动下,订单流噪音大,容易误判。
29.5 把这些技术串起来:一个完整的高频做市流程
说了这么多,我们看看这些技术怎么配合。我画了一张流程图,展示高频做市的核心逻辑:
这个流程,说白了就是:行情进来,FPGA快速处理,同步时钟打时间戳,重建订单簿,分析微观结构,最后CPU做决策下单。每个环节都优化到极致,整体延迟才能压到微秒级。
我见过很多团队,只优化了其中一两个环节,其他环节拖后腿。比如FPGA处理得飞快,但CPU决策逻辑写得稀烂,延迟反而更高。记住,木桶效应在高频做市里特别明显——你的延迟取决于最慢的那个环节。
总结一下:高频做市技术,不是炫技。每一微秒的优化,都是为了在激烈的市场竞争中多赚一点。FPGA加速、硬件时钟同步、订单簿重建、微观结构分析,这四个技术缺一不可。把它们用好,你才能在市场上站稳脚跟。
最后说一句:技术是手段,不是目的。我见过有人把FPGA玩得飞起,但策略本身是亏钱的。先有好的策略,再用技术去加速它。顺序别搞反了。