《开发高频交易系统》第一部分(译文)

论坛 期权论坛 股票     
期权匿名问答   2023-2-5 11:24   3311   0
第一部分:交易策略,交易系统和交易所。
    在本部分介绍结束时,您将快速了解高频交易 (HFT) 的历史。您将了解市场参与者、高频交易的基本要求(低延迟连接和基础设施)、高频交易与非高频交易的交易时间范围,以及持有期/头寸管理(高频交易与超高频交易)。我们还将讨论高频交易的场所。本书与交易或高频交易业务无关;它是关于如何使用Java、C++和Python具体实现一个HFT系统。您将了解交易系统的工作原理以及您可以运行哪些交易策略。
本部分包括以下章节:

  • 第 1 章,高频交易系统的基础知识
  • 第 2 章,交易系统的关键组件
  • 第 3 章,了解交易交流动态
第 1 章 高频交易系统的基础知识

    欢迎开发高频交易系统!
    高频交易 (HFT) 是一种自动交易形式。在过去的二十年里,高频交易在媒体和社会上获得了认可。迈克尔·刘易斯 (Michael Lewis) 于 2014 年撰写的一本名为《闪光男孩:华尔街起义》(Flash Boys: A Wall Street Revolt) 的书连续三周位居纽约时报畅销书排行榜榜首。它涉及对高频交易行业及其对交易世界的影响的调查。学者、金融界和非金融界都对这种交易形式着迷。与此同时,这个新的交易时代在赋予机器越来越多的控制权的同时,也制造了很多恐惧。
    本书的目标是从技术角度回顾什么是高频交易以及如何构建这样的系统。HFT 是一个多学科问题,涉及计算机体系结构、操作系统、网络和编程的透彻知识。读完本书,您将了解如何使用最先进的技术选择来优化速度和可扩展性,从而从头开始构建交易系统。  我们选择将本书分为三个主要部分。
    在第一部分中,我们将介绍高频交易策略的运作方式以及高频交易可能带来的交易类型。然后我们将回顾高频交易系统的功能。我们将通过对交易机构如何运作的描述来结束这一部分。
    在本书的第二部分,我们将解释操作系统和硬件的理论以及优化交易系统所需的知识,同时考虑到硬件和操作系统的特性。
    最后一部分将详细解释如何使用C++、Java、Python和FPGA创建一个HFT系统。我们还将把这些知识扩展到加密交易,我们将回顾如何在云端构建交易系统。在本章中,我们将讨论我们是如何进入高频交易的。我们将回顾什么样的交易策略适用于高频交易。我们将详细解释高频交易与常规交易的不同之处。
    在本章中,我们将讨论我们是如何进入高频交易的。我们将回顾什么样的交易策略适用于高频交易。我们将详细解释高频交易与常规交易的不同之处。
    我们在本章中的目标是涵盖以下主题:

  • HFT的历史
  • 什么是HFT
  • 参与者是谁
  • 哪些交易策略适用于高频交易
HTF的历史

    让我们讨论一下 1930 年之前交易所和金融市场的历史。
    当我们谈论高频交易时,很难给出它开始的确切日期。我们需要回到起源于人类接触的贸易原始时代。在现代现金发明之前,古代人在礼品经济中严重依赖交易来相互交易产品和服务。根据彼得·沃森的说法,长途贸易可以追溯到将近 15 万年前。年复一年,人多了,货多了,钱多了,贸易成为人类的主要活动之一。很明显,赚钱意味着更多的业务。很明显,赚钱意味着更多的业务。其中一个参数是速度。如果你进行更多的交易,你就会赚更多的钱。许多故事都描述了交易员的野心,他们希望获得更好的交通等技术以更快地进行交易,或者更快地获取新闻以利用无法使用这些新技术手段的其他人。
    没等多久,我们就看到了涉及那些比其他人具有技术优势的人的不公平贸易案例。1790 年,佐治亚州的一位代表向美国众议院发表讲话,揭露了高速交易者。事实上,国会正在辩论财政部长亚历山大·汉密尔顿的提议,即美国政府吸收各州在革命期间累积的历史债务(1790 年拨款法案)。得知这一决定的商人立即购买或租用快艇。他们的目标是领先于信使并购买旧债,因为该法案的通过将增加市场价值。在二十世纪,出现了快速交易或高频交易的概念。
后 1930 年代
    交易是用物品交换其他物品。它可以是金融产品、服务、现金、数字资产等等。交易的目标之一是从这些交易中获利。交易的数量将与资产交换产生的货币数量相关。当我们设法增加交易数量与时间之间的比率时,我们可以随着时间的推移增加盈利能力。因此,能够增加交易数量是至关重要的。交易者很快明白,他们需要缩短交易时间,并开始在一些特定的地方聚集。他们过去常常在这些地点下订单,我们今天称之为交易机构(或交易大厅)。参与扩展极速自动交易的重大事件:

  • 1969 年:Instinet 是最早的自动化系统基础设施之一。它加快了高速交易的附着力。
  • 1971 年全国证券交易商自动报价协会 (NASDAQ) 于 1971 年创建,提供电子交易服务。这是世界上第一个电子股票市场。最初,它仅用于发送报价。
  • 1996 年:Island ECN 是美国股票交易的开创性电子通信网络,而 Archipelago 通过创建 Archipelago Exchange (ArcaEx) 促进了美国交易机构的电子交易。
  • 2000 年代:10% 的交易是高频交易。
    2000 年代初期,金融部门聚集了越来越多的技术人员。通过吸收这种技术,该行业开始急剧发展。自动化、吞吐量、性能和延迟成为贸易公司熟知的词。高频交易量达到市场的10%以上。到 2009 年,2% 的贸易公司占股权总量的 75%。如今,只有少数几家公司留在高频交易中,例如 Virtu、Jump、Citadel、IMC 和 Tower。
现代
    20 世纪 30 年代后的时代专注于股票市场(以及商品市场)的透明度和监管。现代时代突出了电子交易并提高了透明度。2000年,美国证券交易委员会(SEC)提出了中央限价订单簿(CLOB)。CLOB 是一个在参与者之间匹配订单的透明系统。更多交易所(如 Island 和 Arca)来到这个交易场景(CLOB)。交易公司、对冲基金和电子玩家的数量不断增加。他们创建了自己的技术堆栈以更快地进行交易并保持竞争力。10年后,只有少数贸易公司能够保持竞争力,成为占所有股权总量75%的贸易公司中的2%。
    在高频交易中竞争的技巧需要大量投资:金钱、人力和时间。这是低级系统专业知识和宽客以及精明资金(投资者越来越精通技术)的结合。能够为设计超低延迟系统创建高性能代码的工程师非常昂贵。只有少数工程师具备这些技能。这种系统的性能需要专门的硬件。路由器、服务器和网络设备也很昂贵。因此,经验和进入壁垒将阻止很多新进入者并限制竞争。除了我们之前谈到的五家公司之外,还有一些精品店使用他们在市场结构中发现的优势或其他公司没有利用的一些技术事实来交易高频交易策略。大型高频交易公司是负责转移大部分股权的公司。如今,高频交易估计至少占美国股票(股票)交易量的50%。自高峰年(2009 年)以来,高频交易的市场份额和盈利能力都在下降。
    2015 年之后,数字货币的增长为高频交易者带来了新的机会。今天,我们可以看到与 Coinbase、Binance 和其他数百家加密交易所等知名加密交易所合作的高频交易策略的广泛增长。
   现代已经永久锚定了技术和自动化交易。交易模型是数据驱动和模型驱动的。市场数据业务无疑成为交易的主要部分。交易所和交易公司开始通过生成或收集市场数据来赚钱,这是任何算法交易者的原材料。
为什么有高频交易?

    HFT的目的是在每秒内进行更多的交易。这样,公司可以更快地对不断变化的市场做出反应。与没有这种速度相比,他们可以利用更多的机会。此外,大型机构通过向市场提供大量流动性来获得微小但相当大的优势,从而从高频交易中获益。他们下了数百万个他们的系统能够下的订单。他们帮助市场,因此能够提高盈利交易的收益并获得更好的价差。由于回报很低,他们必须完成很多交易才能获利。除了这笔收入之外,他们还将获得交易场所提供的回扣或折扣交易费,以使其市场对高频交易公司更具吸引力。
