参加Jane Street举办的Electronic Trading Challenge是怎样的体验?

关注者
227
被浏览
5954
谢邀。上个周末刚参加了 ETC 今年的 Tsinghua Event。三只大三狗,大作业的汪洋大海之中。成绩是 19 支队伍的第 11。本文也很水,预警一下( ̄(工) ̄)

## 体验

是怎样的体验?简言之就是新奇、有趣。我都想开个户玩真的了。还有便是认识到了差距,感觉自己好菜啊( ̄(工) ̄)

## 比赛概况

编写程序在虚拟市场里交易。市场上有 4 支个股、2 个基金,还有国库券。除了参赛队之外,市场里还有做市商。交易所提供每种证券的订单簿和订单成交信息。每个交易日持续 5 分钟,每天都是两手空空从头开始,每天结束后系统按照某种公允价值计算盈亏积分。比赛从上午九点持续到晚上九点,划分为一个一个 5 分钟,选手可以随时修改程序,加入或退出市场。

## 我们队的套利策略

我们首先花了点时间通读文档。一名队友根据交易所的协议编写 API,另外两人先开始研究怎么赚钱。因为暂无 API 可用,我们就用 nc 命令强行手动下单,结果一单亏了 2 块钱,这 2 块钱使我们队一连几个小时都以负的积分排名垫底……好气哦。

基金可以和对应篮子直接互相兑换,无论价格如何,只收固定的手续费。我们利用的就是这里面的套利机会。例如,X 能兑换 2 A + 3 B + 2 C。某一时刻 X 的买入价是 9,A 的卖出价是 2、B 的卖出价是 1、C 的卖出价是 3。那么我就可以花 9 元买入一个 X,兑换成 2 个 A、3 个 B、2 个 C,然后分别卖出去,得到 2\times 2+ 3\times 1+2\times 3=11 元。从左手搬到右手,9 元就变成了 11 元,只要兑换的手续费低于 2 元,我就赚了。

实际的价格并不是常数,而是数量的一个分段线性的函数。这个函数可以根据订单簿计算出来。对于买方报价,各段斜率是递减的;对于卖方报价,各段斜率是递增的。

Buys         Sells
Price Volume Price Volume
8     3      9     4 
7     2      11    3
6     2      12    4
4     4

随便编了个数字例子。对于给定的证券,买方报价总是低于卖方报价的,否则就直接成交了。X 的价格满足这个关系,ABC 的价格(A、B、C 的价格的加权和)也满足这个关系,但是 X 的价格和 ABC 的价格之间就不一定了。它们都会波动,很可能存在某些时刻,X 的价格和 ABC 的价格不匹配,这叫市场的瞬时无效性。


ABC 组合的曲线是用 A、B、C 的三条曲线按比例叠加得到的。

上图示意的情况下,我们可以买入 A、B、C,卖出 X,赚取差价。阴影部分就是机会啦。在横轴上找到一点,使买入 ABC 的总价与卖出 X 的总价之间的差额最大。如果这个差值大于手续费,我们就可以动手啦。同时还要关注反方向 X Sells 和 ABC Buys 两条曲线,以发现反方向的机会。

为完成这样的交易,需要同时盯着 4 组订单簿,随时更新 10 个总价格函数。每次操作要同时下 5 个订单。价格差转瞬即逝,这种事情显然只有程序能做。

说实在的,策略很简单,模型也很简单,但我们实在是太菜了。大概上午十一点开始写,晚上五点才把它调试好上线。在此之前我们队只是简单地倒卖国库券,每个交易日的收益徘徊于两位数;后来 @TACC叶曦 做了几个我搞不懂的策略,提高到几百,但是波动似乎很大。等到这个套利策略上线,收益就稳定在一千元左右了。

## 差距

凭着这个套利策略,在比赛的最后几个小时,我们的排名上升了 3 位。后来我们闻说江湖传言,前几名的队伍每个交易日的收益都在一万元以上(评论区指为七千多一点)。数量级上的差距,确实难以望其项背。

## 收获

打了一整天酱油,反正三顿饭都很不错。连续十个小时写代码,感觉很爽的。要说收获,也就是见了见世面吧,体验了一下 Hackathon 这种形式,对证券市场有了些感性认识。