光标在文件名那行闪。一闪一亮,半秒一次。
aurora_v1.py
八个字母加一个点加两个字母。Aurora。极光。北方夜空里出现的光——不是太阳,不是月亮,是太阳风撞进地球磁场之后在高纬度的大气层里点亮的。哈尔滨的冬天有时候能看到——不是每年都有,条件凑齐了才有:太阳风够强,磁场够弱,天够黑,人够耐心。大二那年冬天在宿舍窗边看过一次——绿色的光幕从天顶缓慢移过来,像一块巨大的布在风里抖。室友们都跑到阳台上看,王强站在最外面,仰着头,脸上被极光照得发绿,他说:"这玩意儿跟修车没关系。"
我敲了回车。文件建好了。空白的编辑器窗口,光标在第一行第一列。一闪一闪的,像在等。
白天还在维护智水平台的旧项目。账上的钱又少了一点——上个月只接了一个小单,给隔壁区的一个水厂装了六只传感器,收了两万块。两万块够发半个月工资。合伙人没说散,但也没说不散。他每天来办公室坐到下午五点,然后出去见人——找新投资人,找新项目,找新的活路。有时候晚上十点才回来,回来的时候带着一身烟味和啤酒味,脸上看不出结果——不知道是谈成了还是没谈成,他的表情永远是那个样子,嘴角平的,眉头平的,像一根没有坡度的管。
五个人现在剩四个了——又走了一个,做前端的,去了腾讯。走的那天他请所有人吃了一顿饭,在楼下的湘菜馆,点了六个菜一个汤,花了两百多。席间没人提智水平台的事,聊的都是腾讯的待遇——股票期权、免费早餐、十八薪。他走的时候和我握了一下手,手心有点汗,说:"你那个算法挺厉害的,可惜了。"可惜了——两个字像一枚钉子,轻轻敲了一下,没敲进去,但留了一个印。
我白天写的代码是维护旧系统的——修传感器的数据接口,改面板的显示bug,加一个导出Excel的功能。这些代码不会让智水平台活过来,但能让它还没死透的时候看起来还像个能用的东西。像给一根已经断了的管子缠几圈胶带——水还是漏的,但至少漏得慢一点。
晚上写的代码是新的。
不是管网优化程序。不是地图路线规划。不是智水平台的数据面板。
一个交易程序。
Aurora的第一版从双均线策略开始写——上个月回测跑通的那个一百二十行的骨架。但现在不是回测了,要写成实时运行的程序。回测是事后验证——历史数据都在那里,程序从头跑到尾,跑完看结果。实盘是事中决策——数据一行一行地来,来一行判断一次,判断完了就要行动。行动不能反悔——买入就是买入了,卖出就是卖出了,和拧开阀门一样,水出去了就回不来了。
五百行。
五百行Python代码。从import到最后一行,五百行。五百行不算多,但骨架完整。第一次写管网程序的时候是边想边写,写了八十行不知道下一行写什么。现在不是了——现在先想骨架,再填肉。
骨架是这样的:
数据模块。从交易所的接口拉实时行情——价格、成交量、买卖盘口。拉下来的数据存在内存里。数据是输入,是一切的起点。没有数据的时候程序等着。
策略模块。双均线交叉——五日均线和二十日均线。交叉产生信号,信号驱动决策。这一块是算法的核心。输入变了,问题也换了,但还是要在一组数据里找出下一步。
仓位模块。每次交易买多少?不能全仓。按账户总资金的百分之二十开仓,剩下的留着等下一次信号。百分之二十不激进,也不漂亮,但有余量。
止损模块。亏损超过百分之五就平仓。止损不是认输,是给下一次机会留本金。赵启明在电话里说过这句话。
执行模块。信号来了就下单。下单的方式是调用券商的接口——API。买入、卖出、撤单。执行要快,信号不等人,价格在变,慢一秒价格就变了。
五百行。五个模块。数据、策略、仓位、止损、执行。
Aurora。极光。
为什么叫这个名字?我不知道。手指敲键盘的时候,这个名字自己从脑子里冒了出来。
极光是北方天空里的光。哈尔滨的冬天,零下三十度,抬头看天的时候偶尔能看到。绿色的、紫色的光幕在天顶缓慢移动,像一块巨大的布在风里抖。看到极光的时候人都会停下来——不管在干什么,都会停下来抬头看。因为那不是常有的东西。条件凑齐了才有。
Aurora也是。不是每次运行都会赚钱——7.2%的年化收益意味着有些月份赚、有些月份亏,但一年下来是正的。条件凑齐了才赚——市场有趋势的时候赚,市场横盘的时候亏。和极光一样:太阳风够强、磁场够弱、天够黑,才看得到。
北方天空里的光,南方方向写的代码。哈尔滨的冷,深圳的热。那些年走过的东西,好像都落进了这个文件名里。
凌晨四点。代码写完了。
五百零三行。比预计多了三行——止损模块里加了一个日志输出,每次触发止损的时候写一行记录到文件里。记录不是给程序看的,是给人看的。人需要知道程序做了什么、为什么做。
我盯着屏幕。aurora_v1.py。文件名在最上面的标签栏里,白色的字在深灰色的背景上。光标还在最后一行的末尾闪——半秒一亮,半秒一暗。
Ctrl+S。保存。
右下角弹出文件大小:12KB。
十二千字节。管网优化程序的三千行代码编译出来的可执行文件是八百多KB。百度地图算法的路径优化模块代码库是十二MB。智水平台前后端加起来快一个GB。
12KB。比管网程序小,比百度代码小,比智水平台小得多。但12KB里装的是一个完整的交易程序:数据、策略、仓位、止损、执行。
标签换了,逻辑没换。输入数据→算法处理→输出结果。水是这样流的,车是这样走的,钱也是这样走的。
我靠在椅背上。机房的服务器还在转——嗡嗡嗡,和智水平台跑数据的时候一样的声音。但服务器跑出来的数据已经没有人用了,那些水压、流量、水质的数字还在屏幕上跳,跳给空气看。
Aurora不一样。Aurora的输出不是给人看的——是给市场执行的。程序发出信号,信号变成订单,订单变成交易,交易变成盈亏。输出直接变成行动,中间没有人的判断。就像管网优化程序算出了最优管径,管径直接变成了采购清单——算法替人做了决定。
关掉编辑器。屏幕暗下来,机房的黑暗漫上来。服务器的风扇还在转——嗡嗡嗡,匀速的,像一个不知道累的人在工作。
站起来的时候膝盖咔嚓响了一声——坐太久了。走到窗边。深圳五月的天快亮了。不是哈尔滨那种亮法,哈尔滨五月的亮是从地平线上一刀切上来的,天一下子就白了。深圳的亮是慢慢渗的,先是东边的楼顶变灰,然后变青,然后变白。
极光不会在深圳出现。纬度太低了。极光只出现在北方——高纬度、强磁场、冷。深圳什么都有,就是没有极光。
但Aurora不需要极光出现才能运行。Aurora需要的是数据——价格数据、成交量数据、波动率数据。数据来了,算法就跑;信号出了,程序就执行。
不同的数据。同一个文件。
我看着窗外慢慢变亮的天。12KB。五百零三行。aurora_v1.py。这个文件现在是世界上唯一的一份——在我的硬盘上,没有备份,没有上传,没有别人看过。它很小。但每一行下面,都压着之前写过的那些代码。
天亮了。深圳的天白得没有颜色——不像哈尔滨的日出,哈尔滨的日出是红的、橙的、金的,颜色烧在天边像炼钢炉的火口。深圳的天亮就是白——白得像一张没有写字的纸,等着数据落上去。
我回到工位上,把笔记本翻开。蓝色钢笔在最后一页写了一行:
Aurora v1。500行。12KB。开始。
"开始"两个字写完,笔尖没有停顿,但也没有画句号。没有句号——因为这才刚刚开始。