第三章:交易系统基础

做量化交易这些年,我见过太多人一上来就研究策略、回测、机器学习。但说实话,如果连交易系统的基础都没吃透,后面全是空中楼阁。今天我们就聊聊电子交易系统的骨架——架构、订单类型,还有市场微观结构。

3.1 电子交易系统架构

先说说架构。我刚开始做交易系统时,以为就是客户端连上交易所就完事了。后来被坑过一次才明白,这里面的门道深着呢。

一个典型的电子交易系统,通常分三层:

  • 接入层:负责跟交易所通信。处理协议、心跳、重连这些脏活累活。
  • 核心层:订单管理、风控检查、路由决策。这是系统的脑子。
  • 策略层:跑你的交易策略,生成买卖信号。

我个人习惯把架构画成下面这样:

策略层 CTA策略 | 做市策略 | 套利策略 | 高频策略 生成买卖信号,管理头寸 核心层 订单管理 | 风控检查 | 路由决策 | 资金管理 检查合规性,决定发往哪个交易所 接入层 FIX协议 | WebSocket | 行情网关 | 交易网关 处理网络连接、心跳、重连、协议解析 交易所(上期所 / 郑商所 / CME)

嗯,这里要注意。接入层是最容易被忽视的。我在项目中遇到过,策略跑得好好的,突然断连了。结果发现是交易所的会话超时机制没处理好。从那以后,我每个接入模块都加了自动重连和状态监控。

核心原则:每一层都要做隔离。策略层崩了不能影响接入层,接入层断线不能把核心层带崩。各层之间通过消息队列解耦,这是血的教训换来的。

3.2 订单类型

订单类型看着简单,但用错了会出大事。我见过有人把止损单当限价单用,结果亏了二十多万。咱们一个一个说。

3.2.1 市价单

市价单,说白了就是「不管多少钱,我现在就要成交」。它的特点是:

  • 成交速度快:几乎瞬间吃掉对手盘
  • 成交价格不确定:尤其在流动性差的时候,滑点能让你怀疑人生

我曾经在某个小品种上用过市价单,结果滑了3个tick,直接亏掉当天的利润。所以我现在只在流动性好的主力合约上用市价单。

3.2.2 限价单

限价单是「我只愿意在这个价格买/卖,高了我不买,低了我不卖」。它的特点是:

  • 价格可控:不会出现滑点问题
  • 成交不确定:可能挂一天都成交不了

做市策略基本全靠限价单。我建议,如果你做的是中低频策略,尽量用限价单。虽然慢一点,但成本可控。

3.2.3 止损单

止损单是风控的最后一道防线。它的逻辑是:价格触及止损价后,变成市价单或限价单去成交。

这里有个坑——止损单不保证成交价。我曾经在股指期货上设了止损,结果行情跳空,直接穿过了止损价,成交价比止损价低了十几个点。嗯,这就是所谓的「滑点放大」。

避坑指南:我曾经吃过一次大亏。在流动性差的合约上用了市价止损单,结果成交价远低于预期。后来我改用限价止损单,虽然可能不成交,但至少不会出现不可控的亏损。

三种订单的对比,我整理了个表格:

订单类型 成交确定性 价格确定性 适用场景
市价单 流动性好、追求速度
限价单 做市、成本敏感型策略
止损单 风控、趋势跟踪

3.3 市场微观结构

市场微观结构,听起来高大上,其实就是研究「订单是怎么撮合的」。你想想看,交易所里每天几百万笔订单,它们是怎么匹配的?

3.3.1 订单簿

订单簿就是交易所的「记账本」。买方的限价单按价格从高到低排,卖方的限价单按价格从低到高排。中间那个价格差,就是买卖价差。

我习惯把订单簿想象成一个「跷跷板」:

买方(Bid) 价格 100.50 数量 200 价格 100.40 数量 150 价格 100.30 数量 300 价格 100.20 数量 100 价格 100.10 数量 250 价差 卖方(Ask) 价格 100.60 数量 180 价格 100.70 数量 220 价格 100.80 数量 150 价格 100.90 数量 300 价格 101.00 数量 100

你看,买方最高出价100.50,卖方最低要价100.60。这中间的0.10就是价差。如果你现在用市价单买入,就会吃掉100.60那180手,然后继续吃100.70的。

3.3.2 买卖价差

价差是市场的「手续费」。你想想看,一买一卖之间,价差就是你的成本。流动性好的合约,价差可能只有1个tick。流动性差的,价差能大到几个tick甚至更多。

我建议,做策略之前先看看目标合约的价差。如果价差太大,你的策略利润可能全被价差吃掉了。我在做商品期货时,就因为这个原因放弃了好几个品种。

3.3.3 流动性

流动性,说白了就是「你想买的时候有人卖,你想卖的时候有人买」。衡量流动性的几个指标:

  • 订单簿深度:挂单的数量多不多
  • 价差宽度:买卖价差小不小
  • 成交速度:大单能不能快速成交

个人经验:我一般用「订单簿前五档的总量」来判断流动性。如果前五档加起来不到100手,我基本不会用市价单。另外,早盘和尾盘的流动性通常比盘中差,这个也要注意。

为什么会这样?因为做市商在开盘和收盘时风险最大,他们往往会缩小挂单量。所以如果你在开盘时用市价单,滑点可能会比较大。

好了,这一章的内容就这些。交易系统的基础,说白了就是搞清楚「订单怎么来、怎么走、怎么成交」。把这些搞明白了,后面讲策略实现的时候,你才能知道代码到底在干什么。


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