写在前面: 2016年7月30日,交易门的主角,高频交易员李奥应香港受交通大学香港校友总会之邀,做了一场题为《量化金融与高频交易》的主题分享会。征得李奥同意,交易门独家首发这次分享会的内容。本讲稿经过李奥修订,谢谢李奥。
图1
图2
图3
做市策略
做市商策略主要目的在市场上提供流动性,去Bid/Ask挂单,让Bid/Ask收窄,赚取中间的差价。听起来很简单,但是有很多模型啊,Risk Control啊,IT上面的军备竞赛啊。 就是说,这里面的几个大佬都做得比较好。 里面有很多东西可以谈,比如怎么去控制你的持仓,你的风险。还要做很多 Prediction。怎样去Ppredict Volatility和Price。这里面IT问题非常重要,因为竞争非常激烈。怎么提供更快的报价,怎样更快的撤单,都是非常重要的问题。 IT的成本很高,因为大家都在竞争,大家都想更快,从Co- Location,到FPGA,现在微波都上了。竞争很激烈。正是因为门槛很高,所以剩下的几家都做得不错。 对于普通投资者来说,做市的存在,让他买卖的差价更小,是有好处的。 图4 这是去年8月12日我的一个策略在上证50股指期货的表现。那天整个市场的交易量22.5万手,我的策略占到4.1%(9180手),P&L 也还行,Drawdown也比较小。Capital需求也很低,一整天只需要50万本金,赚了21万多,收益43.5%。 去年7月份,因为股灾,中金所开始在股指期货上对部分投资者进行限制。可以看到,7月份这几天Bid/Ask Spread有拉大的迹象,到9月7日,中金所开始对投机户进行限制,持仓保证金提高至40%,平仓手续费提高至万分之二十三,单个品种单日开仓交易量不超过10手。市场的成交量降低到不足以前的1%。因为做市策略不好做了,10手做市策略根本没法玩儿,有的被关掉了。大家可以看到Bid/Ask Spread的陡然变化。 图5 图6 所以做市策略可以增加市场流动性,让Bid/Ask Spread收窄,买卖量大时不致于有很多滑点。 做市策略需要大概估计一下,什么是更加合理的价格。股指期货做市,有人会用一篮子股票去预测股指的合理价格。
统计套利 这里面每个都是很大的Topic。我只是大概讨论下。 统计套利涉及到概率、数据挖掘、建模,交易执行,怎样做Data Cleaning。 数据挖掘非常重要,这个处理不好有时候是非常头疼的事情。有一句很经典的话叫做:Garbage in,Garbage out。很多Quant很多时间都花在数据处理上。有时候会发现非常激动人心的结果,回头发现数据搞错了。 一个最简单的套利模型就是历史价格的波动率,在两边加上一些执行区间。比如奶粉,花100块钱从香港买,到内地120块钱卖掉。中间你花了10块钱路费,最后挣了10块钱。这就是你的套利空间。 又比如黄金,国内外市场都有标准合约,理论上价值是一样的,拿出来都是两块金条。但是价格会有波动,我们去算这个价差,如果发现它偏离历史统计区间,譬如Brexit的时候,会发现中国的黄金便宜了,美国的黄金贵了。那我们可以去买入价格偏低的,卖出价格偏高的进行套利。当然,实际操作中,会有流动性等因素造成的影响,这需要一些经验。
预测 通过过去的市场数据和当前市场环境的比较,预测未来的价格走势:Price=a+b+c。这个“未来”可以是下一秒,下一分钟,下一个交易日,下一周,下个月。如果你的模型预测很准的话那就超NB了,不管是下一秒、下一分钟还是下一周。只要你的模型很有效,就很NB。这不是一个很容易的工作,需要基础,经验。这个我也还在学习,没有太多经验。 图7 这个基本的过程是先把数据搞好,再搞清楚,到底是哪些因素在影响市场。 你可以很快开始,拿个均线搞一下,可能很快出结果,但你模型的稳定性到底能稳定多久,这都需要去不停的Tuning,不停循环。你去Training、Evaluate这个Model,然后去Optimize你的Factor。 当然现在有很多Factor,有些人的做法就是,扔进去500个Factor。他的模型可以告诉他哪些Factor有用,哪些Factor没有用,也可以把很高Correlation的Factor自己去除掉。但这个东西,我还在学,我没有太多经验。我只是知道有这些做法。 一个Super Simple的——并不是说简单就不管用,最简单的一个预测模型,就是价格会回到均线。均线是什么周期的,自己去琢磨。这个中间的复杂性,大部分来自Data。Model的话,R里面有很多Package,可以帮你做到还不错的自动化。很多Indicator可以自动,图也很有帮助。 Data和Factor都需要不停琢磨。再去套这些Model。
这两个案例就是说,IT很重要,可以让你亏很多钱(“光大乌龙指”是赚钱了,但被罚了很多钱)。 图8 IT System主要分为上面四个部分。 Price Data相对简单一点,更多的像Fundamental Data、Unstructured Data就比较复杂一点,需要很多的程序员码代码,怎样去收集、格式化、统一化、Access。作为一个Quant,我就想拿某天的数据去画个图出来。我们现在基本上就是这个状况,很容易就可以拿一堆数据做一堆事情,另一端的Quant就写很少的代码。因为我们把很多的数据结构、数据接口都统一化。不管是用C++、C#,还是从Scala,拿这个数据都是同样的格式,这样就会很方便。 当然你不能错,你的容错和你检查错误的能力也要非常高。之前我们就出现过这样的情况,回测非常好,天天都赚钱,结果发现数据错了。非常愚蠢的错误。经常发生,相信以后也会发生。不过以后再看到很NB的回测结果,我们会更加怀疑。 这个Execution就是各种API,各种market access,各种风控。在高频领域,速度是非常重要的。因为很多数据都是公开的,很多人都看得到。当很多人都看到一个机会的时候,只有最快的人可以拿到它。每个市场都有不同的API,也有统一的协议,比如Fix协议,但不一定是每个交易所都支持,但是Fix协议本身也比较慢。高频的话一般都是C++、FPGA的下单模块,我们一般都是C++、FPGA。我们现在有小部分策略是放在FPGA上面的,不通过OS。 Back Testing,有时候Quant想出来的东西,可能你的回测系统还不支持,你需要去改回测的框架。 Visualization很重要的。你不能说,给我生成一堆数,看不来的嘛。看到图更加一目了然。我们花了很多力气在Scala里面画图,在R里面画图。因为一堆图和一堆数据解释是不一样的。 回测的速度也很重要。比如回测一个策略,一年的数据,你需要一个星期。谁去等一个星期看你的结果啊!一分钟可能还能接受一点。策略里面的参数存在一个迭代的过程,比如参数,我想从1试到100看看怎么样。你每个测试用5分钟,优化的时候我可能有10万个参数需要测试,那就不能等了。 这里面我们也做了很多优化,比如怎样去拿数据,怎样去缓存,在中间提高它的性能。以前,我在上一家公司还做了一些云计算的尝试,把一些回测的Engine全部Distribute到很多服务器上。这样的话,一个Request过去,有很多机器同时在跑。你可以把它做到互相不影响。每个参数都是独立的。都可以并行地去计算。 还有一个就是Monitoring。这里面很多自动化在里面。又有很多策略。需要人工盯着不太现实。 怎样去Monitor风险,怎么样去Alert,这也是一个很重要的环节。像我们现在的策略都是自动化运行,所有策略的监控,每个策略的风险水平不能超过多少,超过会报警。特别是我们还交易夜盘,让程序员经常熬夜的话,也不太现实。所以如果有Critical Error,就会直接打电话到手机上。现在我们就会轻松很多。 当你交易的品种很多的时候,基本上没有可能都是人在那里盯着,所以要做很多监控。
Flash Boys
Quantitative Trading: How to Build Your Own Algorithmic Trading Business
The Quants: How a New Breed of Math Whizzes Conquered Wall Street and Nearly Destroyed It
The Problem of HFT - Collected Writings on High Frequency Trading & Stock Market Structure Reform
Inside the Black Box: A Simple Guide to Quantitative and High Frequency Trading
Algorithmic Trading: Winning Strategies and Their Rationale
Quantitative Trading with R: Understanding Mathematical and Computational Tools from a Quant's Perspective
http://numericalmethod.com/courses/introduction-to-algorithmic-tradingstrategies-2011-2013/ https://www.quantstart.com/articles/beginners-guide-to-quantitative-trading https://www.zhihu.com/publications/nacl/19550372