淘客熙熙

主题:【原创】证券交易系统 -- 为什么要低延迟? -- miketan

共:💬29 🌺214 新:
全看树展主题 · 分页 下页
家园 【原创】证券交易系统 -- 为什么要低延迟?

最近几年在证券交易领域最热门的话题不是技术分析,不是交易算法,而是高频交易和高频交易的技术核心,低延迟的交易系统。

在很久以前,所有的交易都是手工完成的。人们买卖股票就是凭证件到券商的窗口去填写表格,券商检查帐户里的股票现金无误后,就派专门跑街的人把这个单子送到他们在交易所的红马甲那里去交易。当天交易结束后,交易所把成箱的交易结果送回券商和清算公司。

如果某公司快要倒闭,你想要经快把手里这家公司的股票脱手,那就当然要尽快的冲到券商那里把表格填完,然后祈祷跑街的小子跑得快些,券商的红马甲动作快些,好让你的股票在价格跌到零之前卖出去。这时候人们最希望的就是股票交易瞬间完成,最好没有跑街的人和红马甲这些过程。可是该死的跑街的小子在路上还去买了杯咖啡,红马甲没把我的单子放在最上面。这太让人无法忍受了,我们需要最快的成交方式。

我们今天讲的就是股票交易的延迟。上面的例子已经是一个世纪以前的交易方式了,电报和电话的出现取代了跑街送单的人,计算机和网络的出现完全取消了交易过程中的人工操作,一个普通人可以在一秒之内完成一个交易,交易速度如此之快,它已经超出了人们的反应速度,让人很难相信更快的交易系统有没有意义。实事上这只是我们要讲的故事的开始...

从上世纪80年代开始,机构交易员用计算机下单已经比较普遍,一些公司开始尝试让计算机自动下单,这就是现在流行的算法交易(Algo Trading)的开始。现在很多公司都有各种高度保密的黑盒子算法交易系统,前几年高盛的一个程序员Sergey Aleynikov因为把高盛的一套算法交易源程序放到互联网上被判了刑,成了街上(Wall Street, Bay Street, JinRongJie Street...)和监管者的热门话题。另一个有关的更莫测的词汇是高频交易(High Frequency Trading, HFT),想不想试一下一个人每秒交易一千次的感受?

对于最早出现的基于历史统计数据的算法交易比如TWAP和VWAP等,延迟不是问题,这些交易算法每隔一定时间,比如5分钟,根据历史交易情况安排下一时间段的交易。后来的很多基于机会的交易策略就需要分析行情数据来安排交易,这样的交易策略需要高质量(低延迟的同义词)的行情数据,和低延迟的下单系统。

现在正式进入这一章的主题: 为什么要低延迟?

低延迟的行情数据:如果行情数据的延迟是三秒钟,那么我们刚收到的行情数据实际上是三秒钟前的市场行情,现在的市场价格可能完全不同。如果我们的交易算法基于这样的行情数据,那结果就完全不可预测。如果我们的行情数据的延迟是零,我们看到的就是当前的真实行情价格,太美妙了!实际上所有的系统都有延迟,这包括交易所系统的延迟和我们自己系统的延迟。我们可以假定交易所的延迟对所有的人都是相同的(实际上不总是这样,但交易所决不会承认,请交易所的技术人员吃个饭可能会了解到一些内幕。有些大玩家花大本钱接到交易所较快的端口上),我们只要改进自己的系统就可以了。

低延迟的交易算法和下单系统:和行情数据的延迟差不多,如果我们下的单用了很长时间才到,这个单子就会偏离当前行情,变得莫名其妙。

系统的延迟当然是越低越好,当延迟低到毫秒一下时,降低延迟就会变得极为昂贵。这里说的延迟是系统延迟,从算法生成一个单子到离开自己的机器和网络,进入到交易所的网络和主机。为了降低网络延迟,要把自己的机器和交易所的机器放在同一个机房(co-location),中间用纳秒级低延迟的交换机,不使用网络IP地址转换(NAT),用FPGA处理行情数据。在这种延迟级别上,光速变成了瓶颈,因为光每微妙只能走0.3公里,如果我们的机器离交易主机几个街口,就意味着延迟增加几个微秒。如果在不同的城市,那延迟就不可接受了。这些需要数百万美元或更多的研发费用,还有每月至少数万美元的运营费用。

