清算日
曼哈顿的凌晨四点,夏洛特盯着屏幕上跳动的数字,已经十三个小时没合眼。
三十二英寸的显示器上,红绿K线像心电图一样起伏。她的咖啡杯底凝结了一圈深褐色的渍迹,手边的三明治只咬了一口,面包边已经硬得像石膏。
电话响了。
“夏洛特·陈?”对方的声音带着一丝疲惫和更多的公事公办,“我是FBI纽约分部的探员马库斯·韦德。我们需要你过来一趟。”
“现在?”
“现在。”
夏洛特揉了揉眉心,“什么事?”
电话那头沉默了两秒。“昨天下午的股市崩盘,你听说了吧?”
“道指五分钟内暴跌一千两百点,触发熔断。整个华尔街都在谈论。”夏洛特的手指在键盘上敲了几下,“官方说法是高频交易算法故障。”
“我们有三个死者。”马库斯的声音沉下去,“布鲁克林的一个程序员,皇后区的一位退休教师,新泽西的一位单亲妈妈。他们在崩盘后的两小时内,分别从各自的公寓跳了下去。”
夏洛特的手指停在键盘上。
“三个人都重仓了你前东家文艺复兴资本的量化基金。”马库斯继续说,“崩盘让他们瞬间爆仓,一生的积蓄归零。”
“这应该找证监会,或者证券犯罪部门。”夏洛特的声音很平静,“我只是个做量化分析的数学顾问。”
“证监会的系统查不出来。”马库斯说,“但你的前同事说你也许可以。来不来?”
四十分钟后,夏洛特站在联邦 plaza 一栋不起眼的建筑里。走廊的灯光是惨白的荧光色,空调声嗡嗡作响。
马库斯比她想象中年轻,三十出头,但眼袋很深。他把三份档案推到她面前,每一份都夹着惨烈的现场照片。
“爱德华·林,四十一岁,程序员。负债一百七十万。”
“玛莎·冈萨雷斯,六十七岁,退休教师。她的退休账户里有八十三万美元,崩盘后只剩两千。”
“凯伦·张,三十四岁,单亲妈妈。她儿子现在在儿童福利机构。”
夏洛特翻开最后一份档案。凯伦·张的照片里,她搂着一个七八岁的男孩,笑得眼睛弯成月牙。
“我需要交易数据。”她合上档案,“崩盘前后所有的逐笔成交数据,Level 3 的订单流,还有那三只基金的持仓变化。”
“已经准备好了。”马库斯递给她一个加密硬盘,“你有二十四小时。”
夏洛特没有回公寓。她就在FBI给她临时腾出的一间小办公室里,接上自己的笔记本电脑,开始跑算法。
数据量很大,三百七十个G。她的模型一层层剥开那些高频交易订单,寻找异常模式。
到下午三点,她什么都没有找到。
崩盘的导火索确实像官方说的那样:文艺复兴资本的一只量化基金因为一个代码漏洞,触发了连锁抛售。其他机构的高频算法识别到异常波动后,纷纷跟随卖出,形成了踩踏。
一切都是机器的本能反应。没有人为干预的痕迹。
夏洛特靠进椅背,盯着屏幕上密密麻麻的时间戳。
然后她看见了。
在崩盘开始前的三秒,有一条来自外部服务器的指令,打进了文艺复兴资本的交易系统。指令很简短,只是一串毫秒级的时间戳标记。
那个标记对应的,是即将被抛售的第一支股票。
就好像有人提前三秒知道了一切。
夏洛特坐直身体,手指在键盘上飞舞。她反向追踪那条指令的IP,却发现它经过了十七层跳板,最后消失在暗网的某个节点。
她又追踪指令的代码结构。那是一段用C++写的极简程序,干净得不像这个年代的东西。
在代码的末尾,有一行注释。
夏洛特盯着那行字,手指僵在键盘上。
注释是用中文写的:理官。
她认得这两个字。小时候在台湾的外婆家,外婆给她讲过一个春秋时期的故事:一个叫李离的法官,因为误听下属的汇报错杀了人,最后伏剑自尽。外婆说,理官,就是古代的法官。
马库斯推门进来,“有发现?”
夏洛特没有回头。“有人提前三秒知道崩盘会发生。而且这个人,会写中文。”
马库斯走到她身后,盯着屏幕上那行注释。“什么意思?这是个警告?还是有人故意制造了崩盘?”
“不知道。”夏洛特摇头,“这条指令本身没有执行任何交易,它只是打了一个时间戳。但它出现在那里本身,就不应该。”
“能不能追踪到人?”
“需要时间。”夏洛特看了看时间,“我需要回一趟复兴资本,查一下那台服务器的物理访问记录。”
马库斯皱眉,“你前东家会让你查?”
“我在那儿工作了五年,还有几个朋友。”夏洛特拔下硬盘,“明早给你答复。”
文艺复兴资本的办公室在曼哈顿中城,一栋玻璃幕墙的摩天楼。夏洛特刷卡通过闸机时,前台的保安对她点点头,“陈博士,好久不见。”
“好久不见,汤姆。”她笑了笑,“我找陈默。”
“陈博士?”保安愣了一下,“您不知道?”
夏洛特停下脚步。“知道什么?”
“陈默他……昨晚自杀了。”保安压低声音,“就在他自己的办公室里。今天早上保洁发现的。”
夏洛特站在原地,走廊的空调风吹在后背上,凉意一点一点渗进皮肤。
陈默是她招进复兴资本的。那个戴着厚眼镜片的年轻人,数学博士论文做的是混沌理论,面试时紧张得把咖啡洒了一桌。但他写代码的时候,手指快得像在弹钢琴。
“警方怎么说?”她听见自己的声音。
“还在调查。但听说是……用一把刀。”保安做了一个手势,“就在他座位上,血把地毯都浸透了。”
夏洛特想起三小时前,她还在分析的那行代码。“理官”。
“他的办公室还封着吗?”
“封着。警察不让进。”
夏洛特点点头,转身走向电梯。她没有下楼,而是按了三十七层——陈默的办公室在那层。
电梯门打开,走廊里果然拉着黄色的警戒线。一个穿着制服的警察坐在旁边,看见她站起来。
“这一层封锁了,女士。”
“我是FBI的顾问。”夏洛特掏出马库斯给她的临时证件,“需要进去看一眼。”
警察犹豫了一下,侧身让开。“十分钟。”
陈默的办公室很小,一张桌子,一把椅子,两个显示器。地上的血迹已经发黑,浸透了灰色的地毯。椅子上还搭着他常穿的那件灰色卫衣。
夏洛特走到电脑前,按了开机键。屏幕亮了——警方没有带走主机。
她插入一个U盘,启动了自己写的取证程序。陈默的电脑里很干净,都是工作相关的代码和文档。她搜索关键词“理官”。
零条结果。
她又搜索“李离”。
零条结果。
就在她准备拔下U盘时,屏幕右下角弹出一个系统通知:备份程序正在运行。她点开一看,是一个自动备份脚本,每晚十一点会把陈默的工作目录同步到一个外部服务器。
昨晚十一点。
陈默的尸体是今早七点被发现的。
夏洛特记下服务器的IP地址,拔下U盘。她站起身,目光落在陈默的椅子上。那件灰色卫衣的帽子下面,压着一本书。
她走过去,拿起那本书。
是一本英文版的《史记》选译,书页泛黄,显然被翻过很多遍。书签夹在其中一页。
夏洛特翻开。
那一页讲的是晋国的故事。李离过听杀人,伏剑自裁。
书页空白处,有人用铅笔写了一行小字:失刑则刑,失死则死。
是陈默的字迹。
夏洛特把书放进包里,走出办公室。她在走廊里给马库斯打电话,响了三声,没人接。
她改发短信:陈默死了。他是复兴资本的量化交易员,我怀疑和崩盘有关。我需要查一个服务器IP。
电梯下到一楼,门打开时,手机响了。
不是马库斯,是一个陌生号码。她接起来。
“夏洛特·陈?”一个男人的声音,很轻,像隔着很远。
“我是。”
“你刚才在陈默的办公室。”
夏洛特停下脚步,站在大堂中央。周围的人们行色匆匆,没人注意她。
“你是谁?”
“你找到那本书了。”男人的声音没有起伏,“你知道李离为什么要死吗?”
夏洛特没有回答。
“因为他知道,没有人能赦免自己。”电话那头传来轻微的电流声,“算法也一样。”
“你到底是谁?”
“下一个名单上,有你。”
电话挂了。
夏洛特看着手机屏幕,那行通话记录还在。她试图回拨,只听到忙音。
走出大楼时,曼哈顿的夜色已经落下来。霓虹灯一盏盏亮起,行人如织。她站在人群中央,却感觉所有人都离她很远。
手机又响了。这次是马库斯。
“你在哪儿?”他的声音很急促。
“复兴资本楼下。”
“那个IP地址,我查了。”马库斯顿了顿,“你猜它解析到什么位置?”
“说。”
“山西。中国山西省,曲沃县。”
夏洛特握紧手机,另一只手伸进包里,摸到那本书的封面。
“春秋时期,晋国的都城。”她听见自己说,“李离伏剑的地方。”
电话那头沉默了很久。
马库斯再开口时,声音有些涩。“夏洛特,你刚才说陈默的电脑里有什么?”
“什么都没有。但他的备份服务器可能有问题。”
“他的电脑现在还在吗?”
“在。我看了,警方没有带走。”
“不可能。”马库斯说,“我二十分钟前联系过纽约警方,他们说陈默的电脑在发现尸体时就不见了。现场只有血迹,没有主机。”
夏洛特的手指收紧。
她刚刚明明打开了那台电脑。
她回头望向三十七层的窗户。那间办公室的灯,不知道什么时候,已经熄灭了。