什么使得HFT与传统交易不一样?

    高频交易应该具有最短的可行数据延迟(时间延迟)和尽可能高的自动化水平。高频交易涉及算法交易和自动交易。因此,参与者选择在其交易平台具有高度自动化和集成度的市场进行交易。公司利用用精确算法编程的计算机来寻找交易机会并在算法交易中执行订单。为了提高交易速度,高频交易者使用自动交易和快速连接(以及取消或修改)。这是可能的,因为贸易公司拥有适当的技术,也因为交换技术。以下交易所在高频交易技术上投入了数亿美元:

  • 纽约市纳斯达克(NASDAQ)是世界上第一家电子证券交易所。它的所有股票都通过计算机网络进行交易。它在 1971 年彻底改变了金融市场,取消了对实体交易大厅和面对面交易的要求。按市值计算,它是全球第二大证券交易所。纳斯达克综合产品的一半由科技公司组成。消费行业在整体组合中所占比例不到 20%,位居第二,其次是医疗保健。
  • 纽约证券交易所 (NYSE),纽约市,是世界上最大的股票市场交易所。2013 年,洲际交易所 (ICE) 收购了纽约证券交易所。
  • 伦敦证券交易所 (LSE),位于英国伦敦,是欧洲最大的证券交易所,也是英国主要的证券交易所,主要从事公司股票和债券的交易。它创建于大约 300 年前。
  • 东京证券交易所 (TSE) 是日本最大的证券交易所,总部位于东京。它创建于1878。该交易所拥有 3,500 多家上市公司。东京证交所由日本交易所集团运营,是世界上最大和最知名的日本公司的所在地,包括丰田、本田和三菱。
  • 芝加哥商品市场 (CME),有时也称为芝加哥商品交易所,是位于伊利诺伊州芝加哥的受监管期货和期权交易所。农业、能源、股票指数、外汇、利率、金属、房地产和天气是 CME 交易期货的行业,在大多数情况下还交易期权。
  • Direct Edge,泽西城。它的市场份额在美国股市迅速上升至第十位,通常每天交易超过 20 亿股。Better Alternative Trading System (BATS) Global Markets 是一家总部位于美国的交易所,交易各种资产,包括股票、期权和外汇。它于 2005 年创建,CBOE Holdings 于 2017 年将其收购。BATS Global Market 在被收购之前是美国最大的交易所之一,以其为经纪自营商、散户和机构投资者提供的服务而闻名。
  • CBOE 期权交易所成立于 1973 年,是全球最大的期权交易所,合约以个股、指数和利率为中心。
    上述所有交换都在几个层面上进行控制:

  • 交易限制
  • 交易系统透明度(市场参与者之间共享的关于架构特性的信息,以及处理订单的方式)
  • 接受的金融工具的类型
  • 证券发行人的限制
    对于大多数受监管的交易所,订单大小是一个问题。大宗交易对市场有重要影响(它们可以产生市场影响)。交易者使用替代交易系统 (ATS),与传统交易所相比,其监管要少得多(它们不必透明)。暗池是最常见的 ATS 类型。美国目前有大约 30 个暗池,占美国综合交易量的四分之一。
    暗池对高频交易是有利的,因为他们可以在降低费用的同时处理自动化需求的速度和水平。任何其他类型的交易都不是这种情况,这使得高频交易不同于常规交易。在下一节中,让我们进一步了解暗池。
暗池的影响
为了资金安全,买卖订单不显示在暗池(价格和数量)中。换句话说,由于不公布订单簿,暗池既不透明又匿名。因为在这种类型的交易机构中无法看到订单的大小,所以下大订单的投资者不会影响市场。由于其他参与者看不到订单的大小,因此暗池以固定价格执行这些大订单。它减少了交易机构给出的负滑点。
    暗池有义务在交易发生后通知交易,尽管交易前缺乏透明度。
    高频交易和暗池有着复杂的相互作用。暗池越来越受欢迎,部分原因是投资者寻求保护免受高频交易在公共交易所的欺诈活动的影响,而高频交易发现无法通过 ping 了解暗池中的大订单。暗池导致市场缺乏透明度,使得装备不良的参与者(即卖方)能够跟上与当时技术水平不匹配的商业实践。当然,Haim Bodek 写了两本书(《高频交易问题》和《市场结构危机》),内容是关于在暗池中寻找非常规订单类型。
    另一方面,一些暗池鼓励高频交易者在他们的交易所进行交易。高频交易策略增加了流动性和订单完成的可能性。暗池可帮助高频交易商满足其速度和自动化需求,同时还能降低开支。高频交易是造成暗池订单规模减少的原因。暗池受到定位隐藏大订单的 ping 交易策略的打击。
    因此,如果存在这些高频交易策略,暗池的优势可能会受到损害。例如,2014 年,纽约总检察长就其暗池操作对巴克莱银行提起诉讼,指控其歪曲了巴克莱银行在暗池中的活动量。2016 年,巴克莱银行向美国证券交易委员会支付了 3500 万美元的罚款,并向纽约州支付了 7000 万美元的罚款。
    暗池可以应用某些约束来防止高频交易进行掠夺行为。目标是减少 ping 交易策略。2017 年,Petrescu 和 Wedow 规定了最小订单量以尽量减少此类策略。
    我们可以花更多时间讨论高频交易对暗池影响的利弊,但我们最终会说,流动性更高和执行速度更快的优势足以让一些暗池支持高频交易。只要投资者对交易场所的运作方式有透彻的了解,从而做出有根据的判断,这对投资者来说就是公平的。
    我们已经谈到了主要交易场所的位置。现在我们将在下一节介绍高频交易参与者。
谁做高频交易?
答案可以用一个词来概括:每个人。从买方到卖方,ECN,甚至交易商间和经纪交易商间市场,都使用高频交易。高频交易以自营交易业务为主,涵盖范围广泛,包括股票、衍生品、指数基金、交易所交易基金(ETF)、货币和固定收益工具。自营交易业务占当前高频交易者的一半,多服务经纪交易商自营交易柜台占不到一半,对冲基金占其余部分。KCG Holdings(由 Getco 和 Knight Capital 合并创建)等自营交易公司和主要银行的交易柜台是该领域的主要参与者。有一些新型场所(例如 Dealerweb 的 OTR Exchange 和 IEX)正在寻求提供场所,让卖方的交易商可以安全地执行交易,而高频交易商正在提供流动性。
    值得一提的是,高频交易已经成为市场的主要参与者。他们也在捕捉零售流量。 Citadel 控制着很大一部分零售流量。
开始高频交易需要什么?
    高频交易的参与者必须具备以下条件:

  • 快速计算机:HFT 在大多数情况下侧重于单核吞吐量,并且策略不一定使用并行性。
  • 交换邻近度:虽然一些国家/地区限制使用共享场所来拥有交易系统和交易所,但在美国,我们使用托管。这是所有 HFT 参与者都有其生产服务器的地方。他们会花钱让自己的计算机与交易所的计算机服务器位于同一数据中心,以减少延迟并缩短完成交易所需的时间——甚至是几微秒。连接所有市场参与者的交易系统与服务器的电缆长度相同,以确保没有人比其他市场参与者有优势。SEC 已就托管费用以及影响股票市场结构的其他问题发出了广泛的反馈请求。为确保市场参与者之间的公平,托管费用的合理定价非常重要。SEC 邀请主机托管报告他们的费用。
  • 低延迟:在高频交易中,延迟是指数据到达交易者计算机、交易者响应数据下订单以及交易所接受订单所需的时间。该订单可能会在最有利可图的时间与其他交易者发出的许多其他订单一起进入市场。在这种情况下,存在与大量其他人竞争的危险。订单可能不会像在这种情况下那样有利可图。由于标榜为低延迟或超低延迟的技术,高频交易者能够以极快的速度下订单。使用旨在减少将数据从一个地方转移到另一个地方的延迟的设备非常重要。
  • 处于 AT 和 HFT 核心的计算机算法,以及可能损害收益的实时数据馈送。
    在前面的部分中,我们了解了高频交易者在哪里做生意。我们还讨论了加快交易的技术先决条件。现在让我们关注一下高频交易的深度。
什么是高频交易策略?
    高频交易策略是算法交易策略的一个子集。它们以微秒(有时是纳秒)的顺序执行。这些策略必须意识到这个时间限制才能成为有效的高频交易策略。他们部署尖端技术进步,以比竞争对手更快地获取信息。此类策略的主要游戏是即时报价,即发送响应传入市场数据订单的响应时间。正如我们将在下一章中解释的那样,在尖端机器上托管交易策略很重要,而且它们还必须在同一地点运行。
    在讨论 HFT 策略时,我们将定义应用领域和一些词汇。
