您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[中信期货]:期货多因子专题报告(六):基于深度学习的期货组合优化 - 发现报告
当前位置:首页/其他报告/报告详情/

期货多因子专题报告(六):基于深度学习的期货组合优化

2022-12-29周通中信期货向***
期货多因子专题报告(六):基于深度学习的期货组合优化

中信期货研究|金融工程专题报告 2022-12-29 基于深度学习的期货组合优化 ——期货多因子专题报告(六) 报告要点 本篇报告将以“组合优化”为目标的凸优化方法与神经网络结合起来,构建了完整的期货组合量化投资框架。我们利用该框架回测部分期货市场的若干量价类因子,获得了较好的组合收益表现。 摘要: 多因子策略是量化投研领域的经典策略之一,其在多类别金融市场均受到长时间的研究与应用;而无论何种市场,标的资产池的权重配置在多因子模型中扮演了“决定策略收益稳健性”的重要角色。因此,组合权重优化是多因子模型的一个重要课题。 聚焦到期货市场,经典的多因子研究包括alpha因子的挖掘和期货组合权重优化计算。市面常见的逻辑认为:任意期货都同时暴露于多种不同的风险因素下,这些风险因素的共同作用形成了期货合约价格的波动;通过对不同的风险因素以alpha因子的形式来有效刻画,我们可以实现对期货收益率的分解,从而研究期货合约价格波动的原因;此外,最优的投资组合则应当是经过“剔除其余不稳定的因素干扰、充分暴露于alpha因子、并一般通过凸优化方法将对收益率的预测转化为组合权重”等这样若干步处理后的结果;这些步骤中也涉及到一些针对于组合权重的约束条件的设置。而本报告区别于上述经典逻辑,尝试了基于深度学习的组合优化方法。 本文以期货市场及其量价多因子为基础,将以“组合优化”为目标的凸优化与神经网络结合起来,构建了完整的期货组合量化投资框架。这里的“输入”是期货合约的基础行情数据,通过“构造若干量价因子、神经网络进行量价多因子的提取与合成、可分凸优化层传播梯度来优化期货组合权重、定义期货组合的收益率为损失度(目标)函数、以该损失度来优化整个神经网络等”来生成日频的期货组合权重,此即为“输出”。 在合理的参数配置中,模型均能获得较好的收益表现。如每日调仓时,年化收益率约为18%、年化波动率约为5%、夏普率3.49。 风险提示:本报告中所涉及的资产配比和模型应用仅为回溯举例,并不构成推荐建议。 投资咨询业务资格: 证监许可【2012】669号 金融工程研究团队 研究员:周通 021-80401733 zhoutong@citicsf.com从业资格号F3078183投资咨询号Z0018055 期货多因子系列研究报告 专题报告四:商品期货alpha因子 拾遗——20220923 专题报告五:不同频率视角下的选期因子——20221222 重要提示:本报告难以设置访问权限,若给您造成不便,敬请谅解。我司不会因为关注、收到或阅读本报告内容而视相关人员为客户;市场有风险,投资需谨慎。 目录 摘要:1 一、问题背景3 二、模型搭建设置与说明3 (一)收盘价、收益率及因子数据4 (二)数据解析——以适当的格式存取数据4 (三)等权合成多因子的分层回测5 (四)深度学习常用函数的准备6 1.类ARGS()6 2.类MyDataset(Dataset)6 3.各类型数据载入函数7 (五)神经网络层的准备7 (六)训练方式的构造8 (七)循环、退出/早停、模型保存10 (八)测试预测权重10 (九)回测12 三、总结13 图表目录 图表1:商品期货及金融期货品种选择4 图表2:不同“数据解析”方式效能对比5 图表3:基于等权方式合成多因子回测净值曲线6 图表4:量价相关性因子的回测统计6 图表5:五层的神经网络(输入层、输出层、三个隐含层)7 图表6:cvxpylayers:凸优化问题与神经网络经典框架PyTorch的结合8 图表7:针对铆定日期-第400日的训练-验证效果(IC值与得分——即损失度的相反数)11 图表8:针对铆定日期-第600日的训练-验证效果(IC值与得分——即损失度的相反数)11 图表9:针对铆定日期-第1000日的训练-验证效果(IC值与得分——即损失度的相反数)11 图表10:针对铆定日期-第1100日的训练-验证效果(IC值与得分——即损失度的相反数)11 图表11:测试集上经深度学习训练得到的连续3个交易日期货品种权重12 图表12:每日调仓(win=1)的回测结果12 图表13:调仓频率win=2时的回测结果13 图表14:量价相关性因子的回测统计13 一、问题背景 多因子策略是量化投研领域的经典策略之一,其在多类别金融市场均受到长时间的研究与应用;而无论何种市场,标的资产池的权重配置在多因子模型中扮演了决定策略收益稳健性的重要角色。因此,组合权重优化是多因子模型的一个重要课题。 聚焦到期货市场,经典的多因子研究包括alpha因子的挖掘和期货组合权重优化计算。市面常见的逻辑认为:任意期货都同时暴露于多种不同的风险因素下,这些风险因素的共同作用形成了期货合约价格的波动;通过对不同的风险因素以alpha因子的形式有效刻画,我们可以实现对期货收益率的分解,从而研究期货合约价格波动的原因;而最优的投资组合则是应当是经过“剔除其余不稳定的因素干扰、充分暴露于alpha因子、并一般通过凸优化方法将对收益率的预测转化为组合权重”等这样若干步处理后的结果;这些步骤中也涉及到一些针对于组合权重的约束条件的设置。而本报告尝试了区别于上述经典逻辑的新方法,总体思路基于深度学习的组合优化。 本文以期货市场及其量价多因子为基础,将以组合优化为目标的凸优化与神经网络结合起来,构建了完整的期货组合量化投资框架。这里的“输入”是期货合约的基础行情数据,通过“构造若干量价因子、神经网络进行量价多因子的提取与合成、可分凸优化层传播梯度来优化期货组合权重、定义期货组合的收益率为损失度(目标)函数、以该损失度来优化整个神经网络等”来生成日频的期货组合权重,此即为“输出”。 二、模型搭建设置与说明 经典组合优化中,常见的组合权重的生成方式包括风险预算模型、rankIC加权、由Barra风险暴露衍生的因子收益率加权等。本报告将要探讨的“凸优化方法与神经网络训练结合”的方式与这些经典的权重生成方法有较大的差异,因此本节将详尽的介绍中间步骤,包括:底层资产数据及考虑的量价类因子介绍、由存取数据衍生的数据解析方法汇总、基础的等权多因子分层回测、常用函数的定义、神经网络层的设计、训练方式的构造、循环-退出/早退-模型保存等机制的定义、模型测试及回测等。 (一)收盘价、收益率及因子数据 这里的底层标的资产样本池为29个不同商品/金融期货主力合约,样本区间 为自2015年12月24日至2022年11月28日的1600多个交易日。 玻璃(FG)、热轧卷板(HC)、铁矿石(I)、焦炭(J)、焦煤(JM)、螺纹 钢(RB)、 黑色类 表头 表头 图表1:商品期货及金融期货品种选择 有色类沪铝(AL)、沪铜(CU)、沪锌(ZN) 能源类石油沥青(BU) 软商品类棉花(CF)、天然橡胶(RU)、白糖(SR) 化工类聚乙烯(L)、甲醇(MA)、聚丙烯(PP)、聚氯乙烯(V)、PTA(TA) 农产品类豆一(A)、玉米(C)、玉米淀粉(CS)、鸡蛋(JD)、豆粕(M)、菜油(OI)、 金融沪深300指数期货(IF)、5年期国债期货(TF) 棕榈油(P)、菜粕(RM)、豆油(Y) 资料来源:中信期货研究所 因子层面:本篇报告仅考虑量价类的6个因子,分别是“3日动量”('mom_d3'),“243日动量”('mom_d243'),“10日动量”('mom_d10'),“243日最小二乘回归” ('ols_d243'),“5日量价相关性”('cv_d5')和“61日振幅”('amp_d61_g4')。其相应的因子构造逻辑可参见本团队之前的相关研报。 (二)数据解析——以适当的格式存取数据 商品期货和金融期货数据本身以及基于其行情类数据构造得到的量价类因子数据,有其自身的特点。其中之一则是由于不同期货合约上市日期不同以及量价类因子不同的回看期,造成了大量空值的出现。 对于此类型数据,直接的方法涉及稀疏矩阵的存取。在数值分析中,稀疏矩阵是指其元素大部分为零的矩阵。反之,如果大部分元素都非零,则这个矩阵是稠密的。在科学与工程领域中求解线性模型时经常出现大型的稀疏矩阵。由于过大的尺寸,标准的算法经常无法操作这些稀疏矩阵。因此,在使用计算机存储和操作稀疏矩阵时,经常需要修改标准算法以利用矩阵的稀疏结构。由于其自身的稀疏特性,通过压缩可以大大节省稀疏矩阵的内存代价。 具体落实到我们这里,体现为:商品期货和金融期货数据本身以及基于其行情类数据构造得到的量价类因子数据数据总体非常大,而我们基于单个项目需求发起的研究通常是与数据总体的一个非常小的子集进行交互,这就导致了极大的 稀疏性。当处理稀疏矩阵时,将它们存储为一个完整的矩阵(从这里开始称为稠密矩阵)是非常低效的。这是因为一个完整的数组为每个条目占用一块内存,所以一个nxm数组需要nxm块内存。从简单的逻辑角度来看,存储这么多零是没有意义的。在python中,稀疏数据结构在scipy中得到了有效的实现,具体包含7类稀疏矩阵(如csc_matrix,bsr_matrix等)。实现背后的思想很简单:我们不将所有值存储在稠密矩阵中,而是以某种格式存储非零值(例如,使用它们的行和列索引)。 另一种则是简单的数据预处理后再进行“数据解析”,即将一种数据格式转换为另一种可读格式。这个操作的出发点是:由于训练时需要反复读取数据,所花费的时间会比较大;因此我们可以选择最合适的方式将其存到本地,便于之后训练时的多次调用。这里我们对常用的数据解析方法做了一下对比,如下表所示。注:这里使用的机器是2GHz四核处理器及其上安装的python3.8.8和spyder4.2.5。 图表2:不同“数据解析”方式效能对比 方法 文件格式 大小 写入耗时ms 读取耗时ms 类型处理? 形状处理? np.save() .npy 2.3MB 3.24 1.60 否 否 h5py.File() .hdf5 2.3MB 0.69 0.85 否 否 gfg.savetxt() .txt 7.5MB 188.80 161.74 否 是 pickle.dump() .pkl 2.3MB 1.27 1.36 否 否 .tofile() .bin 2.3MB 2.65 2.70 是 是 资料来源:同花顺iFind、中信期货研究所 从上表我们可以看到,hdf5文件的读写相对较快,其次是pkl文件,再次是npy和bin这两种格式的文件,而txt则明显耗时较多;空间占用角度,前四者没有显著差异,而后者txt比较占空间,不推荐使用;此外,我们也注意到bin和txt格式在存储、读取过程中对于类型/形状处理的要求。综上,基于我们这里考虑的这份“1683个交易日、29个商品/金融期货主力合约、6个量价因子”的数据样本而言,最优的格式我们推荐hdf5、npy和pkl。 我们得到的这个结论,符合对于上述5种格式效能的一般认知;当然随着数据量的增大,也可进一步做出更鲜明的区分。那么下文中具体使用到的格式为h5py文件。第一次导入数据后在一段时间内会于缓存中保存,这时候再次导入会很快。所以在训练神经网络时,除了第一个epoch运行较慢外,后面读取的速度都会较第一次有所提升。 (三)等权合成多因子的分层回测 这里我们先给出基于等权方式合成多因子的经典分层回测结果,如下图所示: 图表3:基于等权方式合成多因子回测净值曲线 资料来源:同花顺iFind、中信期货研究所 上述回测净值曲线对应的净值分析如下: 图表4:量价相关性因子的回测统计 平滑窗口 年化收益率% 年化波动率% 夏普率 最大回撤 卡玛 第一层 12.23 12.71 0.22 0.96 0.13 第二层 9.53 12.61 0.25 0.76 0.13 第三层 7.14 1.35 0.22 0.53 0.13 第四层 8.97 12.78 0.21 0.7 0.13 第五层 11.26 12.97 0.25 0.87 0.13 高-低 -0.57 5.46 0.11 -0.1 0