holycow 发表于 2016-3-8 02:28:56

快枪手

本帖最后由 holycow 于 2016-3-7 15:41 编辑

前两个星期晨斯基和伯爵在那里讨论高频交易High Frequency Trading, 我基本没有插嘴。虽然我们公司的客户里面有好多是高频交易公司,并且我有时也能在事后看到他们的交易记录,不过对HFT这个东西我还是了解不深的。

正好上个星期老板推荐我们去读Michael Lewis的书Flash Boys, 这个刘易斯,就是本届奥斯卡奖提名片“大空头”的原作者,Flash Boys是他写HFT的近作。

按我以前对高频交易的认识,有几样东西是高频交易擅长的,而且也是非高频交易不可的。

一个是套利交易(arbitrage)。比如说苹果的股票,在NASDAQ上报价是100.09,在BATS交易所报价是100.10,(苹果虽然是NASDAQ上市公司,但股票在全美各大交易所都可以交易,其他股票也一样) 那么你如果能够以100.09在NASDAQ买1000股苹果,100.10在BATS卖出,那你就无风险地赚了10块钱。跟投入的资本相比这当然是蝇头小利,但是每天成千上万的股票在七八个交易所交易,每个股票同一时间在不同交易所的价差,如果你能不停地倒来倒去那就赚大发了。用当年LTCM某大佬的话来概括,这就像“拿真空吸尘器满地吸一分钱的硬币”。

当然这个套利交易的关键是买卖两笔要同时做成,要是你买进来的那笔成了,卖出去的那笔被别人抢了先,那1000股就砸手里了。炒股炒成股东是不允许的。所以套利的关键是要快,看到价差两笔一把都要拿下来。快的关键是要快看到行情,快决策,快下单,所以HFT公司的服务器都是托管在交易所机房里面,连接服务器和交易所主机的光纤都是走直线,绝不顺着墙角绕弯,为此HFT公司愿意每年付给交易所上千万的租金,就为了那方寸黄金宝地, 可以省100毫秒的时间。而交易程序都是雇了最好的俄国程序员来写,算法一定要最快最有效率,这方面俄国人要称老二,没人敢称第一。为毛这方面俄国人独步天下?因为这帮俄国人在大学学计算机的时候,用的都是内存只有几百K,CPU速度跟蜗牛有一拼的机器上机,而且上机的有限机时还是要排队预约的。这种环境下出来的程序猿,都是算法和效率的大神,什么老中三哥犹太人都只有洗洗睡的份。(去年A股被一个俄国快枪手轻轻松松卷走了那么多钱,一点都不奇怪)

为了在不同的交易所之间打差价能更快,以前支持过Netscape的风投大佬Jim Barksdale出资建了一条连接芝加哥交易所和NASDAQ的光纤专线,从芝加哥出来直通NASDAQ在新泽西的机房,一路上没有必要绝不拐弯,这样比通过电话公司的光纤网络能快几百毫秒。Barksdale计划把这条专线租给200个华尔街客户,每个客户租期五年,租金1060万美元外加自己购买设备。某大行的大佬听了Barksdale推销后,说给我五分钟想一想。这位五分钟之后回到会议室提了一个问题:“你们愿不愿意把租金加倍?”

所以对晨司机的那个问题“股票每几秒钟就变化一次价格有没有意义?” 俺只能说,几秒钟按100毫秒为单位,已经几十个单位了 ---- 就是说,您老人家已经被打成筛子了{:219:}

http://www.aswetalk.net/bbs/forum.php?mod=attachment&aid=NjUzNDB8OGNlZDg1MTR8MTQ1NzM3NDcwNHw0MDk0fDQwNDUx&noupdate=yes

第二个场景是event-driven trading,也就是说基金的策略就是根据市场上突发的政经消息来交易。这个当然是要抢跑道的,消息出来,除非是内幕消息,否则所有人几乎是同一时间知道的。比如说哪天里根坐在广播公司播音室里调试话筒,说了一句“我刚才下令五分钟后对苏联展开全面轰炸”,然后麦克风没关全国都听到了,那所有的交易员会一窝蜂去卖股票。这种时候是手快有手慢无,当然要以毫秒为单位计算时间。

其余不一一列举,反正这些都是我原来知道的,不过我看到那本书讲到我原来不知道的部分就伙呆了。

在连接纽约和新泽西的林肯隧道新泽西一侧的出口不远的地方,是BATS证券交易所。BATS是美国几大证交所之一,主要股东是一些高频交易公司,BATS的机房为什么设在林肯隧道的出口呢?因为NASDAQ和NYSE的机房都设在新泽西,而从曼哈顿到新泽西的所有光纤都经过林肯隧道,也就是说,从任何华尔街大行到NASDAQ或NYSE的交易指令,肯定会先从BATS边上经过。