资产类别
    高频交易策略可应用于任何资产类别,例如股票、期货、债券、期权和外汇。我们也有使用高频交易策略交易的加密货币,即使速度的定义不同(因为结算时间)。
流动性
    玩家对某种资产进行交互的愿望被称为流动性。
    我们将深度定义为给定资产的价格水平值。当给定资产有很多级别(层)时,我们会说账簿很深。如果每层的体积很大,我们将把一本书定义为big账簿或broad账簿。如果一本书很深或很大,我们将用给定资产流动性来定义流动性。该声明的结果是,交易者可以更轻松地随时购买或出售该资产。因此,交易者需要具有大量流动性的交易机构。加密交易机构目前很难找到流动性。
逐点数据和数据分布
    HFT 每微秒产生一次订单。由于参与者众多,因此很可能拥有海量数据。当我们研究高频交易数据以创建交易策略模型时,存储这些数据将是关键。
    在构成高频数据的流动市场上,每个交易日都会产生数千个报价单(证券价格从一个订单到另一个订单的变化)。这种材料因其性质而在时间上随机分布。HFT 数据呈现肥尾分布。这意味着交易策略需要考虑到我们可能会遭受巨大损失。
    市场数据的分布可分为两类:

  • 波动率聚类:无论是在符号还是数字方面,大的变化都伴随着大的变化,而小的变化伴随着小的变化。
  • 远程依赖(长记忆)是指两个站点之间的统计依赖性随着它们之间的时间间隔或空间距离的增加而衰减的速度。
流动资金回扣
    为了支持股票流动性的提供,大多数交易所都使用了maker-taker模型。在这种安排下,下限价订单的投资者和交易员通常会在执行订单时从交易所获得适度的回扣,因为他们被认为对股票流动性或庄家做出了贡献。
    另一方面,那些下市价订单的人被视为流动性的takers,并被交易所收取少量费用。虽然回扣通常是每股几分之一美分,但在高频交易员每天交易的数百万股股票中,它们加起来可能会很大。许多高频交易业务使用旨在利用尽可能多的流动性回扣的交易技术。
匹配引擎
    构成交易所交易系统核心并持续匹配买卖订单的软件程序,传统上由交易大厅专业人员提供的服务,称为匹配引擎,对于保证交易所的高效运作至关重要,因为它匹配所有股票的买家和卖家。匹配引擎安装在交易所的计算机上,这是高频交易企业力求尽可能靠近交易所服务器的主要原因。我们将在第 3 章了解交易交换动态中了解它。
做市商
在详细介绍什么是做市商之前,我们需要解释市场接受者和市场制造者之间的区别。
市场接受者/制造者
图 1.1 表示交易所的限价订单簿。当交易策略在接近账簿顶部(代表买入和卖出的最佳价格的层)下订单时,我们称此订单为激进订单。这意味着这个订单很可能与另一个订单匹配。如果订单被执行,则意味着流动性已从市场中移除;它是市场接受者。我们会说,当交易者以账簿顶部的要价下达买单时,他们就跨越了价差。如果订单不那么激进(或被动),则该订单不会从市场中移除流动性;它是市场制造者



图 1.1 – 订单簿 – 被动/激进订单

    让我们看看做市策略。
做市策略
    贸易公司可以在交易所提供做市服务。随着时间的推移,做市商协助买卖双方进行匹配。做市商不是根据标的资产买卖证券,而是维持买卖证券的持续报价,并从价差中获利,这是两种报价之间的差异。
    为了降低长期持有股票的风险,每次购买都应与销售相匹配,每次卖出都应与买入相匹配。如果一只股票的交易价格为 100 美元,做市商可以将买入报价保持在 99.50 美元,将卖出报价保持在 100.50 美元。如果他们成功找到买家和卖家,即使没有其他人想购买,也可以让那些想立即出售的人这样做,反之亦然。
    换句话说,做市商提供流动性——他们让交易变得更简单。对于交易量最大的股票,这种技术并不重要;然而,对于较小的公司(比大公司交易少),增加交易量以促进交易可能是至关重要的。做市是许多高频交易企业使用的一种方法。他们通过快速更改报价并进一步降低价差来击败其他人:他们愿意每次赚更少的钱,因为他们的做市业务可以很容易地增长到大量。然而,高频交易公司的技术可以用于其他目的,例如套利(从相关证券之间的微小差异中获利)或执行(分解大型机构的交易以最小化市场影响)。我不会详细介绍,因为关键的一点是高频交易不仅能够做市。唯一重要的是速度。
    可以通过分析订单流来做市:

  • 大量的买卖可以在动量的基础上带动买卖的市场价格。
  • 液体流量(买入和卖出订单有多大:小、中或大)。
  • 势头耗尽(当订单流枯竭时,可能预示着价格反转)。
    做市是高频交易者使用最广泛的交易策略。我们将在下一节讨论其他高频交易策略。
倒票
    倒票是一种交易方法,专注于从微小的价格变动中获利并转售以获取快速利润。倒票是日间交易中使用的一个短语,用于描述一种专注于从微薄利润中产生大量交易的技术。倒票需要严格的退出计划,因为一次重大损失可能会抹去交易者辛辛苦苦获得的所有微薄收益。要使此技术发挥作用,您需要必要的工具,例如实时信息、直接访问经纪人以及进行大量交易的耐力。
    倒票背后的概念是,大多数股票将完成趋势的第一阶段。但还不清楚股票接下来会如何发展。一些股票在早期阶段后停止上涨,而另一些则继续上涨。目标是从尽可能多的小额交易中获益。另一方面,让你获取收益的心态旨在通过扩大获胜交易的规模来最大化良好的交易结果。通过增加赢家的数量,同时牺牲收益的大小,这种技术取得了成果。对于一个长期交易者来说,赚取丰厚的利润却只赢了 50% 甚至更少的交易是非常罕见的——不同之处在于赢利远大于亏损。
统计套利
    有效市场假说 (EMH) 声称金融市场是信息有效的,这意味着交易资产的价格是准确的,并且在任何时候都代表所有已知信息。基于这个假设,如果没有任何基本面消息,市场应该不会波动。然而,事实并非如此,我们可以用流动性来解释。
    这一整天,许多大型机构交易与信息无关,而与流动性有关。认为自己过度暴露的投资者会积极对冲或卖出头寸,从而影响价格。流动性寻求者经常准备支付溢价以退出其头寸,从而为流动性提供者带来利润。尽管这种从知识中获益的能力似乎违反有效市场理论,但统计套利是基于它的。
    统计套利试图通过根据统计模型给出的资产预期价值从感知到的资产错误定价中获利,从而从价格和流动性的相关性中获利。
    在不同场所出售的同一证券的短期价格差异,或相关证券的短期价格差异,用于统计套利,通常称为stat arb。统计套利基于证券市场价格差异存在但很快消失的假设。由于出现价格差异的时间段可能短至几分之一秒,因此算法交易非常适合统计套利。
    例如,当在多个场所交易相同的证券时,算法会跟踪证券交易的所有地点。当出现价格差异时,算法会在较低的市场买入并在较高的市场卖出,从而获利。由于这种差异的机会窗口很小(小于 1 毫秒),算法交易非常适合这种交易形式。
    投资挂钩证券时,统计套利变得更具挑战性。一个指数和该指数中的一只股票,或同一行业的一只股票和其他股票,都是相关证券的例子。在关联证券中,统计套利方法需要收集大量历史数据并估计两个市场之间的通常联系。只要与标准有差异,算法就会进行买入或卖出。
延迟套利
现代股票市场非常复杂,需要高度技术化的系统来管理海量数据。由于其复杂性,数据总是以不同的速度处理。延迟套利利用了市场参与者的不同速度。延迟套利旨在通过利用高速光纤、卓越的带宽、位于同一位置的服务器和来自交易所的直接价格馈送等,利用高频交易者更快的速度,使交易领先于其他市场参与者。
    延迟套利背后的假设是,在美国,确定所有美国证券交易所的全国最佳买卖价 (NBBO) 的集合反馈比高频交易者可用的来自证券交易所的直接数据反馈要慢。HFT 程序的算法可以比许多其他市场参与者更快地读取交易数据,比证券信息处理器 (SIP) 反馈提前几分之一秒看到价格,SIP是综合的美国证券交易所价格反馈,这要归功于其卓越的速度。这实质上是在 HFT 软件到达官方市场(SIP 反馈)之前向其提供信息,从而使高频交易者能够观察价格领先于其他市场参与者的位置。
