前言
多因子模型是传统市场资产定价的重要理论基石,同时也是金融实践中非常重要的组成部分。基于这一模型,研究者们构造了大量因子,用于寻找高估、低估的资产进行交易并从中获利。
多因子模型最广为人知的实践就是在股票市场。投资者基于基础数据,计算因子,构造投资组合并试图获得长期稳定的回报。然而,这一实践在数字货币市场还非常早期。由于数字货币市场长度较短,数据数量有限,高质量、可交易的标的也不多,因此,大量的量化研究依然关注择时领域。
本报告搭建了一个数字货币市场的因子选币框架,并在这个框架的基础上,使用深度学习的方法计算因子。本报告是crypto高频量系列的收官之作,也是多因子选币系列的首篇。报告后续由以下几部分构成:第一节介绍因子选币策略框架;第二节介绍报告使用的模型;第三节对模型的实证结果进行讨论,生成因子;第四节基于实证结果,构造投资组合;最后总结。
1 因子选币策略框架
1.1 数据获取方法及格式
报告使用binance的基础交易数据进行训练。我们在网站上(https://data.binance.vision)能够获取到币安自2017年以来的分钟级K线数据。
网站提供binance历史较久的各个市场的K线、聚合成交、逐笔成交数据。本文后续研究仅使用K线数据,且在选币策略中,我们需要确定一个交易单位,在数字货币市场这个交易单位毫无疑问,一定是USDT。因此只需获取所有USDT交易对的分钟级K线数据即可。
在获得数据后,我们将分钟级的开盘价、收盘价、最高价、最低价、成交量、成交额整理成时间×币种的格式,后续的所有操作都在此格式下完成。
1.2 选币空间
本报告无意从资产定价的理论推导出因子投资的逻辑,而是仅从投资实务出发,梳理因子选币的策略框架。如读者对资产定价及因子投资的理论感兴趣,可参考John H. Cochrane的《Asset Pricing》一书。
从因子选币的实际出发,选币之前首先要定义一个选币空间,从这一空间中选币并获利。这一步至关重要,有时我们发现某一些币价格极度不合理,似乎存在套利空间,但实际上手交易时却发现因种种原因无法成交,那么这一看似存在的投资机会实际就并不存在。
出于标的数量和历史数据长度的考虑,我们选择币安的现货市场作为我们的交易市场。在确定选币空间时,我们有两个维度:1.根据上市时间;2.根据成交量。在此,我们根据这两个维度给出我们认为合理的选币空间定义方式:
时间筛选空间:上市满30天的所有币;
成交额筛选空间:过去一周日均成交额大于100万美元的所有币;
综合筛选空间:上市满30天,且过去一周日均成交量大于100万美元的所有币;
对币安的现货市场,我们统计自2017年至今,可得的分钟级历史数据中,总共曾出现过427个USDT交易对。若不考虑其实际的可交易性,截至2023年11月30日,仍存有理论可交易性的交易对总共有361个。
但是,考虑到成交额和上市时间,这个选币空间就有所缩减。若仅以上市时间论,截至目前选币空间中总共有353个可选交易对;以成交额筛选论,共有302个交易对;二者综合论,仅剩294个。
不同的空间作用不同。后续我们需要进行的神经网络训练,以此而言,可用数据越多越好,因此,我们希望在摒弃垃圾数据之后保留尽可能多的币种,因此,时间筛选是更合理的选择;以实际策略构造和交易而言,部分成交额过小的币种,容易存在流动性差导致滑点过大的情况,或过久无人问津,后续存在退市的可能性,从风控角度考虑成交额+时间的综合筛选是更合理的选择。
2 模型介绍
2.1 双向RNN
我们在之前的报告《Crypto高频量价(二):基于RNN的量价因子挖掘》中详细介绍过RNN的结构。双向RNN就是RNN的一个变种。RNN的定义中,数据按照一定的顺序(时间、语序)输入模型,并且经过一层层的RNN cell处理后,最终输出一个结果。
双向RNN是指,数据不仅单向地输入模型,还要逆向的输入模型。即模型将学习输入数据中的顺序信息和逆序信息。
回忆RNN的结构,我们在每一个cell内部,实际上会接收两部分信息,来自当前时间的输入,即Xt,来自上一个cell的隐藏层输出,即Ht-1。在双向RNN中,将再构造一样大小的反向模型,并反向接收信息,即将隐藏层输出反向传递。
双向RNN的结构本身不指定哪一个输出为特定的输出。如果我们与单向RNN相同,使用最后一步的输出(即上图中的Yt和Yt*)作为模型的输出,那么逆向传递的过程就失去了意义:我们并没有使用到逆向传递过程中的大部分cell(即上图中的Cell 1 *到Cell t-1 *)。
2.2 注意力机制
近年来chatGPT爆火之后,Transformer与其底层的注意力机制就获得了广泛的关注。Transformer在2017年由谷歌的论文Attention is all you need提出,随后在自然语言处理问题中取得了非常好的效果。而注意力机制最早则可以上溯到上个世纪80年代,计算机领域引入了神经科学领域对人类执行任务的方式的研究成果。
注意力机制的思想并不复杂。人们在阅读文字、观察图片时,天然的会对文字、图片的一部分内容关注更多,对剩余的部分关注更少。之所以会产生这样的现象,有可能是部分内容的颜色更鲜艳,或形状最奇怪,或出现的次数最频繁。总而言之,注意力机制是希望神经网络也具备这样的特性,重点提取输入信息的一部分。
这一方式在神经网络中通过权重的调整得以实现。对于网络认为“重要”的信息,将被赋予更大的权重,而不那么“重要”的信息,将被赋予更少的权重。
注意力机制的设计变幻无穷。除了上文提到的transformer使用的缩放点积自注意力以外,还可以直接通过一层网络来学习不同特征,甚至是不同样本之间的重要性。本报告使用简单几层的全连接网络与softmax来学习特征的重要性。
2.3 模型架构与参数细节
本报告使用带注意力机制的双向AGRU(BiAGRU)。架构如图所示。原始数据经清洗后作为输入,经过一层全连接和激活进入双向GRU。双向GRU的全部输出进入全连接、激活层、全连接,再经softmax归一化后变为注意力得分(attention score),注意力得分与BiGRU的输出相乘,再与BiGRU最后一个时间步进行拼接,经过一层全连接后输出。
在模型超参数的选择上,我们设定一个基线参数组,随后在这个参数组的基础上进行调整,观察是否有改进。数据处理和模型参数的部分细节如下:
对特征处理的细节,我们需要指出,RNN类模型相较于原始的全连接模型,其优势就在于处理时间序列能力较强,因此我们将时间和币种两个维度同时进行标准化。另外,币圈的价格数量级相差太大,因此,如果直接将原始数据直接标准化,非常容易得到大量集中在0附近的数据,故我们将价格和数据都计算了一阶的变化率后,再进行标准化。这样虽然会损失掉一部分信息,但也是无奈之举。
我们的所有数据自2017年4月开始。但测试集从2023年开始,然后以三个月为窗口向前滚动。虽然前面几个测试集所使用的训练集长度未必达到了完整的四年,但由于早期数据量较小,因此相差不大。
3 实证结果
3.1 基线模型表现
基于上面表格中的参数,我们测试了基线模型的表现。模型在2023年以来的测试集中取得7.78%的rankIC,ICIR(未年化)达0.6674。因子存在较为稳定的选币能力。
根据因子值,我们在截面上对时间筛选的选币空间进行排序,并分为10组,计算其等权表现。
可以发现,因子在市场整体上涨或下跌的过程中,都存在较为稳定的选币能力。第十组减第一组的多空组合年化收益达到205.24%,sharpe ratio达到5.2184。从十分组年化收益看,第一组(因子最大组)收益能力最强,但并不明显;第十组(因子最小组)收益明显弱于其他所有组。这说明该因子的多头区分能力不强,但对空头的区分能力非常强。
3.2 Batch大小与学习率
Batch大小与学习率是深度学习网络最重要的两个超参。当我们训练神经网络时,数据量往往较大,因此难以逐个样本执行“计算结果-计算损失-反向传播-参数更新”的过程,通常会将一批数据一起送入模型,计算其平均损失,然后进行一次反向传播和参数更新。
一般而言,对截面模型,有两种构建batch的方式。一种是每个截面构建一个batch,如果是日频模型,即称为daily batch;另一种是将样本打乱后抽取一定量的数据组成一个batch,而这个数字就可以人为设定,例如64,128,512等等,具体选择因效果和显存而定。
在我们的模型设定中,我们选择将所有的样本混合到一起,打乱之后训练,而不使用daily batch,其原因在于早期的交易对数量过少,如果使用daily batch,为照顾后期较多的交易对,对前期的batch需填充大量的0值,容易对模型的性能会产生影响。但在测试集中,我们仍然严格按照天为界限构造batch,如果有不足以组成一个batch的剩余数据,则以0填充到满足为止。
与batch大小同样重要的还有学习率。在神经网络进行反向传播,更新参数时,学习率决定了参数向梯度下降的方向调整多远,过大的学习率会导致模型难以找到好的参数,损失迟迟不下降;过小的学习率也会导致参数更新过慢,模型难以收敛。
总体看,我们测试的参数组合变化不大,因此对因子表现的影响并不算太明显。这一定程度上也说明了我们的模型具备较好的稳健性。
3.3 隐藏层大小
我们此处的隐藏层大小是指GRU的隐藏层大小。隐藏层的大小决定了GRU从输入特征中能够提取的信息维度。由于我们使用的是双向GRU,因此,在设定模型时规定的隐藏层大小在实际模型中将翻倍(正向+反向)。
我们仅计算了隐藏层大小为32和64的两种情况。但数据体现的特征已经说明问题。可以发现虽然隐藏层大小减少了一半,但是模型的rankIC反而有所上升。这说明模型并非越复杂、参数越多越好。虽然近期随着chatGPT的出圈,“大模型”以其优异的效果、海量的参数为人们种下了“大等于好”的印象,但在实际的场景中,无端扩大模型未必会起到很好的效果。
另外我们需要提出的是,海量的参数需要海量的数据进行训练。对于金融数据,尤其是币圈数据而言,整体数据量仍然处于非常少的量级。与自然语言处理、图像识别这些动辄上亿的样本量相比,金融数据训练模型仍然不宜过于复杂。3.4 损失函数
我们还测试了不同损失函数对模型训练效果的影响。逻辑上讲,我们将训练集和验证集的数据打乱,这种数据组织模式应该更适合MSE损失,这是因为将数据打乱后,让-IC下降(即让IC上升)实际上对预测或许并无帮助,因为我们只计算了这一个batch的相关系数,而我们真正的目标却是某一个截面上全部样本的相关系数,这两者并不完全一致。
当模型训练时,有可能我们的理想情况是得到图15的结果。但按batch训练有可能得到的结果却是图16的结果。图16中50个样本分为5个batch,实际上每一个batch中的IC都不低(观察每一个batch中黄点的斜率是否接近45度),但合在一起却毫无意义。因此我们在设计模型时需要格外小心避免这种情况的发生,且在训练时应保持相对大的batch,并且训练、验证时需要打乱数据,保证随机性,防止图16的情况发生。
不过在我们的模型设定中,没有出现上述问题。实际上在大量的测试中,我们发现保证数据随机性与模型合理设定的前提下,IC损失与MSE损失的区别并不太大。与基线模型相比,仅仅将损失函数替换成MSE,从IC和ICIR的角度并不能看出明显的的区别。
3.5 全部测试综合表现
我们对上文涉及的参数进行了网格搜索。我们发现,参数组合的变化整体看对模型测试集的表现影响不算太大。总体而言,呈现出IC的上升伴随着ICIR的下降的规律。我们依然选择基线模型作为后续构建组合的基础因子。
4 组合表现
回顾我们在第一节的设定,策略最终的交易空间为综合筛选空间,即使用上市时间和过去7日日均成交额综合筛选过后的空间。因此,在进行组合前我们需要对这两个空间中因子表现进行比较。如下图所示,我们发现,因子在时间筛选空间(模型拟合空间)和综合筛选空间(策略交易空间)中的表现区别不大,截至最后一个测试期末,因子在综合筛选空间中的表现仅微微弱于时间筛选空间。
我们设定了几种持仓组合的生成方式:
十分组,等权做多第一组,等权做空第十组;
二十分组,等权做多第一组,等权做空第二十组;
十分组,排序加权做多第一组,排序加权做空第十组;
二十分组,排序加权做多第一组,排序加权做空第二十组;
我们对组合采用多空各50%的分配方法,即多头总权重50%,空头总权重50%,不带杠杆,附带双边千分之三的手续费。
首先可以看出,20分组的组合表现明显优于10分组。这是理所当然的,20分组的情况下,权重更加集中,对于有预测能力的因子来说,最优的品种做多的更多,最差的品种做空的也更多;其次,排序加权比等权组合表现明显更优,无论是在10分组还是20分组的情况下,使用排序加权都对组合有一定的改进。
5 总结
我们基于因子选币与深度学习的方法,搭建了一套行情交易数据-深度学习模型挖掘因子-因子组合选币的策略框架,并基于此讨论了数字货币市场选币策略的应用方法、深度学习因子挖掘方法以及投资组合生成方法。
我们首先使用上市时间与成交额作为筛选标准,构造了一个“因子训练空间”和“策略交易空间”。在因子训练空间中,我们使用小时级的交易数据,基于带注意力的双向GRU模型,对未来12小时收益率进行预测。模型在滚动样本外取得7.78%的IC表现,ICIR为0.667。
基于挖掘得到的因子,我们举出四个构造投资组合的方法,用于获得样本外稳定的多空收益。测试发现,20分组+截面序数加权的组合表现最好,该组合在2023年以来取得年化155%的收益,sharpe ratio达到4.0。
历史研究精选:
Crypto高频量价(三):AI看图——卷积神经网络
Crypto高频量价(二):基于RNN的量价因子挖掘
Crypto高频初探:数据结构与因子构造
UTxO:拆解链上筹码结构
趋势何时终结:转账费率的极端值检测
BTC的链上供需关系:生产销毁天数
刻画贪婪与恐惧:CTC Fear & Greed Index
CDD:拆解链上转账结构