在降低延迟的过程中,降低到多少才我们的目标呢?其实不要太低,只要比竞争对手低一微秒就可以了。这就是两个人遇到熊的故事,一个人说,不要跑了,我们跑不过熊的。另一个人说,我不要跑过熊,我只要跑过你就可以了.

在实际运行中,我们使用的指标是命中率(Hit ratio):我们送出一百个单子,其中九十个达到交易目标,我们说命中率是90%。如果这个命中率达到了我们的要求,我们就说系统延迟可以接受了。

通宝推:博客南,肖邦,牛栏山二锅头,镐梓,一目十行,自以为是,李根,
家园 很好很好

希望能多聊些。比如现在的top player (那些?)可以turn around time做到多少?比如为什么要用FPGA 处理数据 ?

结合2010年flash crash,对高频交易有什么看法(他们赚的是什么人的钱)? 高频交易的前景怎么看?

如果可以,能不能谈谈高频交易创收的算法? 原理就行啊.

家园 如果是高频的搞法, 这个是真理。

有次一个新芯片的seminar, HF的人比我们还热心。

已经不比算法了,比谁的刀快了

家园 【原创】网络延迟

网络延迟

数据从自动交易主机生成,经过网卡到达线路上,在经过一个或几个交换机然后到达交易所的交易主机,这中间有三种网络有关的延迟:

主机网卡的延迟

网络交换机等设备的延迟

数据在线路上以光速传输产生的延迟

网卡的延迟

我们先给出一个网卡延迟的定义:网卡的延迟是从应用程序调用Socket的send()函数开始,到数据到达线路上的时间;或数据从线路进入网卡到应用程序接受到Socket recv()函数回调的时间。这个延迟包括了操作系统网络协议实现(比如TCP Stack)的延迟,内核的延迟,以及网卡自身的延迟。

我们这样定义网卡的延迟,将和网卡有关的延迟,包括网卡,主机,操作系统及网卡驱动全都打包进一个数字,是因为它们密切相关,相互影响,并且很容易和应用程序的延迟分开,并且容易测量。常用的测量程序是流行的Ping-Pong,就是在一台机器发出一条消息,另一台机器受到后立即送回去,原来的机器接受到后计算所用时间来计算延迟。这个延迟对网络系统来讲通常叫用户级延迟,因为他是用户看到的延迟,其中操作系统延迟的比重要大于真正网络部分的延迟。

现在主流的低延迟网卡有两大阵营:10G Ethernet和Infiniband。Infiniband出现大约在1999年,而10GE在三年后才出来。Infiniband因为不需要考虑兼容旧版本,性能很先进,尤其是延迟方面,可以达到端到端2微妙的低延迟。10GE是作为1G以太网的升级,有和过去的以太网相同的API,现有系统可以直接使用。10GE虽然传输速度有了很大提高,可以和Infiniband相比较,但在延迟方面就差得很多,因此Infiniband曾是低延迟系统的首选。好在最近推出的新的网卡,把这一差距拉平,甚至超过IB。10GE因为开发容易,从新获得人们的青睐。现在的最新的产品用户级延迟在4微秒以下。

除了上面提到的两大阵营,还有一些其他的技术,他们可能延迟更低,比如基于PCI Express的Dolphin网卡和交换机,但用户较少。

操作系统的延迟

在网卡收到一个数据包时,会产生一个硬件中断,CPU在捕获到中断后调用网卡的中断服务程序(ISR)来处理这一事件,ISR负责把受到的数据从网卡拷贝到内存,再生成一个DPC(Deffered Procedure Call)对象并放在DPC对列中。这个DPC负责后续的处理工作,包括运行操作系统的IP Stack,然后通知用户线程受到了数据。在多CPU的系统上,每个CPU都有一个DPC对列。当没有更高级的中断需要处理的时候,CPU会运行DPC对列中的任务。

