相关背景:本科在教授实验室与一个期货交易公司合作做过高频方面的量化分析,证券公司做量化事件驱动研究实习,随后给某平台工作写点低频交易策略,也给某外企做过自然语言处理模型,目前在美就读量化金融和数据科学双硕,参与过一个基于强化学习的交易策略合作项目,在读高频交易的书,未来也以做金融/算法/模型为部分职业目标。
这个回答主要介绍一下高频交易的概念与哲学,和分享本科时 很好的一个有成果的高频数据处理idea,仓促写成,希望大家“鼓励”后期会不断完善和更新,希望各位前辈同行们喜欢!
******在文末有时间会update一些具体的高频算法框架******
高频交易的概念与哲学:
高频交易有如下表面的特点:
程序化自动交易,高换手率,短时间需要处理大量数据,风险可控,追求统计上胜率>50%即可。
这句话怎么理解?
1. 因为速度快,所以必须程序化自动化处理,高频必用程序化交易,而程序化交易未必是高频的。
2. 因为频率高,微观结构上数据量较大(包括在多个市场上成交/取消的单),算法必须跑得快,数据结构要精心设计。
3. 因为不需要隔夜持仓,资金量可以快速周转,所以风险可控。
4. 因为交易次数多,所以胜率是统计意义上的(只要有一点点预测力,在足够大数的独立交易中会获得很高的information ratio/profit),当然总收益要覆盖交易成本。
但是高频交易的哲学不完全是速度,而是信息利用的优势:相对于普通交易者,更快的速度和微观的结构会有更多的信息,微观的交易信息。
每小时中的按分钟属第k秒的所有分钟的交易量加总
上图的那个峰顶表示在交易的最后一个小时,低频交易者的模型倾向于在第一秒下单。这种微观信息seasonal habit一览无余。
低频交易者往往更关注于资产本身,而较高频时间区间里,交易信息本身更有作用,所以说完全有效市场也只是个理想情况,按照高赞的例子就是冰山算法可以探测出市场上有没有隐藏的待出的大单,其他的高频交易策略能探测出提前做出反应的 informed trader(内幕信息),或者发现套利机会,用自然语言处理快速对事件做反应。
对于部分随机模型而言,高频交易的时间度量往往也不是我们寻常意义上的“时间”,秒分这种,更多的是基于交易量,同样1万单,日间交易和夜间交易所需时间却很不同。
很经典的一个图,对标普五百期货:
收益率的正态分布在交易量时钟,而不是正常时间中得以复现
高频交易策略因市场而异,对股票,期货,固定收益都会有不同的策略,后面有时间会补充。
但是常见通用的(著名)策略有:
1. 简单做市策略:吃价差 bid ask spread. 同时挂双向的limit order,这是最平凡的高频策略,但也需要一定的设计流程,比如根据有没有成交,当前position,市场价格和Threshold来决定是cancel, reset还是counter等。
2. 各类欺诈predator策略:这种策略往往被视为扰乱市场会罚款,但是又很难举证,因为市场上撤单很常见.,举以下几个例子:
Quote Stuffing 高频的下单撤单人为挤压其他竞争算法的下单,从而造成人为的延迟,获得价格优势(预测有大单进来时能提前买入)
Quote Spoofing 下一个单方面的大单然后撤单扰乱价格后然后对反向用密集的小单获利, 这样可以引诱同方向的bid 提高价格 或ask 降低价格。
Liquidity Squeezer,在探测到大单时同向挤压流动性,逼高/低价格
3. ticker trading algorithm:可以识别大单,有很多mutual fund或者index tracker fund需要调仓大批量交易的时候,他们往往会切割大单并分散交易,比如高赞中详细解释的如何识别ice berg order。
4. Event arbitrage 或者 事件/新闻驱动,美国很多基金都很注重近来自然语言处理,为的就是让程序反应上能比人快,比人更高效的处理大量的文字信息。
例一:用最近邻,或者多元插值的方法,根据历史的训练数据(比如连续出现的n个order),寻求预测最接近的可能的event。
5. Statistical arbitrage 统计模型套利,这里面话很长,各种统计模型和经验都有应用后面有时间慢慢补充。
例一:识别rounding,很多手动下单的(GUI)的都有rounding功能,那么如果在某个特定时间出现大量round numbers交易量,那么意味着短期市场会有某种趋势,可以做个指标。
6. 当然,国内证券公司做市商还有一个很有趣的策略,他们只做市研究部门觉得好的股票,买入一部分等涨…. 也不失为高频低频结合哈哈哈。
python专用分割线#######################################################
下面就进入一个超级有意思和成效的高频交易数据研究,也算是我对自己两年前的项目的总结,随后会把github链接po上:
《用Benford’s Law和相对熵方法对期货高频交易特性的探究》
简单概括就是验证期货高频交易量数据是服从本福特定律的,并根据其服从程度(相对熵)构建了一个异常指标,可以用于探测市场扰乱程度。
有36个期货品种的1s,3s,5s,15s,30s的高频数据
数学表达上对于 本福特 定律的公式表示如下:
d代表首字母数值,从1到9
本福德定律的重要应用就是它可以探测人为伪造的欺诈行为, 因为它可以检测数据的生成行为是不是有某种刻意的不规则出现。尤其是交易场景下,交易量往往完美的符合本福特定律的假设。
能够用Benford 法则来进行分析的数据应该符合以下条件:
① 数值既不是完全随机的,也不能过度集中于某个区间
② 数值不能存在上下限
③ 数值在一个很宽的范围里连续变动,不存在间断点或间断区间;
④ 数字没有被特别赋值;
⑤ 数值的形成受多种因素的影响,是多种因素综合作用的.
而Theodore P. HillSource 基于从随机选取的随机分布证明了本福特定律的生成条件,使得本福德定律有了更松的假设条件,虽然不是所有的数字都一定符合本福德分布,比如那些服从均匀分布,正态分布的数字,如果数字的生成满足随机选择分布并随机的从每个分布中抽取样本,那么我们所生成的数的集合会收敛到本福特这个集合中所有数都会收敛到本福特分布即使单独的分布不遵守本福特分布。
而我们所知当数字的生成存在人为构造的情况时就不会符合本福特定律。因此,本福特定律可以作为大数据分析手段的一种思路,一旦我们推定数据的生成是自然随机的, 那么它就应当符合本福特定律,如果一个数据源符合本福特定律,则随机的均匀删除数据不会让本福特定律无效,因为数字根据其占比得到等比例的下降,但如果该数据源是虚假的或者有人为数字的掺杂和偶然的系统性删除泄露,就必然会打破本福特定律的分布,此时就脱离了自然随机条件。已知的经验表明人们很难复制他们的数据以达到本福特定律的情况,因为第一他们往往不知道本福特定律的存在,第二他们必须在保证数字本身在符合现实意义的条件下以本福特定律的分布出现。
本福特分布
相对熵可以用来衡量两个概率分布之间的距离,我们这里计算在某一时间区间内的交易量首位数字的经验分布和本福特分布的差异。
相对熵算法不作过多具体描述,可以参考 wiki 。
于是我们根据36个期货品种的数据计算相对熵指标:
如何衡量我们的分布是不是符合本福特定律?我们可以用纯均匀随机分布即每个数字开头概率均为1/9的相对熵相比,我们在这里将随机均匀分布作为基准。我们的熵值越小于0.2306接近0,表明我们的分布和本福特分布的距离越小,和均匀分布有本质的区别,越不符合均匀分布。
很明显可以看出,大部分时候所有的品种的相对熵值都远小于均匀分布benchmark 0.2306
##################################################################
Section 1: 适用于股票市场上的下单执行算法
对于broker来说一个交易执行算法的交易标的,交易方向(buy/sell),交易数量和开始时间往往是给定的,而其可以改变的是具体的交易速度和交易的具体平台,将大单切片并在交易时控制市场流动性,在不同的交易场所进行配置(public exchange & dark pool)。
对交易算法结果的衡量( post trade transaction cost analysis)是多维的,往往包括:完成交易的比例(fill rate),完成交易的类别(passive, aggressive or dark),滑点(与vwap或者arrival price等相比较),交易速率是否稳定(fixed participation rate)等等。这些目标是互相冲突的,但是cost-sensitive的往往更关注滑点slippage,滑点与当前spread,交易速率,交易时间和价格波动是呈正相关的(这部分可以建模)。
比较基础的下单算法包括:TWAP,VWAP,POV及其变种等,往往是给定一些固定的参数下单,知乎上也有详细介绍,这类算法的弱点是pattern固定,比较容易被识别出来。
如果考虑到 impact - risk 平衡的话,如下图一次性买2000股会给市场价格一个较大的冲击,但是分两次购买又会承受市场带来的不确定性。
价格受到购买的冲击
于是 implementation shortfall模型就可以根据市场价格或者其他参数动态的调整交易率,考量的参数包括对等待的风险厌恶的程度等。
更先进一些的交易框架包含信号函数和反应函数,这种适应性的框架往往基于前面的基础算法, 而不是单独出现的。
信号函数处理一定历史区间交易数据并生成决策信号给反应函数,反应函数读取了信号后给出反馈。
常见的信号有:1. 交易数据在短时间短的序列自相关性度量(大单切割算法生成的).2.Order imbalance ,买盘和卖盘数量的不均衡。3. 价格的趋势或者回归。4.Volume clustering 交易量的聚集。5. 和相关标的的协同变动产生相对价值的变化等等。
常见的反馈包括:1. 增加/减少或者取消后面的下单;2.更新下单limit价格; 3. 在不同的交易所重新分配;4. cross the spread (一般来说bid always < ask,如果想快速成交,就得可以按ask买或者按bid卖)等等。
下面对一些信号的构建做一点介绍:
衡量交易相关性:一个思路是观测当前价格p 与 mid price之间的关系,大于mid price 就是 1 小于是 -1,然后做游程检验,ACF自回归等等,也可以构建指标 比如 p-bid/(ask-bid)等等。
衡量order imbalance:一个思路是根据当前 bid ask 的 order volume算一个加权价格,比较这个价格离 bid 和 ask 的距离,这样就可以有效的衡量 买卖盘的不平衡程度。 |