
1.3 了解算法交易概念
本节将讲解很多新的概念,如交换订单簿(由市场参与者发出的不同种类的订单组成)、交换匹配算法、交换市场数据协议和交换订单输入协议等。接下来正式对这些概念进行更详细的讨论。
1.3.1 交换订单簿
交换订单簿保存了客户下达的所有买入和卖出订单,它跟踪所有传入订单的属性——价格、合同或股票数量、订单类型和市场参与者标识。买入订单(或出价)从最高价(最好的价格)到最低价(最差的价格)排序。就匹配而言,价格较高的出价有较高的优先权。相同价格的出价的优先级取决于匹配算法。最简单的先进先出(First In First Out,FIFO)算法采用的是直观的规则,即按照相同价格的订单进来的顺序进行优先级排序。这在后面我们讨论复杂的交易算法如何利用速度和智能来获得更高的订单优先级,以及对赢利的影响时,将非常重要。卖出订单(或要价)从最低价(最好的价格)到最高价(最差的价格)排序。同样,对于相同价格的要价,匹配优先级的方法取决于交易所对特定产品采用的匹配算法,这部分我们将在后文更详细地阐述。市场参与者可以下达新的订单,取消现有订单,或者修改价格和股票或合约数量等订单属性。针对市场参与者发出的每一个订单,交易所都会生成公开的市场数据。利用交易所公开的市场数据,市场参与者可以准确地了解交易所的订单簿是什么样的(取决于交易所选择隐藏哪些信息,但我们暂时忽略这种细微差别)。
1.3.2 交换匹配算法
当收到的出价等于或高于最佳(最低价)的要价订单时,就会发生匹配。反之,当收到的要价等于或低于最佳(最高价)的要价订单时,则发生匹配。输入的进取订单将继续与账本中现有的被动订单进行匹配,直到满足这两个条件之一。要么是新的激进订单完全匹配,要么是剩余订单的价格比传入订单的价格更差,因此,匹配不能发生。这是因为一个基本规则,即订单的价格不能以低于其入市时的限价进行匹配。现在,就同一价位的订单而言,匹配的顺序是由交易采用什么匹配算法规则决定的。
1.先进先出匹配
前面简单介绍了先进先出算法,我们通过表1-1的例子来展开。假设当交易所竞价单A、B、C在该时间顺序以10.00美元(1美元合人民币6.8元左右)的价格输入时,订单簿的状态如下。那么,在同样的价格下,订单A的优先级高于订单B,订单B的优先级高于订单C,竞价订单D价格低至9.00美元。同样,在要价方面,订单X是以11.00美元的价格进入的,先于订单Y(价格也是11.00美元)。因此,订单X比订单Y有更高的优先权,然后问询订单Z是以更差的价格12.00美元进入的。
表1-1

假设在先进先出模式下,4股以10.00美元的价格的入场卖单K将与1股的订单A、2股的订单B、1股的订单C依次匹配。匹配结束后,订单C仍有剩余的2股,价格为10.00美元,将拥有最高优先权。
2.按比例匹配
按比例匹配有各种不同的方式,通常实现方式也略有不同。在本书的范围内,我们提供了这种匹配算法背后的一些知识,并提供了一个假设的匹配方案。
按比例匹配的基本模式是,在相同的价格下,倾向于大单而不是小单,并且忽略订单的输入时间。这使市场的微观结构发生了相当大的变化,市场参与者倾向于输入较大的订单以获得优先权,而不是尽可能快地输入订单。
考虑一个如之前所示的市场状态。在表1-2这个例子中,假设的订单数量被提高了100倍。这里,买单A、B和C的价格也相同,均为10.00美元。然而,当一个数量为100的卖出订单以10.00美元的价格进入时,订单C得到了70份合约的成交量,订单B得到了20份合约的成交量,订单A得到了10份合约的成交量,这与它们在该级别的大小成正比。这是个过于简化的例子,不包括与部分匹配大小有关的复杂情况,也不包括相同大小的订单之间的打破平局相关的复杂性,等等。同样地,有些交易的所有者会按比例和先进先出的方式进行混合,一部分进场的激进订单使用按比例匹配,一部分按先进先出的顺序匹配。但这应该可以作为一个很好的例子来让我们对按比例匹配与先进先出匹配的不同进行基本理解。对按比例匹配及其影响的详细研究超出了本书的范围,这里不再详述。
表1-2

