高频交易系统 E03

回顾

高频交易系统E02: Gateway
高频交易系统E01: 基本架构

交易策略 Trading Strategy

本篇讲一讲交易策略。当然这不是策略的具体类型及细节,而是将交易策略在交易系统中,它作为一个组件是怎么样的。

一个交易系统启动之后,往往要运行多个交易策略。单个的交易策略主要由行情变动驱动,打个比方——如果市场的价格发生大幅度变化,那么可能某个期权的报价(Quoting)策略就要立马做很多撤单操作了。一些策略同样也会对成交(Trade)做出相应。

除了直接处理行情信息外,策略也会处理由行情间接引发的其他因子(factor)的更新变化。这些因子的更新频率可能不如实时行情那么频繁,但是也会通过其他的消息途径输入。另外,可能有一些人工设定的策略参数发生了临时调整,这些信息也会输入进来。

如果要对行情变化做出响应,在一个多线程的交易系统中,可能会用到一些消息队列。行情更新的信息会被主线程推到消息队列里,每个策略跑在单独的线程(这个线程可能会独占某个CPU核心)中,不停地做循环(Busy loop)去拿队列里的可用更新数据,做出相应的响应,然后再继续下一次轮询…

将策略的实现与多线程细节隔离。交易策略的执行可能会用到多线程,但是较好的实践方式是将多线程的业务逻辑和策略的主逻辑进行隔离,一个策略需要尽可能在在自身逻辑上保持单线程。如果策略逻辑本身需要费心多线程的话(例如和其他策略频繁地交流),它的性能将变得比较差。

策略的输出——基本上是一堆指令(command),其中绝大多数是交易指令。这些交易指令基本上会被堆到一些队列容器里,然后——等等——得交给交易限制检查(limit checker)模块先做一番检查。不同策略发出的交易指令可能会有冲突或者重叠,所以如果能安排一个Order Execution Manager的模块来快速处理这些交易指令,可能是明智之举。经过筛查的交易指令最终将会被发回到网关(Gateway)模块,然后发往交易所。一般来说,一个策略不是很关心它生成的单条指令最终的执行结果,这是因为系统发出去的订单结果,包括市场对它的反应,肯定会第一时间反馈到行情更新上。当然Order Execution Manager可能会对发单执行情况做一些统计并作为信息输入的一部分回馈给某个策略。

What’s next…

不出意外,下一篇将会讲一些高频交易系统常见的评测指标(metrics).

发表评论

电子邮件地址不会被公开。 必填项已用*标注