新闻影响
信息是所有交易的核心,用于做出财务决策。算法交易系统利用新闻数据来生成交易选择被称为信息驱动策略
    已经开发出算法来阅读和分析来自主要新闻机构和社交媒体的新闻报道。任何有可能改变市场价格的消息都会导致算法执行购买或出售。
    高频交易员已经习惯于使用信息驱动的方法,以至于某些新闻机构现在以一种便于计算机分析的方式包装他们的新闻稿。例如,他们使用预先确定的关键字来描述有利或不利的事件,以便算法可以对新闻稿中的关键字采取行动。在计划发布之前,新闻提供商还会将新闻报道放在重要地理区域(例如主要金融中心)的服务器上。这减少了数据从一个位置移动到另一个位置所需的时间。对于此类服务,新闻服务提供商会收取额外费用。
    正如美联社 Twitter feed 遭到黑客攻击所见,社交媒体在信息驱动计划中的使用正在增长。 2013 年,一名黑客在推特上说,白宫发生炸弹爆炸,总统受伤,算法分析来自可靠来源的坏消息并开始在市场上抛售,导致全球股市瞬间暴跌。
    接下来,让我们了解一下动量点火交易技巧。
动量点火
如果您发送到市场的订单可能导致价格变化并且您知道它会发生,那么您就有机会进行金融交易。动量点火交易技术的目标就是实现这一点。目的是让其他算法和交易者开始交易股票,从而引起价格变化。从本质上讲,动量点火方法试图欺骗其他市场参与者,让他们相信价格将发生大幅波动,从而导致他们进行交易。结果,价格变动成为一种自我实现的预言:交易者相信价格变动将会发生,而他们的活动导致价格变动发生。
    将大量订单发送到订单簿然后取消它们是一种动量点火方法。这会造成股票交易量发生巨大变化的错觉,这可能会促使其他交易者下单,从而导致短期价格趋势的开始。在试图点燃市场运动之前,动量点燃方法包括执行真正的目标交易头寸。这意味着最初完成的交易不会对市场产生重大影响。这允许交易者使用动量点火方法在价格变动开始之前进入市场。交易完成后,通过提交一连串订单并取消订单来点燃势头,希望其他交易者效仿并改变价格。
    当价格开始变动时,使用动量点火技术的交易者紧接着在获利时将他们的初始头寸退出。
    动量点火方法需要使用特定的订单类型,交易者可能只能使用能够在短时间内发送和取消大量订单的算法来执行它们。
回扣策略
市价单交易者必须向交易所支付费用,而限价单交易者在增加流动性时会获得回扣。因此,交易员,尤其是那些从事高频交易的交易员,会提交限价订单来建立市场,这反过来又会在交易所产生流动性。由于定价方案对限价订单的风险较低,这无疑对下大量限价订单的交易者具有吸引力。
    还有一种称为trader-maker定价的收费结构,与做market-taker定价截然相反。在某些市场中,它需要向市场订单交易者提供回扣并向限价订单交易者收取费用。
Pinging
    Pinging 是一种通过放置小的可交易订单(通常为 100 股)来了解交易机构和暗池中的大订单的策略。
    为了减少大订单的市场效应,买方业务利用这种交易技术将大订单拆分为许多小订单。该算法将这些订单缓慢地送入交易所。为了检测这种大订单的存在,高频交易公司为每只上市股票安排了 100 股手的买卖价。
    这些 ping 交易将提醒 HFT 参与者注意买方下达的大订单的存在。高频交易商将使用这些信息来确保从买方那里获得无风险的利润。一些重要的市场参与者将 ping 比作诱饵,因为它的主要目的是吸引拥有大量订单的机构暴露他们的出手。
非法活动
    美国证券交易委员会(SEC)、联邦调查局 (FBI) 和其他监管机构近年来对涉嫌违反高频交易的行为发起了打击行动。以下部分是可能的违规行为示例:

  • 抢先交易(Front-runing)
    根据未公开发布的信息下订单称为抢先交易。美国证券交易委员会和金融业监管局 (FINRA) 已禁止这种技术。有些人使用抢先交易一词来描述一种技术,在这种技术中,高频交易公司利用算法交易技术来识别给定工具的大量新订单。在大量订单进入市场之前,我们下订单以从大量进货中获益。高频交易公司几乎可以在购买资产后通过将资产出售给原始投资者立即获利。即使这种交易方式是合法的,监管机构也会担心并且可能需要控制这种行为向前发展。

  • 欺骗(Spoofing)
    欺骗不是合法的交易策略。它包含一个发送不打算执行的订单的欺骗策略,只是为了让其他市场参与者对这些订单做出反应。他们可能会发送订单以达到这个价格水平。同时,初始订单被取消,欺骗者利用市场上剩余的其他订单。
    2010 年的多德-弗兰克华尔街改革和消费者保护法案专门针对这种做法,甚至在此之前,美国金融业监管局的规定就禁止以误导市场为目的的命令。立法者在 2014 年披露的第一起刑事欺诈案件涉及一名被指控伪造期货市场的芝加哥交易员。

  • 分层(Layering)
    分层与欺骗相同,不同之处在于订单被置于不同的价格水平,以给人一种对某种证券有很多兴趣的表象。此策略的结果与常规欺骗相同。由于技术的快速进步,大规模的市场操纵可能会在几分之一秒内发生。根据 FINRA 规则,分层与一般欺骗一样通常是非法的和被禁止的。
    即使这些策略现在已被取缔,我们也需要记住,一些交易所受到的监管较少或不受监管。我们将在第 11 章高频 FPGA 和加密货币中看到这些策略仍然有效的加密货币。
总结

    在本章中,我们回顾了高频交易的起源。我们了解了高频交易与常规交易相比的特别之处。我们还对任何 HFT 交易系统都能够支持的不同类型的策略进行了分层。我们谈到了交易系统的历史。我们在本章中的目标是让您很好地理解高频交易是什么以及我们可以使用哪些交易策略。
    在下一章中,我们将讨论交易系统的主要功能。我们将描述如何构建交易系统。
第2章 交易系统的关键组成部分

    在上一章中,我们学习了如何创建高频交易 (HFT) 策略。在本章中,我们将研究如何将这些策略转换为连接到交易所的实时软件,以实际应用您之前学到的理论。我们将描述能够交易资产的交易系统的功能。
    在本章中,我们将讨论以下主题:

  • 了解交易系统
  • 使交易系统与交易所交易
  • 订单簿管理
  • 决定何时交易的策略
    到本章结束时,您将能够设计交易系统,将交易系统连接到交易所,并构建限价订单簿。
了解交易系统

    为高频交易设计交易系统需要的不仅仅是编程和交易知识。本书的后续章节将深入介绍这些部分,这将使您在设计 HFT 系统时占据优势。在本节中,我们将讨论交易系统设计的基础知识。设计系统最关键的部分之一是对需求进行详细描述。交易系统的目标是支持您的交易想法。任何交易策略都从获取数据开始,并最终根据这些数据做出决策。交易系统将监督收集市场数据(即价格更新)并向交易所发送订单。此外,它将从交易所收集包含订单信息的回应。这些市场更新可能代表订单的任何状态:取消、拒绝、成交或部分成交。它还将计算衡量投资组合绩效的指标(例如损益、风险指标或有关交易系统不同流程的信息)。
    在决定是否创建此类软件时,我们需要牢记以下几点:

  • 资产类别:了解交易系统将采用哪种资产类别将改变该软件的数据结构。每个资产类别都是独一无二的,具有自己的一套特征。为美国股票构建交易系统与为外汇 (FX) 构建系统不同。美国的股票主要在纽约证券交易所 (NYSE) 和纳斯达克这两个交易所交易。这两个交易所大约有 7,000 家上市公司(代号)。 FX 包含六种主要货币对、六种次要货币对和六种奇异货币对,与股票相对。我们可以添加额外的货币对,但可用的货币对不会超过 100 个。与我们可以有两个主要交易所的美国股票市场不同,在外汇市场上,将有数百个交易所。符号的数量和交易所的数量将改变交易系统的架构。
  • 交易策略类型(高频、长线):软件架构会受到交易策略类型的影响。高频交易策略需要在很短的时间内传递订单。就美股而言,标准的交易系统将在微秒内决定发送订单。芝加哥商品交易所 (CME) 交易系统具有纳秒级的延迟。基于这一发现,技术将在软件设计过程中发挥重要作用。如果只考虑编程语言,Python 不太适合速度,我们宁愿选择 C++ 或 Java。如果我们希望建立长期头寸,例如持续多天的头寸,则交易者获得流动性的速度比其他人更快是无关紧要的。
  • 用户数量(或交易技术):随着交易者数量的增加,交易策略的多样性也随之增加。这表明订单数量将增加。在向交易所提交订单之前,我们必须确保我们即将发送的订单有效;同时我们必须确保没有达到某一金融工具(如股票、债券等)的总头寸。
    交易策略正在被交易领域中越来越多的规则所限制。我们将测试我们希望发送订单的合规性,以确保我们的交易策略符合规定。所有这些测试都会增加计算所需的时间。如果我们有很多订单,我们将不得不为一次投资依次进行所有的这些验证。如果程序不够快,订单将需要更长的时间来处理。您拥有的用户越多,交易系统的可扩展性就必须越大。
    这些变量会改变您对将要创建的交易系统的看法。让我们在下一节中讨论简单交易系统的设计。