这又怎么了?如果大行的交易指令是下单下给NASDAQ或NYSE,就算信号从你那边过也不会进你的主机的,除非你在光纤上搞个窃听装置,那样的话就等着FBI上门吧。这个地理优势好像没什么作用嘛。

但是HFT们有办法。

同一个股票,同一时间在各个交易所的交易队列里面的数量是不一样的,比如说还是苹果,任取一个时刻,可能是:

BATS   500股   卖出报价100.09
NASDAQ1000股卖出报价100.10
NYSE   2500股    卖出报价100.11

那么如果某基金要买4000股苹果,它会下三个单子,分别下在三个不同的交易所,正好把市面上的4000股买进。

由于BATS的地利,500股买单到达BATS的时候,NASDAQ的1000股买单和NYSE的2500股买单还在路上。HFT紧挨着BATS交易主机的服务器看到了这500股买单,俄国人的交易算法在微秒单位里判断这是某大单的一部分,然后扫描到NASDAQ和NYSE都有苹果股票可以买。于是HFT引擎发出交易指令,去两个交易所把3500股苹果全部扫光。由于HFT拥有的光纤专线,这个交易指令比基金的交易指令提前若干毫秒到达交易所,抢跑成功。在交易得手后,HFT引擎再发指令以100.12的价格卖3500股苹果,卖单正好撞上基金的那3500股买单,于是HFT在毫秒之间毫无风险地赚了45块钱,倒霉的当然是基金投资者。

那么你问了,要是这个时刻BATS恰巧没有苹果股票交易,这一单不就做不成了吗?

没有关系,可以钓鱼。

假设BATS确实没有苹果股票交易,当前的行情是:

NASDAQ1000股卖出报价100.10
NYSE   2500股    卖出报价100.11

HFT可以自己在BATS下一个100股苹果的卖单,卖出报价100.09。由于这是各市场当前的最低报价,任何买单都会首先来买这100股便宜苹果,为客户买到最好价格是交易商的法律责任,所以这个在交易商的算法里是铁定的。当你的买单包含在BATS买100股时,你已经中计了。

BATS只不过是HFT们最喜欢的狩猎场,但绝不是唯一的狩猎场。HFT们花大价钱把自己的交易服务器和交易所的主机放得越近越好。只要任何单子到达不同交易所之间有超过100毫秒的时差,就会被HFT狙击了。

而且小额的loss-leader的钓鱼单子也不是唯一的钓鱼办法,各个交易所对交易商收取的交易费用也不一样,有的交易所对买单收佣金,对卖单反过来付佣金;另一些正相反。有的对市价单收佣金,对限价单付佣金;另一些正相反。无论如何,这些怪里怪气的规则都会导致交易商为了自己的利润将特定类型的交易优先发给特定交易所执行,殊不知快枪手早就埋伏在必经之路,只要你露头就是一枪。

在那么多家公开的交易所之外,各个华尔街大行还都开有自己的交易暗池(dark pool)。

交易暗池的主要卖点是大的机构投资者如果想要大规模建仓或拆仓,在公开市场交易的话容易被人看破意图,被人看破了得话搭车的,围网打鱼的,各种擦油的很麻烦。各个大行的暗池是供大行的客户之间互相交易用的,行情除了参与者外不对外公开,那么被人看破的可能性就大大减小。理论上,进入暗池交易的买单会首先和暗池中的卖单配对,只有一段时间内配对不成的才会发到公开市场交易。

不用说,各家HFT公司都是这些暗池的参与者,为了参与暗池交易HFT向各大行每年支付千万级别的入场费。

有个基金经理一直怀疑自己在暗池里的交易在被人剥皮,于是他做了一个实验:

他往高盛经营的暗池里发了一个100股Chiptole墨西哥快餐厅的买单。当时这个暗池里Chiptole的买方报价是575.00,卖方报价是575.10,于是他打进去这个买单是575.05,由于没有卖单匹配,这个买单要在系统里且待一阵子。

一分钟后,他往NASDAQ发了一个100股Chiptole,575.02的卖单,当时NASDAQ的买入报价是575.01。一眨眼的功夫,他在NASDAQ的卖单和在暗池的买单都被人吃了。他不知道对手盘是谁,可能是暗池里的HFT,可能是高盛本身,反正他自己对倒,送了3块钱给对手。

他在其他各大行的暗池里重复了同样的实验,结果是一样的。

高盛暗池交易的交易量占整个市场交易量的比率大概是2%,而发往暗池的交易单里,50%是在暗池里成交了。

pcb 发表于 2016-3-8 03:21:25

交了进门费,还要被场子黑吃

冰蚁 发表于 2016-3-8 03:42:24

晨司机是不是被你的快枪打怕了,出门躲风头去了。

{:191:}{:191:}{:191:}

老兵帅客 发表于 2016-3-8 03:45:39

两点。

第一。我当年读cs的时候,机房里面的机器还是256K内存的,因此不要说俄国佬如何如何。A股的麻烦是因为政府笨蛋,跟中国程序员没关系。

