一、高频做市系统概述

各位同学好,我是老张。在量化交易这行摸爬滚打了十来年,今天咱们聊聊高频做市系统。

说实话,我第一次接触高频做市是在2015年。那时候刚进一家自营交易公司,看到屏幕上那些订单以微秒级的速度飞来飞去,说实话有点懵。后来慢慢才明白,这玩意儿说白了就是——用最快的速度,赚最小的价差

什么是高频做市

高频做市,英文叫High-Frequency Market Making。你想想看,交易所里每天有成千上万的买卖单子。有人想买,有人想卖,但他们的价格不一定能对上。

做市商干的事就是:同时挂出买单和卖单。比如比特币现价30000美元,我挂29999买,挂30001卖。有人卖给我,我就赚1美元;有人从我这儿买,我也赚1美元。

听起来简单吧?但这里有个坑——价格会波动。万一价格突然暴跌,我手里囤了一堆高价货,那就亏大了。

核心要点:高频做市不是赌博,而是管理风险。你赚的不是方向判断的钱,而是流动性的钱。

我见过太多人把做市当成了趋势交易。嗯,结果嘛...基本都亏得很惨。

为什么选择C++与Python混合编程

这个问题我经常被问到。有人觉得用Python就够了,有人觉得必须全上C++。我的答案是:小孩子才做选择,成年人全都要

咱们来看看各自的优势:

特性 C++ Python
执行速度 纳秒级 毫秒级
开发效率 低(写一行调半天) 高(一天能写几百行)
内存控制 精细到字节 自动管理
生态库 偏底层 数据分析、机器学习丰富
调试难度 高(段错误让人崩溃) 低(报错信息友好)

你看,这两者其实是互补的。我个人习惯是:C++负责核心交易引擎,Python负责策略研究和回测

举个例子,我曾经接手过一个项目,全用Python写的做市系统。回测跑得飞快,一上线就崩。为什么?Python的GIL锁在极端行情下直接卡死,订单发不出去。后来我们把订单管理模块用C++重写,Python只做数据分析和监控界面,系统就稳了。

我的建议:别想着用Python做高频交易的核心逻辑。它适合做"大脑",不适合做"手脚"。

系统整体架构设计

好了,咱们来看看一个典型的高频做市系统长什么样。我画了一张图,你一看就明白:

高频做市系统架构图 交易所接口层(C++) FIX协议 / 私有API / 行情推送 核心交易引擎(C++) 订单管理 | 风险管理 | 做市策略 | 行情处理 延迟:微秒级 数据桥接层(C++/Python混合) 共享内存 | ZeroMQ | Redis 策略研究与监控层(Python) 回测框架 | 数据分析 | 实时监控 | 机器学习 延迟:毫秒级

这张图我画得比较简洁,但核心思想都在里面了。从上到下分四层:

第一层:交易所接口层

这一层必须用C++写。为什么?因为延迟就是金钱。你想想看,别人用C++写的程序,从收到行情到发出订单只要5微秒。你用Python,光解析一个JSON就要50微秒。这45微秒的差距,在极端行情下可能就是几十万的盈亏。

我记得有一次做币安的做市,行情剧烈波动时,Python的WebSocket库直接丢包了。后来换成C++的libwebsockets,稳如老狗。

第二层:核心交易引擎

这是整个系统的心脏。包括:

  • 订单管理:维护订单状态机,处理撤单、改单
  • 风险管理:实时计算敞口、最大亏损
  • 做市策略:报价生成、价差调整
  • 行情处理:深度合并、价格计算

这一层我强烈建议全用C++。我曾经见过有人用Python写订单管理,结果在高并发下订单状态错乱,同一个订单被成交了两次。嗯,那天的亏损够买一辆车了。

避坑指南:订单状态机一定要用有限状态机实现,别用if-else硬写。我曾经吃过这个亏,后来老老实实用了boost::statechart。

第三层:数据桥接层

这一层是C++和Python的"翻译官"。C++算好的数据怎么传给Python?Python的策略信号怎么发给C++?

我常用的方案:

  • 共享内存:最快,适合高频数据
  • ZeroMQ:灵活,适合异步通信
  • Redis:方便,适合监控数据

我个人偏爱共享内存。为什么?因为它零拷贝。C++往共享内存里写数据,Python直接从里面读,中间没有任何网络开销。

第四层:策略研究与监控层

这一层就是Python的天下了。数据分析用pandas,机器学习用scikit-learn,可视化用matplotlib。开发效率极高。

我一般在这层做三件事:

  1. 回测:用历史数据验证策略
  2. 监控:实时看盈亏、持仓、延迟
  3. 调参:动态调整做市参数

这里有个小技巧:回测和实盘用同一套策略代码。我见过有人回测写一套,实盘又写一套,结果回测赚得盆满钵满,实盘亏得底朝天。为什么?因为两套代码有差异。

核心原则:回测代码 = 实盘代码。唯一的区别是数据来源不同。

好了,第一章的内容就到这里。这套架构我用了好几年,在多个交易所都验证过。当然,具体实现时还有很多细节,咱们后面慢慢聊。


公众号:蓝海资料掘金营,微信deep3321