第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 订单簿重建:从原始数据到市场全貌

交易所发来的行情数据,通常是增量更新的。比如,某价格上的挂单量变了,或者新增了一个价格档位。你要把这些增量数据拼起来,重建出完整的订单簿。

这个环节,看似简单,实则坑很多。

我遇到过的问题:

  • 数据乱序:交易所的行情数据可能不是严格按照时间顺序到达的。比如,先收到一个删除订单的消息,后收到这个订单的创建消息。如果你按顺序处理,订单簿就乱了。
  • 数据丢失:网络抖动,可能丢包。丢了一个增量消息,订单簿就永远对不上了。
  • 快照与增量:交易所通常会定期发送快照(完整的订单簿),平时发增量。你要在收到快照后,用增量持续更新。但快照和增量之间可能有时间差,处理不好就会出错。

我的做法是:

  1. 维护一个序列号:每个行情消息都有序列号。按序列号处理,乱序的缓存起来,等前面的补上了再处理。
  2. 定期校验:收到快照后,用快照覆盖当前订单簿。然后从快照之后的第一条增量开始重新处理。这样即使之前有错误,也能纠正过来。
  3. 冗余设计:同时维护两份订单簿。一份用于策略决策,一份用于校验。两份不一致时,触发告警。

关键点:订单簿重建的延迟和准确性,直接影响策略表现。延迟高了,你看到的市场已经变了。准确性差了,你的策略基于错误的数据做决策,后果可想而知。

29.4 市场微观结构分析:读懂市场的语言

高频做市,不能只看价格和成交量。你要读懂市场的微观结构——订单流的模式、挂单的行为、撤单的规律。这些东西,才是高频做市的真正武器。

我常用的几个微观结构指标:

指标 含义 做市中的应用
订单到达率 单位时间内新订单的数量 判断市场活跃度,调整报价频率
撤单率 挂单后被撤销的比例 高撤单率说明市场不稳定,缩小报价价差
订单簿不平衡 买卖两侧挂单量的差异 判断短期价格方向,调整报价偏向
价差分布 不同价差出现的频率 找到最优报价价差,平衡成交概率和利润
大单冲击 大额订单对订单簿的影响 识别机构行为,提前调整仓位

举个例子,订单簿不平衡这个指标。如果买单侧的挂单量远大于卖单侧,说明市场短期看涨情绪浓。这时候,我作为做市商,会适当提高卖单报价,降低买单报价。说白了,就是顺势而为。

但要注意,微观结构分析不能孤立使用。我曾经犯过一个错误:只看订单簿不平衡,忽略了整体市场趋势。结果市场突然反转,订单簿不平衡瞬间逆转,我被打了个措手不及。

我的习惯:微观结构指标作为辅助信号,结合宏观趋势和波动率一起用。比如,波动率高的时候,微观结构信号的权重降低。因为高波动下,订单流噪音大,容易误判。

29.5 把这些技术串起来:一个完整的高频做市流程

说了这么多,我们看看这些技术怎么配合。我画了一张流程图,展示高频做市的核心逻辑:

高频做市策略核心流程 交易所行情 FPGA加速层 行情解码 | 订单簿维护 | 基础信号计算 延迟:几百纳秒 硬件时钟同步 PTP + 硬件时间戳 订单簿重建 序列号校验 | 快照+增量 微观结构分析 订单流 | 不平衡 | 撤单率 策略决策层 (CPU) 报价生成 | 风险管理 | 订单管理 发送订单至交易所

这个流程,说白了就是:行情进来,FPGA快速处理,同步时钟打时间戳,重建订单簿,分析微观结构,最后CPU做决策下单。每个环节都优化到极致,整体延迟才能压到微秒级。

我见过很多团队,只优化了其中一两个环节,其他环节拖后腿。比如FPGA处理得飞快,但CPU决策逻辑写得稀烂,延迟反而更高。记住,木桶效应在高频做市里特别明显——你的延迟取决于最慢的那个环节。

总结一下:高频做市技术,不是炫技。每一微秒的优化,都是为了在激烈的市场竞争中多赚一点。FPGA加速、硬件时钟同步、订单簿重建、微观结构分析,这四个技术缺一不可。把它们用好,你才能在市场上站稳脚跟。

最后说一句:技术是手段,不是目的。我见过有人把FPGA玩得飞起,但策略本身是亏钱的。先有好的策略,再用技术去加速它。顺序别搞反了。

无相订单流研究社 微信Lucian808555