大卫刚播出电话,分析员便把程序后台的访问记录调取给了大卫。
记录里只有他们自己的操作,暂时没查到程序文件被向外拷走的痕迹。
大卫很快翻阅完了记录,将它放到了成交明细表格旁边。
电话那头的人问,交易为什么停了。
“原来的策略不能继续用了。”
大卫点开最后一轮测试,“价格和股票还有下单方式都调整过,结果还是一样,我把记录发过去,你马上就能看到。”
“技术组怎么说?”
“他们正在查,但还没找到原因。”
听着电话里短暂的沉默,大卫的目光落一笔没有成功的买单上。
这比订单的价格比他们给出的报价稍高一些,那个与自己抢单的家伙没有购入,而他只要肯多出一点钱,就能买到。
他将这双方都没下单的股票也勾选住,一起放进了发往总部的文件里。
挂断电话后,大卫翻找着通讯录,很快就再次拨通了一个新的号码。
“格兰特,你们今天换了交易模型?”
对面笑了一声,“怎么,挡着你赚钱了?”
“我是说蓝猫半导体,还有那几只科技股,你们吃相有点难看了吧。”
“蓝猫?哼!我们今天做的可是大宗日用的股票,我们还觉得交易量比上周五少呢!你要是又准备抱怨报价,不如让你们的人多干点活。”
大卫没有跟着对方玩笑,只接着试探了几句,才把电话挂掉。
接下来的一个多小时,他接连联系了几家熟悉的机构。
有人装傻,有人反过来打听梅森资本的情况,还有一个老熟人听见他提到成交价格异常,直接问他是不是也遇到了这种问题。
那个分析员也没闲着,他把能辨认出来的几家机构的报价与成交习惯逐一比对,又核查了从同行那里问来的消息,结果并没发现哪一家突然换了打法,或是有人不守规矩。
几家老对手的位置都没怎么变,但梅森资本的利润却实实在在地少了。
大卫将手机扣在桌上,看了一眼时间。
十一点三十二分。
距离开盘,已经过去了两个小时。
原先买进来的股票大多已经处理完,亏损停在了六千四百多美元。
那几组暂停的策略还没恢复,按照过去的经验,这两个小时原本该有数万美元的收益。
交易室里有人拆开三明治的包装,吃了两口,又放回了桌上。
大卫现在压根没心思吃东西。
他们天天跟那些老对手抢生意,谁在哪几只股票上报价积极,谁又会在什么行情下退让,他心里多少都有点数。
偶尔有人换了新模型,挤掉别人的利润,也总能慢慢认出来。
今天冒出来的这个,连他们刚刚修改的参数都能跟上。
“多半是个新来的。”
大卫把那份没有查出异常的访问记录关掉,“先弄清楚是谁,让马修的人过来,查对方的订单从哪里进去的。”
分析员看向大卫,“交易所那边还没给我们回复。”
“无所谓!他们继续走流程,让马修先查。”
不到十分钟,一个穿着灰衬衫的男人走进了交易室,身后跟着几名带电脑的工作人员。
马修是集团网络安全组的负责人,他进来后没急着坐,先看完了大卫标出的几笔交易,又问了几个问题,才让人把电脑接到旁边空着的屏幕上。
“先看这一笔。”
大卫指着蓝猫半导体的成交记录,“我们多花了十美元的那笔。”
交易界面上的记录,显示对方买了多少股票花了多少钱,但买家是谁?电脑IP位置在哪?这些正是马修团队要往下查的,他们需要从交易所的内部记录中,找出是谁把那张卖单塞给梅森资本的。
交易所面对的通常是有接入资格的券商。
客户把买卖要求交给券商,券商再往交易所递单,中间的订单编号还可能会变化。
马修要做的,就是把前后两套编号对应起来,顺着这笔已经成交的卖单,找到券商接收它时留下的记录。
这些东西,公开行情里是没有的。
交易所那边的正式回复还没来,马修电脑前已经出现了一页内部的接入记录。
大卫站在一旁,仔细地看着他操作。
“进去了?”
“这一部分的记录能看了。”
马修将成交编号框选出来,另一边则很快核对出了递单的券商。
几分钟后,券商那边与之对应的客户委托,也被找了出来。
整个过程没有大卫想象中的那么麻烦。
整个交易所的后台被马修他们轻松骇入。
隔着一层权限才能看见的页面,被他们一页接一页地打开,刚才还只能猜测的交易,现在已经能顺着记录往回翻阅。
账户资料交给小组内的其他人继续核查,马修则盯住了券商接收与委托的那台服务器。
接入服务器会记录连接的来源IP,以及这条连接递交过的委托。
IP是网络通信使用的地址,顺着它能查到接入的机器或者中转出口。
至于谁在控制那台机器,还得继续找。
“地址有了。”
一名组员抬头说。
屏幕右侧展开一幅地图,一个亮点落在美国东部,对应的是一家机房。
马修看了几眼,示意他往前查。
大卫皱起眉,“已经找到,为什么还查?”
“这台机器只负责接了指令再往外发,谁给它发的指令,我们还没找到。”
马修说着,将前后两段连接记录摆到一起。
对方用了中转。
就像有人不愿亲自送东西,就先交给别人,再由那个人转交出去。
收件方看见的送件人,可能只是一个邮差。
如果查到这里便停下,最后找到的很可能是一台被租来,甚至被别人控制的服务器而已。
又一段记录被调了出来,地图上的连线向外延伸,落到了东京。
大卫刚看清地名,右侧新刷出的结果便将来源指向了伦敦。
“换得倒快。”马修不屑地说。
组员没接话,双手仍在键盘上敲着。
可伦敦的地址才刚出现,又瞬间切到了加利福利亚。
马修俯下身看了片刻,抬手让小组停下。
“别跟着最新的连接跑了,把范围收回到开盘那一笔,查查它当时从哪里进来。”
对方可以不停换地机器,也可以让很多台机器同时递单。
追着这些不断变化的地址查,很容易越查越乱。
他们手里有好几笔早已完成的交易。
股票已经卖掉,钱已经付过,接收这笔委托的券商服务器,也已经留下了记录。
只查这些,至少能把那些后来才出现的连接排除出去。
马修从中选出一笔时间节点最早的,并把同一个股票的委托编号发给两组人,让他们分别核查。
大卫看到这复杂的工作流程也没催促,他甚至拉了张椅子坐下,等着马修他们把那个藏在后面的小贼给揪出来。
过了一会,左边一组的人先开口了。
“接收记录对上了,来源在新西兰,是奥克兰一家机房的地址。”
“我们这边是华盛顿。”
右侧几乎同时有人汇报。
马修转过头,“哪一层?”
“连进券商入口的那一层。”
左边的组员也回答道,“我们的也是。”
两份记录被摆到了同一块屏幕上。
同一笔卖单,同一台电脑接入服务器,连记录里的接收时间都一致。
可在当时,究竟是哪一台机器连进的服务器?毕竟此刻两边显示着完全不同的IP地址。
最初查到的美国机房的地址还保存在电脑桌面上。
马修把最初的那份记录重新打开,仔细地核对了一遍,眉头皱得更深了。
最初的那份,同样是这一次接收。
马修盯着这些个地址又看了一遍。
“先核对订单!别把拆出去的另一笔混进来,再检查两边时间有没有换算错。”
几名组员重新埋下头,交易室里只剩下断断续续的键盘声。
大卫看着那些个地址,“会不会新西兰转了一次,再经过华盛顿?”
“那应该能连成前后两段。”马修拿起笔,随手在桌子上找了张纸,画了两个方框,末尾又添上代表券商的第三个框,“它经过多少地方都可以,我们现在核对的,是最后连进同一个入口的那一次。”
他分别从前两个方框画线,两条线都直接指向末尾。
“这两份记录,是从不同的地方却在同一时间抵达券商服务器的。”
大卫看了一眼屏幕。
券商只接收了一次这张卖单。
如果接收了两次,应该有两次接收的痕迹,哪怕其中一次被当成重复委托丢掉,也说的过去。
但现在两组人查的却是同一次接收,给出的来源却是互相冲突的。
“查错了?”
“再等一会……”
马修没有顺着他的猜测下结论。
他让人换了核对工具,又抽出旁边几笔普通的委托,照着相同的方法重查了一遍。
普通委托的结果能够对上。
有的也经过了中转,但两组人拿到的记录能前后接起来,没有出现那样的分歧。
再换回那张卖单,新西兰和华盛顿仍各占着一边。
“编号确认了,没有拆单,时间也没问题。”
负责核验的组员把结果放到马修面前,“两边记录里都有对应的连接与委托,单独看,都能对上。”
马修沉默着,把两份文件都保存了下来。
下载到本机的记录是不会继续变化的。
谁打开第一份,看见的都是新西兰。
谁打开第二份,看见的都是华盛顿。
可这两份偏偏是同一台服务器在同一时刻发生的同一次接收。
至少有一份被做了手脚。
马修立即让另一组人绕开刚才的查询入口,从独立保存的通信记录重新核对。
那里面记着当时有哪些机器互相连接,可以拿来检查券商自己的记录有没有撒谎。
几分钟后,第三组报出了结果。
“伦敦。”
这再次新来的地址让交易室里有人低声地骂了一句脏话。
马修转过去,盯着那人看了两秒,伸手把他的电脑拉近。
第三组的记录,连前后的连接时间都能接上。
同样一笔委托,到了他们那里,又多出了一段完整的来路。
大卫已经从椅子上站了起来。
“到底哪个是真的?”
马修没有回答,先将几份记录并在一起,一处一处地比对。
如果对方只删掉了某一段记录,他们至少知道线索是从哪开始断的。
如果留的是粗糙的假记录,也能从前后衔接,时间不对之类的地方,把错误的路线排除。
可眼前这几份,偏偏都能顺着查下去。
怀疑新西兰,就有另一端的连接记录证明它当时确实发出了那笔委托。
转头去查华盛顿,又能找到一套同样完整的记录,证明那次接收来自这里。
马修开始要求更多的人交叉核验。
屏幕上的地图随之越铺越大。
伦敦旁边出现新的连线,东京重新亮起。
起初零散的几个候选地址,在新的核查结果送来后,又接连增加了好几个。
每个点下面都挂着相应的记录,点开任何一个,都能看见一条似乎说得通的来源。
大卫伸手指向其中一处,“先排除这个,刚才那份里没有它。”
“新找到的记录能支持它的出现了。”
“那就把之前错的删掉!”
马修摇了摇头,“现在还确定不了到底哪份是错的。”
大卫的手停在屏幕前,过了片刻才放下。
马修关掉了自动确认,将地图上已经亮绿的几个标记,逐一改成了灰色的待核验。
一旁的分析员一直在旁边看着,他对网络追踪懂得不多,但眼前发生了什么,已经看明白了。
正常查下去,候选范围应该越来越小,总得有些对不上的东西被筛出去。
但马修他们却每查一次,就多出一个有记录支持的答案。
地图上的点渐渐聚成一片,连线交叠在一起,哪都像是正确路线,却又哪一处都不敢确定。
“这简直像一团概率云。”分析员低声说。
大卫没有看他,他正盯着马修,把刚才那个问题又问了一遍。
“他到底在哪儿?”
马修松开鼠标,叹出一口气。
“这些地址,对应的也只是候选机器,人有没有在那里,我们还不能判断。”
“我就是问那些机器的事!”
“那个也确定不了。”
马修停顿片刻,手指着屏幕上的地图,“可以肯定的是,有一部分证据被污染了。这导致,我们拿来验证它的其他记录,也没办法确认可信度,现在能确认的范围,只有到券商接收这笔委托为止,再往前,不能信,也不可信。”
大卫听到马修的回答,张开的嘴迟迟未能闭上。
交易所的接入记录,他们早就拿到了。
查到这里,却连一台能够确认的来源机器都说不出。
马修还在安排人再度重新核验,大卫则站了一会,回到自己的座位。
他将那张越画越乱的地图从主屏幕上移开,调出了交易台的收益记录。
分析员跟着他走了过来,“我们的订单继续停着吗?”
“你觉得现在能开?”
分析员没说话。
大卫把过去二十个交易日的记录拉了出来,单独选中今天受影响的几组。
扣掉交易费用,平均每天二十四万美元。
这几组程序开着,钱就从成千上万笔很小的差价里慢慢攒出来。
有时候多些,有时候少些,一个月下来,大体差不到哪里去。
眼下,已经亏掉的六千四百多美元反倒显得没那么扎眼了。
大卫列出表格,把已经发生的亏损留在第一栏,又将预计少掉的收益单独列在旁边。
一天,二十四万美元左右的收益缺口。
大卫看了几秒,将天数改成了五个交易日。
一百二十万美元。
如果一个月都解决不了,按二十个交易日计算,那就是四百八十万美元。
交易停着,给程序员和交易员的工资要照发,机房和线路的费用也要照交,月底股东看见的报表上,会多出几百万的亏损。
“要是我们重开呢?”分析师问。
大卫将上午的成交记录拖到旁边,让他按多付出去的价差,去估算恢复交易后的收益。
原先利润最好的几组订单,还能勉强剩下一点残羹剩饭。
另有几组,扣完费用甚至都达不到收支平衡。
若是卡死价格,上午那几轮测试又证明了,能买到手的交易量会大幅减少,结果照样不好看。
大卫思索着两种不同的损伤方案,手指在鼠标上停了很久。
暂停的时候,他想的是最多花十几分钟把故障找出来。
现在两个多小时过去,他连明天能不能恢复都不敢说。
对方如果今天挣够了钱就走,事情还好办。
可要是以后每个交易日都准时出现呢?
以后每做一笔这样的买卖,都要先让出去一部分利润,剩下的还未必够他们付交易费用。
大卫脑子里想着那四百八十万。
股东要是问起来,他此刻能交上去的答复,只有几份失败的交易测试,还有一张满世界亮点的地图。
“把等级提到P0。”
大卫的话说完,分析员惊讶地站直了身子。
在梅森资本内部,这个等级意味着核心业务出了重大问题,需要立刻通知能拍板的人。
报上去以后,故障原因和处置过程都要交代,当然,大卫这个负责人也躲不过去。
可他再拖下去,明天的损失仍要算在自己头上。
“把实际亏损和后面的估算分开,上午做过的测试都附上,马修那边的记录,也一并发过去。”
分析员点了点头,便立即回去整理材料。
大卫拿起手机,从通讯录里翻出一位股东的号码。
他起身走到交易室外,等电话接通后,便把事情从头到尾讲了一遍。
“暂时解决不了,今天停掉的几组,明天也可能开不了。”
电话那头问了几个问题,大卫逐一回答。
说到追踪结果时,他自己也停顿了一下,最后还是把几个小组得出不同答案的事讲了出来。
对面安静了片刻。
“你需要什么?”
大卫隔着玻璃看向交易室内。
马修还站在那幅地图前,旁边又有人把新查到的记录递给他。
“我想请亚瑟来看看。”
他握紧手机,补了一句,“您能联系上他的。”
电话那头没有立刻答应。
大卫站在原地等着,听见身后的门响了一声。
分析员探出头,将整理好的文件已经发出的消息告诉他,他点了点头,示意自己知道了。
过了一会,听筒里才传来声音。
“材料全部发过来给我,原始记录也要,我来联系亚瑟。”