交易系统架构
    以下架构表示交易系统架构。在此图的左侧,我们可以看到venues。Venues是一个更通用的术语,适用于任何匹配多方证券和/或衍生品买卖订单的平台。换句话说,venue可以是交易机构、ECN、聚合商或银行。交易系统与venues通信以收集所有参与者的价格更新并发送订单。为此,交易系统需要一款名为 Gateways 的软件,以确保交易系统与venues之间的通信。 Book Builder 将从Gateways收集的数据构建限价订单簿。最后,Strategy 会通过 Order Manager 将订单发送到场馆。Order Manager负责收集来自系统策略的所有订单,并跟踪订单的生命周期。所有这些组件都是向市场发送订单的关键路径的一部分。



图 2.1 —— 交易系统架构设计


    此外,我们观察到其他不太重要的服务,例如Command and Control,负责启动系统组件。Viewers在算法交易中至关重要,因为它们会为您提供系统所有组件的状态、订单和交易,以及您认为对监控交易策略很重要的指标。算法交易使交易自动化。因此,跟踪您的交易系统和交易策略的健康状况非常重要。在此特别重要的是要了解,在高频交易中,几微秒可能会导致巨大的损失。拥有能够有效报告警报的viewers和用户界面至关重要。
    在下一节中,我们将更深入地讨论交易系统的关键组成部分。
连接到交易机构的Gateways
Gateways是与交易所和交易系统通信的交易系统的组件。它们是必不可少的,因为它们在执行时间方面是占比最高的。按照设计,它们必须从网络获取数据并将该数据提供给系统的其余部分。该操作对系统资源和操作系统要求很高。价格更新由交易系统收集,然后交易系统代表您传输订单。为此,如果您没有交易系统进行交易,您必须先对交易将执行的所有程序进行编码。如果您想通过低买高卖来赚钱,您必须先决定您将交易什么产品。选择这些产品后,您应该可以从其他商家那里获得订单。
    其他交易者在确定大小、价格和数量后将告知您他们交易金融资产的意愿。一旦您收到了您希望交易产品的足够订单,您就可以选择与您协商交易的交易员。该商品的价格会影响您的选择。如果您打算在将来转售该商品,则需要以便宜的价格购买它。当您就价格达成一致时,可以告诉其他交易者您想以标价购买。交易完成后,您将拥有该产品。
数据收集
Gateways从您选择的交易场所(交易所、ECN 和暗池)收集价格更新。该组件(在下图中显示为Gateway)是交易系统中最重要的组件之一。该组件的工作是从交易所获取投资的账簿,并放到交易系统中。该组件将连接到网络,并能够通过交易所收发流与其通信。
    下图描述了交易系统Gates的位置。它们是交易系统的输入和输出:



图 2.2 – 负责收集价格更新和发送订单的Gateways。

    上图中描述了以下几点:

  • Venues代表交易员、交易所、ECN 和暗池。
  • 可以使用不同的协议来连接Venues(它们用箭头表示)。
  • 有线、无线网络、互联网、微波和光纤都是传输数据的选择。在速度、数据丢失和带宽方面,这些网络媒体中的每一个都有自己的一套特性。
  • Price Updates和Orders之间的箭头是双向的,因为我们可以对Venues收发数据。
  • 要开始接收价格更新,Gateway将与Venue建立网络连接、验证自身并订阅某个金融工具(我们将在下一节中解释这部分)。
  • 订单处理Gateway还接收和发送通信信息。下订单后,它会通过网络转发到Venue。
  • 如果Venue收到该订单的确认函,将发送该确认函。该订单遇到匹配订单后,将向交易系统发出确认消息。如果Venue没有收到订单,则不会发送确认。这将由交易系统宣布订单已超时。在这种情况下,交易者需要介入并检查系统中出现的问题。
使交易系统与交易所交易

    交易系统包含许多功能组件,负责交易和风险管理,以及监控一个或多个交易所的交易过程。交易策略一旦被编码就成为交易系统的一部分。作为输入,您需要价格数据,作为输出,需要您的订单。这将发出交易信号。我们需要Gateways来完成此流程,因为它们是最重要的组件。
    下图描述了交易系统的功能组件、Gateway的接口以及交易系统与外界的交互:



图 2.3 —— 一个交易系统的功能组件

    Gateways根据定价和市场反应收集和发送订单。它们的主要功能是建立链接并将从外界接收到的数据转换为交易系统所需的数据结构。
    上图中描述了以下几点:

  • 当您应用您的交易策略时,该交易计划将出现在您的机器上。交易将在不同的计算机上进行。
  • 因为这两设备在不同地区,它们必须通过网络连接。
  • 系统采用的通信方法可能会根据其位置而有所不同。
  • 如果交易系统并置(机器在同一设施中),将使用单线,这将最大限度地减少网络延迟。
  • 如果我们采用云解决方案,互联网可能是另一种通信方式。在这种情况下,通信将比直接连接慢得多。
    查看下图,其中显示了Gateways之间发生的通信:



图 2.4 —— 交易所和交易系统之间的通信

    从上图我们可以了解到以下几点:

  • 当我们更仔细地检查Gateways处理的通信时,我们可以看到Venues可能使用各种协议。
  • 要将协议转换为交易系统数据结构,Gateways需要能够处理各种协议。
   我们了解了交易系统如何连接到交易机构。我们现在将讨论如何进行通信以及我们使用哪种协议来接收市场更新和发送订单。
检查用于通信的 API
机器之间的通信规则由网络协议定义。它们指定如何在网络上识别这些设备以及它们将如何相互通信。互联网协议 (IP) 协议上的用户数据报协议 (UDP) 传输控制协议 (TCP) 用于贸易金融。此外,我们采用软件协议指定如何发送订单和获取价格更新。在软件层面,通信API会建立通信规则。通信 API 由您希望与之交易的实体提供。其文档包含您获取价格更新和下订单所需的所有信息。
    可以在 https://en.wikipedia.org/wiki/List_of_electronic_trading_protocols 找到交易 API 文档的示例。在我们进入交易 API 之前,让我们先了解一些网络基础知识。
网络基础
网络负责允许计算机相互连接。为了共享数据,网络需要一个物理层。网络要达到一定的速度、可靠性甚至安全性,选择合适的介质(通信层)是至关重要的。我们在贸易金融中使用以下术语:

  • 有线网:具有小带宽的电流。
  • 光纤:更多带宽。
  • 微波:它设置简单,带宽大,但容易受到风暴的影响。
    根据您选择的交易技术种类,媒体会发生变化。在开放系统互连 (OSI) 模型(在第 5 章“动态网络”中开发)中,选择适当的介质是OSI第一层的一部分。第一层叫物理层。在这一层之上还有六层共同描述了通信的类型。
    与大多数通信一样,金融也在使用 IP。这是 ISO 模型网络层的一部分。该 IP 建立了网络数据包路由规则。传输层是我们要讨论的最后一层。 TCP 和 UDP 是银行业中最著名的两个协议。这两种程序是截然相反的。 TCP 是一种允许两台机器相互通信的协议。最初发送的所有消息都将首先传递。 UDP 缺少确定网络数据包是否已被网络接收的方法。所有交换都将使用 TCP 或 UDP 作为它们的协议。
    在第 5 章“动态网络”中,我们将深入研究这些协议。下一节我们来学习订单簿管理。
订单簿管理