1.3.3 限价订单簿
限价订单簿与交换订单簿在本质上非常相似。不同的是,限价订单簿是由市场参与者根据交易所公开的市场数据而建立的,以响应市场参与者向其发送订单。限价订单簿是所有算法交易中的核心概念之一,也是所有其他交易形式中经常出现的概念。其目的是以一种有意义的方式收集和安排出价和报价,以深入了解在任何特定时间在场的市场参与者,并深入了解均衡价格是多少。我们将在第2章深入研究技术分析时重新讨论这些问题。根据交易所决定通过公开市场数据向所有市场参与者提供的信息,市场参与者建立的限价订单簿可能与交易所匹配引擎的订单簿略有不同。
1.3.4 交换市场数据协议
由于交换市场数据协议不是本书的重点,因此对这一主题的严格处理超出了本书的范围。市场数据协议是从交易所到所有市场参与者的外发通信流,这些通信流都有完善的文档,可供新的市场参与者建立他们的应用程序来订阅、接收、解码、检查错误和网络损失。这些协议的设计考虑到了延迟、吞吐量、容错、冗余和许多其他要求。
1.3.5 市场数据提供处理程序
市场数据提供处理程序是市场参与者为与具体的交易所市场数据协议接口建立的软件。这些软件能够订阅、接收、解码、检查错误和网络损失,并在设计时考虑到了延迟、吞吐量、容错、冗余和许多其他要求。
1.3.6 订单类型
大多数交易所支持从市场参与者那里接受各种订单,我们将在本小节讨论几种常见的类型。
1.IOC订单(立即或取消)
这些订单永远不会被添加到账本中。它们要么与现有的恢复订单进行匹配,以IOC订单量为上限,要么取消其余的输入订单。如果在IOC订单的价格上没有可以与之匹配的剩余订单,那么IOC订单将被全部取消。IOC订单的好处是不会停留在账本的匹配中,也不会在交易算法中造成订单管理的额外复杂性。
2.GTD订单(Good Till Day)
这些订单会被添加到账本中。如果它们与账本中现有的休眠订单完全匹配,那么它们就不会被添加,否则订单上的剩余数量(如果没有部分匹配,可以是整个原始数量)就会被添加到账本中,并作为休眠订单,让进场的订单可以与之匹配。GTD订单的好处是可以利用FIFO匹配算法,比刚出现在账本上的订单有更好的优先级,但在交易算法中需要更复杂的订单管理。
3.止损单
止损单是指在市场上以某一特定价格(称为止损价)成交之前不出现在账面上的订单,在成交后,它们将变成预先指定价格的常规GTD订单。这些订单作为退出单是很好的选择(无论是清算亏损的头寸还是实现赢利的头寸的利润)。在后文解释了什么是有亏损或赢利的头寸以及什么是退出头寸之后,将重新审视这些订单。
1.3.7 交换订单输入协议
交换订单输入协议是指市场参与者的应用程序如何发送订单请求(新建、取消、修改)以及交易所如何回复这些请求。
1.3.8 订单输入网关
订单输入网关是市场参与者的客户端应用程序,通过订单输入协议与交易所匹配引擎进行通信。这些应用程序必须以可靠的方式处理订单流,向交易所发送订单,修改和取消这些订单,并在这些订单被接受、取消、执行等情况下获得通知。通常情况下,市场参与者会运行订单输入网关的变体,这些变体只接收订单执行的通知,以检查与主要订单输入网关订单流的一致性,被称为drop-copy网关。
1.3.9 头寸和损益管理
被执行的订单会使市场参与者以执行的金额和执行的价格在被执行的工具上拥有头寸(限价订单可以比输入的价格更好,但不会更差)。买方执行的称为“有多头头寸”,而卖方执行的称为“有空头头寸”。当完全没有头寸时,称为“平仓”。当市场价格高于头寸价格时,持有多头头寸买方就会赚钱;当市场价格低于头寸价格时,买方就会亏损。反之,空头则是当市场价格低于头寸价格时,持有空头头寸的卖方就会赚钱;当市场价格高于头寸价格时,卖方就会亏损。因此,也就有了众所周知的低买高卖、高买更高卖等观点。
多次买入执行,或多次卖出执行不同的金额和价格,导致总的头寸价格是执行价格和数量的成交量的加权平均值。这被称为仓位的成交量加权平均价格(Volume Weighted Average Price,VWAP)。未平仓的头寸要标明市场价格,以了解该头寸的未实现损益(Profit and Loss,PnL)是多少。这意味着将当前的市场价格与头寸的价格进行比较,市场价格上涨的多头头寸被认为是未实现利润,反之则被认为是未实现亏损。类似的术语也适用于空头头寸。当未平仓的头寸被平仓时,就实现了损益,也就是说你卖出平仓多头头寸,买入平仓空头头寸。在这一点上,PnL被赋予了术语实现PnL。任何时候的总PnL是迄今为止已实现的PnL和未平仓头寸的未实现PnL的总和(按市场价格)。