高频交易策略的思考(五)
转载自FMZ.COM,作者:小草
上篇文章初步介绍了各种中间价的计算方法,并给出了一种中间价的修订,本文继续深入这个话题。
所需数据
订单流数据和十档的深度数据,来自于实盘收集,更新频率都是100ms。实盘的只包含买一卖一盘口数据是实时更新的,为了简洁,暂时不用。考虑到数据太大,只保留了10万行深度数据,并且把逐档行情也独立为单独的列。
先看下这20档档行情的分布,符合预期,距离盘口越远,一般挂单也多,且买单挂单和卖单挂单大致对称。

把深度数据和成交数据进行合并,方便评估预测的准确性。这里保证成交数据都是晚于深度数据,在不考虑延时的情况下,直接计算预测值与实际成交价的均方误差。用于衡量预测的准确度。
从结果来看,买一卖一平均值mid_price的误差最大,改为weight_mid_price后,误差立刻小了很多,用调整加权中间价又改进了一点。昨天的文章发出后,有人反馈只用I^3/2,这里检查了下,发现结果更好了。思考了下原因,应该是事件发生频率的不同,I在接近-1和1时是低概率事件,为了修正这些低概率,反而把高频率发生的事件预测的不那么精确了,因此,在更照顾高频率事件的情况下,我又调整了下(这里是纯粹的试出来的参数,实盘参考意义不大):

结果又稍好了一些。上篇文章说过,策略应该用跟多的数据来预测,在有了更多深度和订单成交数据的情况下,纠结与盘口能获得的提升已经很弱了。
考虑第二档深度
这里用上一篇的思路,考察某个影响参数的的不同取值范围,成交价的变化来衡量这个参数对中间价的贡献。如第一档深度的图,随着I的增加,成交价接下来成交价越可能正向变化,这说明I做了正的贡献。
第二档用同样的方式处理,发现虽然效应比第一档小了一些,但任然不容忽略。第三档深度也有微弱的贡献,但单调性差了很多,更深的深度基本没有参考价值了。
根据贡献程度不同,这三档的不平衡参数,分配了不同的权重,实际检查对于不同的计算方式,预测误差都进一步下降。

考虑成交数据
成交数据直接反映了多空的程度,毕竟这是真金白银参与的选择,而挂单的成本低很多,甚至还有故意挂单欺骗的情况。因此预测中间价,策略要重点考虑成交数据。
考虑到形式,定义订单平均到达数量不平衡VI,Vb,Vs分别表示买单和卖单的单位事件内平均数量。

结果发现短时间内的到达数量对价格变化预测最为显著,当VI处于(0.1-0.9)之间时,与价格负相关,而在区间之外反而与价格迅速的正相关。这提示着,当行情不极端时,以震荡为主,价格会均值回归,当极端行情出现时,如大量的买单压过卖单,此时会走出趋势。即使不考虑这些低概率情况,简单假设趋势和VI满足负的线性关系,对中间价的预测误差又大幅下降。式子中的a代表系数。


综合的中间价
考虑到挂单量和成交数据都对中间价的预测有帮助,因此可以把这两个参数合并在一起,这里权重的赋值比较随意,也没有考虑边界的条件,极端情况下,预测的中间价可能不在买一和卖一之间,但只要误差能够减小,也不在意这些细节了。
最后预测的误差从最开始的0.00487降到了0.0043,到这里就不继续深入了,中间价可挖掘的内容还有很多,毕竟预测中间价就是在预测价格,大家可以自己尝试。
总结
本文结合深度数据和成交数据,进一步改进了中间价的计算方法,本给出了衡量准确性的方法,提高了对价格变化预测的准确性。整体上各种参数都不太严谨,仅供参考。有了较为精确的中间价,接下来就是实际应用中间价进行回测了,这一部分内容也很多,先暂停一段时间更新。