数据处理的主要目标是将限价订单从Venues复制到您的交易系统中。Book Builder将负责收集定价并根据您的策略对其进行分类,以便整合您获得的所有订单。
    定价变化由网关转换,然后传递给Book Builder,如下图所示。Book Builder将使用Gateways从Venues收到的订单,以及收集和分类任何价格变化:   



图 2.5 —— Book Builder从Gateway IN获取价格更新

    在下图中,我们使用给定金融产品的订单簿示例。订单簿将包含两部分,一部分用于出价,一部分用于报价。对于每个部分,我们将存储代表Venue、数量和价格的订单。每个Venue都会发送自己的订单簿。Book Builder的目标是创建一个订单,同时考虑来自每个Venue的三个订单。此图中表示的数据是人为的:



图 2.6 —— 交易系统在三个不同的Venue构建账簿

    下列如图所示:

  • 您可以看到这些订单中的每一行都有一个顺序。
  • 例如,地点 1 报价列表中的一位交易员准备以 1.21 美元的价格购买 1,000 股。另一方面,这是一份急于出售的人的列表。
  • 卖价(或卖价)几乎总是高于买价。事实上,如果你能以低于你能卖出的价格买入,那么获利就太简单了。
  • 这个Book Builder的工作是去收集gates已经收集的来自这三个地方的三份订单。Book Builder对这三份订单进行组织和排序。
    我们已经了解了交易系统如何获取价格更新和如何去创建一个限价订单簿。我们现在将要详细解释订单簿的不同功能。
订单簿注意事项
限价订单簿收集所有价格更新(订单)并以一种使交易策略的工作更容易的方式安排它们。交易所利用订单簿来跟踪出价和报价。交易时,我们从交易所收到订单簿,以便弄清楚资产价格的指示,哪些价格是最好的,或者只是为了了解市场。我们将不得不利用网络将更改传送到交易所订单簿,因为交易所在另一个平台/服务器上。我们有两种选择:

  • 第一种方式需要发送整个订单簿。发送整个订单簿非常耗时。事实上,如果我们有大型交易机构(例如纽约证券交易所或纳斯达克),一秒钟内会发送数百万个订单。如果交易所每次收到新订单,都发送整个订单簿,网络就会饱和,发送价格更新的时间会过长。
  • 第二种方式将发送这个订单簿的完整快照,如前所述。然后,交易所将发送增量更新。这个订单簿是交易系统的重要组成部分,因为它将为交易策略提供决定何时发送订单或不发送订单的信息。订单簿包含当前在交易所的出价和订单。当价格更新发送到我们的交易系统时,其他市场参与者会同时收到相同的更新。所有其他市场参与者也可以决定在此价格更新后运行。当交易所收到很多订单时(在第 3 章“了解交易机构动态”中有详细说明),最先收到的订单将首先执行。这就是为什么这个订单簿在延迟中起着很大的作用,并且必须优化这个订单簿的所有操作。
    对于订单的生命周期,我们需要处理以下操作:

  • 插入:插入是向订单簿添加新订单的订单簿条目。这应该是一个快速的操作。由于我们必须对收到的任何价格更新的出价和报价进行排序,因此我们为此操作选择的方法和数据结构至关重要。要插入新订单,我们需要使用复杂度为 O(1) 或 O(log n) 的数据结构。
  • 修订/修改将使用订单 ID 来查找订单簿中的订单。此操作应具有与插入相同的复杂度。
  • 取消:使用订单 ID,取消允许从订单簿中撤回订单。
    选择的数据结构和与之相关的方法对性能有重大影响。如果您要创建 HFT 系统,则需要做出适当的选择。我们在高频交易中实施的订单簿称为基于订单的订单簿。由于这是系统中的关键组件,因此考虑这个订单簿执行的复杂性非常重要。
    一个高效的订单簿建模数据结构必须确保以下几点:

  • 恒定查找,快速数量更新:订单簿存储了一种给定金融工具的大量订单。大型交易所每秒可以获得数百万个订单。因为这个订单簿中的订单数量会越来越多,所以保持恒定的订单 ID 查找时间很重要。我们必须每秒查找数百万次订单 ID 才能更新这些订单。此外,我们需要快速检索价格最优的订单。就复杂性而言,按价格查找订单不可能是线性的。因此,我们将使用快速索引(具有对数时间来查找特定价格的订单)。
  • 按价格顺序迭代:当大量买卖时,我们可能需要找到很多订单才能达到给定的交易量。在这种情况下,我们会从最好的价格开始,接下来我们会去到次好的价格,我们会一直这样下去。在这种情况下,执行速度以非常低的复杂度达到下一个最佳价格也很关键。
  • 在常数时间内检索最佳出价和要价:由于我们将主要处理最佳价格,因此我们需要一个能够返回最佳出价和报价订单的数据结构。
    我们需要考虑以下因素:

  • 组织顺序标识符以在巨大的关联数组中排序信息(对于 C++,它可以是 std::unordered_map或 std::vector)。
  • 订单元数据包括对订单簿及其所属价格水平的引用,因此,在检查订单后,订单簿和价格水平数据结构仅是一次解引用。使用Order ExcuteOrder Reduce操作时,存在价格的引用允许 O(1) 减少。如果您还希望跟踪时间优先级,则可以保留指向队列中下一个和上一个订单的指针。
  • 因为大部分变化发生在订单簿的尾部附近,所以对每个订单的价格水平使用一个vector将具有最快的平均价格查找。因为期望的价格通常距离尾部只有几个级别,而且分支预测器、优化器和缓存上的线性搜索更简单,所以从vector末尾开始线性搜索平均比二分搜索更快。当然,订单簿外可能存在病态订单,理论上,攻击者可能会在书的末尾传输大量更新,以减慢您的实施速度。然而,实际上,这通常会产生一个缓存友好的、几乎 O(1) 的插入、查找、更新和删除实现(在最坏的情况下使用 O(N) memcpy)。
  • 这具有插入、查找、删除和更新的 O(1) 最佳情况行为,具有极低的常量时间。不幸的是,由于高速缓存、TLB 和编译器友好性,您可能以很低的概率实现 O(N) 最坏情况行为,但这仍然具有很高的常量时间。当涉及最佳出价和报价 (BBO) 更新时,它也非常快,几乎是理想情况下,这正是您通常所追求的。
    通过解释一个订单应该如何在 HFT 中实现,我们已经可以明白为什么我们需要深入了解计算机操作系统和编程知识。在下一节中,我们将深入介绍如何使用这些组件来实现最佳性能。
决定何时交易的策略

    交易策略是系统的大脑。这是我们将代表我们的交易概念的算法付诸行动的地方。让我们看一下图表:



图 2.7 – 交易策略从book builder接收数据以决定何时交易

    该图显示交易策略分为两个主要部分,信号和执行:

  • 该策略的信号组件仅专注于生成信号。但是,有意图(信号)并不能保证您会获得您感兴趣的流动性。例如,在高频交易中,您的订单很可能会因为交易速度而被拒绝。
  • 该策略的执行部分将负责处理来自市场的响应。这部分决定如何应对市场的任何反应。例如,订单被拒绝时应该怎么办?您应该继续尝试获得同等的流动性和另一个价格。
    在本节中,我们了解了交易策略;我们现在将了解订单管理系统 (OMS) 作为交易系统最后一个关键部分的所有内容。
OMS
OMS 收集从策略提交的订单。 OMS 跟踪订单生命周期(创建、执行、修改、取消和拒绝)。 OMS 收集交易策略订单。如果订单无效或格式错误,OMS 可能会拒绝它(数量过多、方向错误、价格错误、未平仓头寸过多或交易所不处理的订单类型)。当在 OMS 中识别出错误时,订单不会离开交易系统。拒绝发生得很快。因此,与订单被交易所拒绝相比,交易策略可以更快地做出反应。让我们看一下下图,它描述了 OMS 的主要功能:



图 2.8 —— 订单管理器收集交易系统中的所有订单

    现在让我们讨论交易系统的关键组成部分。
关键组成部分
交易系统的关键组件包括Gateway、Book Builder、策略和 OMS。它们汇集了您开始交易所需的所有功能。我们通过汇总所有重要组件的处理时间来计算交易系统在速度方面的性能。当一个价格更新进入交易系统时,我们启动一个定时器,当这个价格更新产生的订单离开系统时,我们终止定时器。这段时间被称为tick-to-tradetick-to-order周期。
非关键组成部分
非关键组件是那些与提交订单的选择没有直接关系的组件。他们更改设置、收集数据并报告此数据。例如,在设计策略时,您将拥有一组需要实时更改的参数。您需要一个可以将数据传输到交易策略组件的组件。为此,我们将使用一个名为Command And Control的组件。
Command And Control
交易者和交易系统之间的联系被称为Command And Control。它可能是一个命令行系统或一个用户界面,用于接收交易者的订单并将它们路由到必要的组件。看看下图:



图 2.9 —— 交易系统的用户界面

    我们介绍了负责与所有交易系统组件交互的Command And Control服务。我们现在将看到交易系统的其余功能。
服务
可以将额外的组件添加到交易系统中。我们将讨论以下组件(并非详尽列表):

  • 头寸服务器:这会跟踪所有交易。它更新所有交易金融资产的头寸。例如,如果以 1.2 美元的价格进行 100,000 欧元/美元的交易,则名义头寸将为 120,000 美元。如果交易系统组件需要 EUR/USD 的头寸数量,它将订阅头寸服务器以获取头寸更新。订单经理或交易策略可能希望在允许订单发出之前了解此信息。如果我们想将给定资产的头寸限制在 200,000 美元,则另一个获得 100,000 欧元/美元的订单将被拒绝。
  • 日志系统:这会收集来自组件的所有日志,并将写入文件或修改数据库。日志系统有助于调试,找出问题的原因,也只是报告。
  • 查看器(只读用户界面视图):这些显示交易视图(例如头寸、订单、交易和任务监控)。
  • 控制查看器(交互式用户界面):这些提供了一种修改参数和启动/停止交易系统组件的方法。
  • 新闻服务器:这从许多新闻公司(如彭博社、路透社和 Ravenpack)收集新闻,并实时或按需向交易系统提供这些新闻。
    本节涵盖交易系统的关键和非关键组件。我们现在将通过总结我们所学的内容来结束本章。
总结

    我们在本章中学习了如何创建交易系统。我们创建的交易系统包括您设计交易系统和开始交易所需的所有组件。
    学习如何构建交易系统需要数年时间。由于资产类别之间的差异,您很可能会成为一种资产类别的专家,而不是另一种资产类别的专家。我们创建了交易系统应具备的最低限度的功能。我们必须学习如何将此组件链接到交易系统,以使其完全发挥作用。
    在接下来的章节中,我们将详细解释交易系统应该如何实现,尤其是与操作系统和硬件相关的部分。下一章,我们还有更多关于交易机构的知识要学习。
第3章 了解交易机构动态

    在上一章中,我们学习了如何创建高频交易 (HFT) 系统。我们非常关注交易系统的关键组成部分。我们还详细回顾了如何创建订单簿,它基本上是交易所从所有交易参与者那里收集的内容的复制。在这个章节,我们将要学习交易所是如何工作的。
    我们将介绍交易所的功能组件,并将深入了解匹配引擎。了解交易所的匹配引擎如何工作是您在创建高频交易策略时必须完成的最重要任务之一。
    本章将涵盖以下主题:

  • 了解交易机构
  • 了解匹配引擎
  • 搭建交易平台
    在第 2 章交易系统的关键组件中,我们对如何设计交易系统有了一个不错的了解。我们详细讨论了如何设计一次订单、创建交易信号以及接收市场响应。在本章中,我们将深入解释交易所的运作方式。
构建交易平台以处理大规模订单

    现有业主可以在证券交易所与潜在买家打交道。交易所不是一级市场:它们可以是二级、三级市场。在证券交易所交易的公司不会每天买卖自己的资产。他们可能会在必要时回购股票或发行新股。在证券交易所,我们从另一个股东那里购买股票。当我们出售股票时,我们将它们卖给了另一个投资者。
交易机构的历史
在 16 和 17 世纪,第一家证券交易所出现在欧洲,主要是在安特卫普、阿姆斯特丹和伦敦等港口城镇或商业中心。然而,由于少数公司不发行股票,这些早期的股票市场更类似于债券交易所。大多数早期公司被视为半公共企业,因为政府必须允许它们开展业务。
纽约证券交易所 (NYSE) 于 18 世纪后期首次出现在美国,使股票交易成为可能。费城证券交易所 (PHLX) 被誉为美国第一家证券交易所。随着 1792 年纽约证券交易所法案的签署,纽约证券交易所诞生了。
    随着当代股票市场的引入,一个监管和专业化的新时代开始了,确保股票买卖双方可以相信他们的交易将以可接受的价格和合理的时间框架完成。今天,美国和世界各地有多个股票市场,其中许多是电子连接的。结果,市场变得更有效率和流动性。股票当然是最著名的交易资产类别;但是,还可以交易外汇、固定收益、期货、期权、加密货币和许多其他类型的资产类别。
    证券交易所的股票价格可以通过多种方法确定。进行拍卖是最常见的方法,在拍卖中,买卖双方出价购买或出售。出价(或要价)是某人希望购买某物的价格,而出价是他们希望出售某物的价格。当出价和要价相等时,交易就完成了。
了解交易所的特点
    证券交易所(交易所)有很多不同的特点。交易所是一个将各种市场参与者聚集在一起以简化交易、降低风险并帮助发现价格的市场。交易所中有几个组成部分。以下是通常的主要系统:

  • 股票行情表:这些是市场参与者在交易所交易的公司。它们本质上是通过首次公开募股程序上市的民营企业。估值、流动性和合规费用都是选择上市交易所时需要考虑的重要因素。
  • 匹配引擎:这类似于旧交易场,经纪人站在那里互相大喊指令。它现在作为匹配引擎算法完全自动化,负责交易。在市场中,引擎发布订单簿(待处理交易)并正确匹配它们。这些交易匹配和完成的速度各不相同,以纳秒为单位。交易引擎确定价格的方式在交易所之间略有不同。在通用订单簿和匹配引擎部分,我们将对其进行更深入的解释。
  • 交易后:支付和结算,以及贸易对账,都是这个过程的一部分,以确保所有订单都正确匹配和完成。本质上,这是繁琐(但必要)的后端工作。
  • 市场数据:该交易所处理大量数据。它被出售给各种市场参与者。交易价格、交易量、公司公告/备案等都是这方面的例子。托管(正如我们在第 1 章高频交易系统的基础知识中所定义的那样)也因为高频交易而变得普遍。因此,访问此数据的速度也很受欢迎。
  • 市场参与者:清算会员和交易会员都是市场参与者。每个人都有自己的一套资格,清算会员有更严格的限制;会员还向交易所提供抵押品,以在会员倒闭时保护自己。由于交易涉及两方,如果一方违约,交易所将介入与第二方进行交易。因此,交易所需要抵押品才能向违约方提出索赔,同时保持市场稳定。经纪人和自营交易公司是最常见的交易成员。清算会员是协助交易清算的主要参与者。
  • 规定:根据资产类别,法规有所不同。不同的交易所会有不同的规定,这取决于司法管辖区。这样做是为了防止洗钱和市场篡改,例如内幕交易和市场操纵;交易所还可以监控公司公告,以确保进行所有必要的披露,从而促进透明的市场。除了管理市场参与者外,交易所还必须应对内部合规和政府部门。
    我们已经了解了交易所必须具备的特点;现在我们将详细讨论交易所的架构。
交易所架构

交易平台负责执行从买方投资组合经理那里收到的订单,在执行过程中管理和监控订单,并提供对多个Venues的电子访问。在卖方方面,需要支持处理客户订单和维护交易头寸。
    交易所架构提供买卖交易能力,必须满足以下业务需求:

  • 支持前台、中台和后台交易功能以及基本和复杂的基于规则和算法的交易技术。
  • 支持上述策略在整个开发生命周期的回测和实时执行。
  • 显示交易和流水帐 UI(桌面应用程序、基于 Web 的/移动应用程序)。
  • 支持交易即服务 (TaaS) 业务模型,该模型可以使用开放 API 作为实用程序交付。我们在上一章中讨论了与交易系统的集成以及使用与 FIX 协议一起工作的 API 的交易所。
  • 支持与范围广泛的外部各方的全面整合。
  • 支持广泛的金融产品。
  • 应该是高度可扩展的。
    我们在下图中展示了交易所的主要功能(我们代表了三个公司的三个队列:特斯拉、微软和苹果):