第二。假使时间真是这么重要的话,你为啥用C++写程序呢,理论上你起码要用C,如果可能的话最好用汇编,因为那才是极限速度呢。

多少年的汇编、C/C++经验告诉俺两点:

第一。手工汇编程序是最快的,不可能有比它还快的。

第二。要讲开发效率和多线程的话,C也要比C++强。不要跟我讲什么OO的东西,这里咱们扯的是速度,对吧!

holycow 发表于 2016-3-8 04:10:13

老兵帅客 发表于 2016-3-7 11:45
两点。

第一。我当年读cs的时候,机房里面的机器还是256K内存的,因此不要说俄国佬如何如何。A股的麻烦是 ...

俺当年还用磁带机往内存里倒过汉字字库呢,现在早忘了。那帮俄国人直到21世纪还精通这种法门,因为他们的学校直到21世纪初还是在用老爷机。

俺写的当然不是快枪程序,要不然用v-table不是自己跟自己过不去嘛{:198:}

老兵帅客 发表于 2016-3-8 04:14:57

holycow 发表于 2016-3-7 15:10
俺当年还用磁带机往内存里倒过汉字字库呢,现在早忘了。那帮俄国人直到21世纪还精通这种法门,因为他们的 ...

所以呢,落后有时候是好事耶,否则那些俄国佬咋解释?

另外,不同编译器v-table的处理好像也不太一样,于是性能上就有所差别。

对了,你那个sun studio 12的奇迹找着原因没有?

holycow 发表于 2016-3-8 04:15:54

冰蚁 发表于 2016-3-7 11:42
晨司机是不是被你的快枪打怕了,出门躲风头去了。

我的大数据引擎告诉我,晨斯基去吸血鬼之乡去了{:221:}

holycow 发表于 2016-3-8 04:17:00

老兵帅客 发表于 2016-3-7 12:14
所以呢,落后有时候是好事耶,否则那些俄国佬咋解释?

另外,不同编译器v-table的处理好像也不太一样, ...

不找了,直接全部加this->前缀解决

老兵帅客 发表于 2016-3-8 04:18:25

holycow 发表于 2016-3-7 15:17
不找了,直接全部加this->前缀解决

对,这样可以规避这个八哥。

这奇迹肯定是编译器的八哥创造的。;P

indy 发表于 2016-3-8 04:31:15

这个更有可能是大户机构之间的肉搏;小伞DT交易的时间段最少也得几十秒,多的几十分钟到几个小时都有可能

老兵帅客 发表于 2016-3-8 05:46:28

indy 发表于 2016-3-7 15:31
这个更有可能是大户机构之间的肉搏;小伞DT交易的时间段最少也得几十秒,多的几十分钟到几个小时都有可能 ...

就像他文章里面说的,这是用吸尘器满屋子抢找一分钱,玩的是手快量大,因此这种程序对速度的要求极高。

indy 发表于 2016-3-8 05:49:13

老兵帅客 发表于 2016-3-8 05:46
就像他文章里面说的,这是用吸尘器满屋子抢找一分钱,玩的是手快量大,因此这种程序对速度的要求极高。 ...

模拟账户试过最多一天手工交易60次精神高度紧张极其疲劳没有持续性{:7_325:}

长叶林 发表于 2016-3-8 06:21:34

所以我们非IT的就再也进不了签到的前10名了。

晨枫 发表于 2016-3-8 07:03:34

holycow 发表于 2016-3-7 14:15
我的大数据引擎告诉我,晨斯基去吸血鬼之乡去了

谁说的?到我党诞生地去了,昨晚刚回来。

燕庐敕 发表于 2016-3-8 07:34:18

晨枫 发表于 2016-3-8 07:03
谁说的?到我党诞生地去了,昨晚刚回来。

有直飞魔都的班机了?

穿着裤衩裸奔 发表于 2016-3-8 08:14:45

长叶林 发表于 2016-3-8 06:21
所以我们非IT的就再也进不了签到的前10名了。

我it还是天天折腾驱动的也没到过前十,坚决为it洗地

玩牌也 发表于 2016-3-8 08:59:49

indy 发表于 2016-3-8 04:31
这个更有可能是大户机构之间的肉搏;小伞DT交易的时间段最少也得几十秒,多的几十分钟到几个小时都有可能 ...

HFT是渾水摸魚用的。現實上,哪來那麼多的一份錢。

晨枫 发表于 2016-3-8 09:06:11

燕庐敕 发表于 2016-3-7 17:34
有直飞魔都的班机了?

没有啊,所以要倒好几次飞机呢。

四处张望 发表于 2016-3-8 09:22:52

必须加分,然后鄙视圣牛不用汇编{:191:}

lorry 发表于 2016-3-9 08:37:30

请介绍spoofing。谢谢。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 快枪手