在上面这个过程中,有几个产生延迟的地方:ISR转到DPC,DPC转到用户线程都会有context`switch;如果ISR和DPC还有用户线程不在同一个CPU上,还需要Inter-Processor Interrupt来启动线程执行。

操作系统的网络实现,比如TCP Stack,需要很多CPU时间来运行,也会有延迟。一般来说每1bit的网卡速度就需要1hz的CPU主频来处理。对于10GE双工的网卡,需要处理20G bit,也就是说要20G HZ CPU主频来处理,或者说需要10个2G主频的CPU才能处理一个满负荷的10GE网卡的流量。CPU能力不足时会造成很多数据来不及处理,就会使缓存完全用完。如果是TCP协议,主机就会向对方发出接受窗口尺寸为零,对方会停止发送数据。对UDP协议来说,来不及处理的包就会被丢掉,这都会造成很大的延迟。如果TCP数据发生了从新传递申请,那延迟就会大倒无法忍受,有可能会有数秒甚至更长的延迟。

高性能网卡都有针对TCP Stack的优化,尽量把一些东西放到网卡上让专用硬件来处理,就是TCP Stack Offload Engine(TOE)。比如建立连接,计算数据包的完整性(Checksum),计算接受窗口大小,发送ACK消息,中断连接等。

另外,因该把每一个网卡安排在不同的CPU上,让CPU分担任务。一般行情数据的网络流量会很大,比如在每秒十万条到一百万条数据的样子,而下单的通道不会有太大的流量,把他们分开在不同的网卡上可以改善下单的通道的延迟,不会因为行情数据出现超大流量是而影响下单。

网络交换机等设备的延迟

你需要低延迟的网络交换机,普通的网络交换机延迟都很高,如果网络中有路由器,那延迟就太高了,这就是为什么我没有把路由器列在上面。现在的低延迟交换机延迟都远远低于一微妙,一般在几十纳秒,而且每隔几个月就有很大进步,因此不会有太大的问题。

但这些低延迟的交换机都没有NAT功能,在低延迟的网络里不应该出现NAT。不经过NAT的意思就是,我们的机器和交易所的机器使用同一个网段的IP地址,形象点说就是从交易所的交换机直接拉条网线到我们的机器上。我们一般在和交易所连接的机器上装多块网卡,每一块连接不同的交易所,还有面向内网的网卡。这样的网络环境会比较复杂。

数据在线路上以光速传输产生的延迟

光传输得很快,每秒钟300000公里。但它也走得很慢,每一微秒只能走0.3公里,不过一个街口。因此在低延迟网络环境里要考虑数据中心的位置。

通宝推:博客南,镐梓,一目十行,李根,
家园 这些题目都挺大,容我慢慢一个一个写来。

至于大玩家,一般都不愿为人知,比如TradeBot,听说过的人很少。但他们的交易量确实惊人,很容易占一个交易所20%或更高的交易量.他们都是被严管的对象

家园 好文章

标记一下,等着看下文

家园 普通散户如果进行高频交易有可能实现盈利吗?

谢谢楼主,很有意思的题目,这些内幕别处都看不到。

有没有可能对于普通人的网速实现一种算法能让高频交易盈利呢?换句话说,我想知道高频交易的算法有多大程度依赖于延迟,是否稍微慢一点的高频交易就没法赚钱了?

家园 该收交易税了

这样完全不产生价值,只是收割机构投资者而已,实在是个比较糟糕的事情

所以说股市不敢玩,没实力的去了哪都是被收割的命,还不如老老实实的干自己的事情,卖点劳力赚钱

再说一点,普通人想要玩HFT,绝对没可能,入场的门槛非常之高。应该说这个,有能力做得人自然会去做(而不会说)。我们在这讨论的,都还只是场外看戏的,没能力做的,所以在自己没这个能力的时候,也就不必费心力去研究了

赚钱主要还是赚机构投资者的钱(因为他们钱多),也就是各大养老金之类的钱

赚钱的算法,有个比较简单的,就是flash order。简单的说就是比如机构投资者挂一些比较大的买入单,比如说目标买入价,在5.00都买入,现在市价是4.80,可是这个时候未必有卖出单。所以这个flash order就是,出一个很小的卖出单,看看4.80有没有人买,有人表示愿意买,但是这单就立刻撤了(没有成交),所以这个时候价格还是4.80,因为没有成交。随后会继续测试,一直测试到比如5.01,这个时候机构投资者挂的单,因为超出了价格,所以就不买了,这时候卖家就知道有人以5.00的价格挂了一个买单(注意这个时候市场的价格还是4.80左右,因为flash order没有成交)。ok,那这时候就可以,比如以任何低于5.00的价格收单(因为他比较快,可以先收?),以高于市价的价格把单子卖给机构投资者了,凭空毫无风险的赚钱,这个可真是零风险的

原理很简单,而且就算法上来说实在没啥技术含量……可以因为他有效的利用了flash order这个机制,所以就是可以赚钱。我觉得这个事情非常的不合理,可是也没办法具体说到底哪里不合理,只能说感觉比较糟糕

还有一个逻辑就是,比如说美国伊朗突然擦枪走火开战了,那计算机在收到bloomberg的新闻后,可以用几毫秒的时间立刻买卖股票,可是人类收到这个信息,却要经过很多流程,比如说首先要显示到屏幕上,此外人类还要点开,还要用眼睛去看,还要用大脑去想,还要移动手指,按键,这样可能有很长一段时间的延迟(最短1分钟,最长10分钟),这段时间,嗯,你可以算算HFT已经做了多少单子了。所以等人类这个延迟怪兽反应过来的时候。HFT已经买卖了很多了,就靠这个时间差赚钱

算法方面,计算机的算法基础的就这么多,都是数学上的东西,当年ibm的深蓝用的还是专门优化的下象棋专用芯片,但是好像也没听说有谁开发了HFT专用的优化算法的trading芯片,而且也没听说有谁构建一个超级计算机专门用来做trading的,没人优化算法大家都是在拼速度和延迟,所以如果说算法上有了多大的创新,可能就还是比较可疑的。顶多是做数据挖掘的时候建模方式不同吧。算法保密,主要还是一个要唬住自己的投资者,一个是泄密了会被人用算法针对,就变成别人赚自己的钱了

当然我什么都不了解也什么都不懂,这只是胡扯随便说说

通宝推:博客南,
家园 糟糕的在于公开市场公平性神话的破灭

比如你说那个flash order就是利用技术猜到交易对手的底牌(出价),这个在传统市场上是交易所本身才能看到的。而Co-location之类就是赤裸裸让一些人更平等了。

家园 说得不靠谱

随后会继续测试,一直测试到比如5.01,这个时候机构投资者挂的单,因为超出了价格,所以就不买了,这时候卖家就知道有人以5.00的价格挂了一个买单(注意这个时候市场的价格还是4.80左右,因为flash order没有成交)。

别人挂什么单子根本不用测,order book上都有,可以直接读到。另外做高频的应该知道挂的单子根本不靠谱,有大单子买进或卖出都不说明问题,因为大单子基本上都是其他高频挂的,有风吹草动瞬间就撤了。

ok,那这时候就可以,比如以任何低于5.00的价格收单(因为他比较快,可以先收?),以高于市价的价格把单子卖给机构投资者了,凭空毫无风险的赚钱,这个可真是零风险的

哪有这么好的事情,先看价格、再看时间,别人已经挂了5.00买,你就不可能以更低的价格买进,除非5.00的单子都下完了。

还有一个逻辑就是,比如说美国伊朗突然擦枪走火开战了,那计算机在收到bloomberg的新闻后,可以用几毫秒的时间立刻买卖股票,可是人类收到这个信息,却要经过很多流程,比如说首先要显示到屏幕上,此外人类还要点开,还要用眼睛去看,还要用大脑去想,还要移动手指,按键,这样可能有很长一段时间的延迟(最短1分钟,最长10分钟),这段时间,嗯,你可以算算HFT已经做了多少单子了。所以等人类这个延迟怪兽反应过来的时候。HFT已经买卖了很多了,就靠这个时间差赚钱

这个也不靠谱。首先,高频交易本质上依赖技术分析的(极短的时间内基本面的影响可以忽略),而突发事件是完全随机的,是要回避的。我知道的大多数交易策略,在有新闻前都是要平仓的,新闻过后一段时间再重新交易。当然也有专门针对新闻的策略,但是也不是那么简单就能赚钱的。新闻来临前大单都会被撤,bid和ask会被拉的很开,你第一时刻知道方向第一个下单也未必能稳赚钱。

家园 挂单就撤好像很快就要不合法了。

根据wiki

家园 这个市场本身就从来不是公平的

高频的出现也没人让市场变得更加不公平。

下单信息我在前面的帖子已经说了,不用技术手段猜,是用钱买就行。高频的优势在于能更快地获取信息,更快地执行操作。在市场里总一部分人能做到比别人快,以前通过trading pit,现在通过co-location的服务器。要我说trading pit更加不公平,在里面的人都知道是谁在下单,电子交易减少了这方面的不公平。

家园 普通散户恐怕缺乏技术力量

高频有高频的做法, 低频有低频的做法。并不是说高频就一定好了。

家园 是啊,不公平本来就是事实

只是高频交易让更多人知道了这个事实。

家园 挂单就撤在国内已经是不合法了
全看树展主题 · 分页 下页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河