图 3.1 —— 交易机构架构

    在此图中,我们可以看到连接到交易所的交易系统 T1。正如我们在第 2 章交易系统的关键组件中解释的那样,交易系统启动与交易所的两个连接:价格更新和订单。当订单被发送到交易所时,它将遵循以下步骤:

  • 根据资产类别和金融工具类别,它将被路由到队列。每个队列都是为一个给定的价格和一个给定的符号创建的。
  • 匹配引擎一次处理一个订单。如果订单簿发生变化(由匹配引擎处理),该变化将传达给交易者并提供给所有市场参与者(如果交易发生,每次更新都将发送到清算/post交易)。
    很容易观察到,交易者和交易所之间的沟通必须快节奏才能达到高频交易的速度。因此,选择传输消息的协议至关重要。基于字符串的协议(例如 FIX 协议)是不够的。大多数可以在微秒内进行交易的交易所都使用二进制协议。交易系统旨在为交易策略快速提供数据。对于交换,目标是向匹配引擎提供数据。我们将在下一节中深入描述匹配引擎算法是什么。
通用订单簿和匹配引擎

数以百万计的投资者和交易者构成了整个市场,他们都可能对特定股票的价值以及他们愿意购买或出售股票的价格有不同的看法。在一个交易日的过程中,当这些投资者和交易员通过买卖股票将他们的意图转化为行动时发生的数千笔交易会在其中产生分钟级别的波动。
    证券交易所通过连接股票买卖双方为此类交易提供平台。普通人需要股票经纪人才能进入这些市场。该股票经纪人充当买卖双方的中间人。
    最初,在交易所匹配股票买卖双方是人工完成的,但现在越来越频繁地使用计算机化交易系统。交易员利用口头和手势交流在交易场或交易所大厅买卖大宗股票的公开喊价系统是手动交易形式。它已被电子交易平台所取代。这些技术可以比人工更有效、更快速地匹配买家和卖家,从而具有一定优势,主要优势在于更便宜的交易成本和更快的交易执行。
    在买卖双方之间创建交易的意图保存在我们所说的订单簿中。该订单簿与我们之前描述的交易系统相同。它包含所有市场参与者的出价和报价。匹配买卖双方的过程由匹配引擎处理。该算法匹配买卖订单以执行证券交易。匹配引擎有不同的算法来描述订单如何匹配和填写的顺序,这取决于交易路由的位置。
    匹配引擎算法如图 3.2 所示。输入是来自交易者的Order (1) 和Order Book (2)(其中包含已在交易所下达的订单)。该算法将返回Trades列表 (3) 和Resting Orders列表 (4)。每一个进入系统的订单都会被一一处理。



图 3.2 —— 匹配引擎算法的输入和输出

    使用 HFT 策略时,对于盈利纳秒级别的优化很重要。在本书中,我们将详细学习如何优化交易系统以获得最佳性能。同时,需要了解交易所。正如我们之前所描述的,交易所是一个服务器,它接受来自交易系统的连接,并在订单簿上运行匹配引擎算法,订单簿是收集所有订单的结构。由于所有交易所都有自己的匹配算法,因此了解您在交易时会遇到的基本场景非常重要。
    在以下所有场景中,我们将解释在订单进入与订单簿相关的交易所时发生的情况。我们先了解最基本的情况,就是匹配最优价格。
最优价格方案
默认情况下,匹配引擎将始终尝试为给定订单 (1) 找到可用的最佳价格 (2)。
    匹配引擎算法找到最佳可用价格,如图 3.3 所示。在此图中,我们可以看到订单 #1 进入交易所。该订单将与订单 #3 匹配,因为该订单的价格对买家来说更好。事实上,买家想以 100 美元的价格购买一项资产。该交易所以 99 美元和 100 美元的价格拥有该资产。匹配引擎将匹配可用的最优惠价格,即 99 美元:



图 3.3 —— 最佳价格情景

    在这种情况下,算法的结果将是在订单 #1 和 #3 之间以 $99 的价格进行交易。订单 #2 将保留。
    在此示例中,数量为 100。我们需要了解当两个匹配订单的数量不同时会发生什么情况。
部分填充场景
在前面的示例中,我们有两个匹配相同数量的订单。在图 3.4 的示例中,我们有数量为 4 的订单 #1 和数量为 1 的订单 #3。在这种情况下,要完成订单 #1,我们需要再拥有三份。此交易机构的订单簿中没有满足此交易的金额。因此,订单 #3 和 #2 将被执行,来自订单 #1 的剩余数量 1 将保留在交易所。这就是为什么这种情况下算法的输出是两个已完成的订单和一个剩余的订单。



图 3.4 —— 部分填充场景

    在前面的两个例子中,我们有匹配的流动性。事实上,对于所要的价格,我们有流动性来匹配这个价格。我们现在需要研究当流动性无法与另一个流动性相匹配时会发生什么。
没有匹配场景
在图 3.5 所示的场景中,我们有订单 #1 进入系统,订单簿有两个订单,#2#3。由于买入价格为 98 美元,远低于参与者准备卖出的价格 99 美元,匹配引擎将不会匹配任何订单。订单 #1 将留在交易所:



图 3.5 —— 没有匹配场景

    在前面的场景中,我们在订单簿中有不同的价格水平。我们需要研究如果流动性价格相同会发生什么。
多个相同价格的订单
在图 3.6 所示的场景中,我们有两个具有相同价格的订单和具有相同价格的传入订单。订单的填充方式取决于匹配引擎的配置:



图 3.6 – 订单簿中具有相同价格的多个订单

    匹配引擎的算法对于确定我们希望在交易中鼓励哪种行为至关重要。这些算法的两种最流行的实现将在接下来的部分中讨论。
    让我们谈谈不同类型的算法。
FIFO
时间/价格优先,也称为先进先出(FIFO),是使用最广泛的算法。从图 3.1 所示的交易所架构中我们知道,订单存储在给定价格水平的队列中。一旦订单进入匹配引擎,它们将被标记上它们进入系统的时间。因此,没有订单会有相同的时间戳。通过这种观察,当我们应用 FIFO 算法时,我们会将传入的订单与具有较低时间戳的订单进行匹配。在这种情况下,订单 #3 在交易所的时间比订单 #2 长。因此,订单 #3 将首先与传入订单 #1 匹配。对订单的任何修改都将导致其头寸在执行顺序中丢失。根据交换情况,更改给定订单的数量将导致该订单失去其优先级。但是对于所有交易所来说,如果我们有价格变化,订单将失去优先权,因为它需要改变 FIFO 队列。



图 3.7 —— FIFO算法

    即使 FIFO 算法是最常用的算法,也可以使用许多其他算法。我们将讨论的最后一个算法是纯按比例算法。
纯按比例
使用考虑定价、订单手数和时间的按比例算法填写订单。市场参与者的入场订单在匹配的反订单中按数量比例平均分配。   



图 3.8 —— 纯按比例(左边最下边的#3应为#2)

    图 3.8 显示了一个价格为 100 美元的买单将与两个价格相同的订单一起执行,无论它们的时间戳如何。交易所将使用此算法来鼓励参与者下订单,即使这些参与者比最快的参与者慢。
其他形式的按比例分配
为了鼓励交易,按比例算法经常与其他算法一起使用。它通常用于激励市场参与者之间的特定行为。
    Pro-rata with top-order是一种与pro-rata挂钩的方法。在这种情况下,最早的柜台订单首先全部完成,然后按比例分配其他柜台订单,如下图所示:



图 3.9 —— 按比例变种算法

    图 3.9 解释了按比例算法的变种。在图 3.8 中,订单簿中的所有订单都填充了相同的数量。在这个变种中,我们在填写订单时给予订单簿中较旧的订单更多的权重。通过这种方式,即使参与者速度不够快,交易所仍然会鼓励参与者进行交易,但是速度越快的参与者将获得更多的交易量奖励。
    任何奇异的配置都可以添加到该算法中。例如,如果我们想鼓励更大的订单,可以通过填充更大数量的订单来引入权重。
   让我们结束对匹配引擎可能遇到的不同场景的介绍。我们现在将通过总结我们讨论的内容来结束这一部分。
总结

    如前所述,一纳秒可以在 HFT 中创建一个优势。通过了解交易所的运作方式(在优先队列和匹配引擎方面)了解市场的微观结构将帮助您了解如何设计您的交易策略。您现在知道修改订单价格将导致修改后的订单在队列中失去优先级。我们还了解到,根据交易所的不同,更改订单数量可以获得相同的结果。本章向您展示了如何设计交易平台。我们对匹配引擎的工作原理有了深入的了解。在下一章中,我们将解释硬件和操作系统如何在高频交易系统和交易机构中运行。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP