【核心技术】高精度逐笔回测篇之序言 

wei-jianan/核心开发

应用场景

量化交易有各种流派和风格,不同流派带来了不同的关注点。但总的来说工作流分两个步骤,策略/因子研究/alpha的挖掘, 和实盘交易/具体的执行,当然研究和实盘之间,为了填平未知带来的风险,会存在不少过度阶段。 

多年观察发现,研究员/策略师/交易员的研究方式,倾向于在excel/dataframe里面折腾,使用一堆roll,apply函数,乘上t+1 的收益率在取对数,连加,基本上就可以初步判断辛辛苦苦挖掘出来的东西有没有alpha。当然交易成本,执行细节,未来函数(机器学习管这个叫数据泄露),过拟合,市场风格转换(机器学习社区有时管这个叫domain shift)等等问题先暂且不谈。  有些小型机构,或者工程能力有限的研究人员一方面没有意愿,另一方面成本确实有限,就把刚刚一通代码折腾出来的因子/特征等等,按照特定的if else 规则或者 正则化取平均,又或者再加个 ml模型训练的流程,组合起来形成信号下单的逻辑,写到实盘的代码里。至于赚不赚钱,到底能赚多少,策略的收益率 波动率特性,就交给老天保佑了。

未知-风险存在明显的负相关关系。研究员/策略师/交易员兴奋的结束了与excel/dataframe 的战斗时。 alpha的未知达到了最高点,而风险,没上实盘有什么风险?最大的风险就是光领工资不赚钱被裁员的风险。那么之后为了尽可能低风险的把钱赚了,可以有如下步骤:

1)把pandas与numpy代码转化成 标准化因子评估框架的代码,用ICIR之类的评价指标评估因子价值。

2)把因子/特征 和信号或目标持仓结合起来,标准化的回测。

3) 单子有可能拆的很细,因子产生的信号有可能强推流动性差的金融产品,因子的频率和时效性有可能很高等等 ,交易成本(税+佣金),冲击成本。 综上几种情况, 很有有可能一个看起来有alpha,实际上有alpha的因子/特征  变换成一个个的交易单,就是无法打平执行成本,因而亏钱。  因此需要更高精度,更细力度到每笔下单的回测,能够很大程度上把冲击成本,延迟,交易所的撮合机制模拟出来,从而获得精确的执行成本和尽可能真实的回测收益。

4)paper trading。把策略上实盘,下单时候打个当前价格的日志。最终综合日志分析,获得一个纸面上交易的pnl。 缺点是,依赖延迟和订单排队位置的maker策略无法模拟。

5)小资金实盘。 基本能真是的构造出策略的pnl,缺陷是目标仓位过大的情况,拆单的执行无法得到好的模拟。

以上5条,严谨点可以依次执行,随着alpha的未知性 逐渐降低, 头寸与知识产权暴露的风险逐渐增加。其中4的缺陷足够大,开发与分析成本又足够高,个人认为可以删去,接下来也不会涉及。

用户需求

那么量化的研究这个事儿在设计之处就需要满足一些普遍的原则,能够尽可能的提升效率,并降低使用成本与风险, 其中有一些原则有可能互相拮抗,因此需要权衡取舍。但既要又要才是技术进步的体现,所以全部列出,成年人不做选择,尽量全要。具体总结如下:

1.尽量易于编写,方便码力不足的研究人员轻松上手(固定预测的horizon,比如说每15分钟预测一次,即调用一次某个函数,或者A股比较常见的每日盘前调用一次某个回调函数)。同时又需要足够的自由度,可以满足任意类型策略的编写(想用ochlv数据也行,想用逐笔数据交易也行)。

2.与实盘代码尽保持一致,避免代码转写带来的错误与知识产权暴露风险。

3.由于成熟机构会尽可能拆解工作流,专人专事,互相依赖。因此实盘和回测都需要满足,因子挖掘,因子组合, portofolio 优化,仓位执行等等抽象。 回测不光是针对策略实现,算pnl 夏普率, 也需要支持因子生成和 因子组合的实现 以及做相应的表现评估。

4.尽可能模拟出执行与撮合细节,运行回测后得到的pnl精确的如同执行过实盘。如果一个策略实盘了一个月的pnl,和把这个策略拿这一个月重新回测一遍的pnl相差无几。那么可以说回测的精度是做到家了。 

5.要够快。 且根据策略的计算复杂度可快可慢。 一个回测速度跟实盘一样的 回测系统价值极其有限。从严谨的角度出发,以上5条可以依次执行,随着alpha的未知性逐渐降低,头寸和知识产权暴露的风险逐渐增加。其中,第4条的缺陷较大,开发和分析成本也较高,因此我个人认为可以删除,接下来也不会涉及。