在FMZ平台搭建多因子模型(一):多因子策略介绍

Author: ianzeng123, Created: 2023-11-05 14:38:32, Updated: 2024-02-28 21:50:49

[TOC]

img

在相对一段长的时间内,“指标无用论”一致是量化交易者中的箴言。因为,不管多么神奇的指标,针对于不同的品种和走势,总有失效的时刻,出现巨大的回撤。但是,一个指标没有用,难道所有的指标都没有用吗?多因子模型以另一种角度给出了答案。通过结合多个指标,构建成为不同的因子,通过综合这些因子,多因子模型可以更全面地捕捉市场的特征,降低单一指标失效时的风险。例如,如果某个因子在特定市场条件下表现不佳,其他因子可能仍然有效,从而有助于平衡和稳定投资组合的表现。这种多样化的方法有助于降低投资风险,提高收益的稳定性。

因此,近年来多因子策略成为商品期货CTA(Commodity Trading Advisor)策略的重要组成部分,特别是在工业界应用级大模型中。这些策略以多个因子为基础,如市场趋势、波动性和成交量等,以期望获得稳定的回报。

从本节课开始,我们将尝试在发明者平台搭建一个多因子的模型,这项工作的开发难度是巨大的。因此,在每一步的探索过程中,我们一起来见证每一次的尝试和进取,大家有好的想法可以留言评论区进行互动,共同参与这项工作当中,我们一起来共同学习,共同进步。

多因子模型原理

多因子模型的发展历史可以追溯到资本市场中的Fama-French三因子模型和Carhart四因子模型等。这些模型通过引入不同的因子,如市值、账面市值比率、动量和市场风险等,来解释资产回报。不过这些模型都针对的是股票市场,针对于期货市场,因子会有所不同。

多因子模型的核心理念在于,资产的回报可以通过多个因子来解释。这些因子可以是与市场相关的,也可以是特定于特定资产类别的。在商品期货CTA策略中,通常涵盖以下几个因子:

  • 技术指标因子:包括移动平均线、相对强弱指标(RSI)、随机指标(KDJ)等用于衡量市场趋势和超买超卖情况的技术指标。

  • 波动率因子:通过历史波动率、ATR(平均真实波动范围)等指标来衡量市场的波动性,以识别市场风险水平。

  • 成交量因子:关注交易量的大小和变化情况,如成交量的变动率、成交量的移动平均等,用于捕捉市场的流动性和交易活跃度。

  • 市场情绪因子:包括情绪分析、舆情分析、新闻面情感评估等,用于捕捉市场参与者的情绪和预期。

  • 基本面因子:考虑供需关系、季节性因素、宏观经济数据等基本面因素对商品价格的影响。

多因子模型的目标是将这些因子相互整合,从而预测资产未来的表现。这可以通过为每个因子分配适当的权重,然后将它们合并来实现。

当然,这些因子并不是固定的,最近某家研报甚至提出了9大因子的框架。几乎每家量化投资公司都会有自己的因子库。做不同频段策略会用到不同频段的因子,比如盘口因子,宏观因子,另类因子等等。建因子库的原因是无论做股票中性alpha,smart beta,主观,商品期货cta,统计套利,期现套利策略;都可以把初始信号转化为回报去做大规模的遍历,和跨周期的回测。而如果你想成为专业的量化分析师,入职公司的头两个月就是挖掘有效的因子,各种方法构建都可以!

在中国商品期货市场,多因子模型的研究呈现迅猛的态势,但越来越多的学者和从业者开始在这个领域展开研究。一些研究表明,基于趋势、波动性和成交量等因子的多因子策略在中国商品期货市场中表现出色,为CTA策略提供了有效的工具。在工业领域,有不少研报提供了商品期货多因子模型的搭建理念,比如中信和华泰的研报,水平质量都相当高,大家有空都可以学习一下。

多因子模型搭建框架

构建多因子模型的框架是策略开发的第一步。在商品期货CTA策略中,多因子框架通常包括以下几个关键组成部分:

  • 数据获取:首先,需要获取历史市场数据,包括价格、成交量和其他相关因子数据。这些数据通常来源于交易所或专业数据供应商。

  • 因子选择:基于策略目标和市场特征,选择适当的多因子。这通常需要行业专业知识和经验。

  • 因子计算:编写代码来计算所选因子的值,并通过一定的算法进行因子的筛选和组合。

  • 信号生成:基于因子值生成交易信号,确定买入、卖出或持有的决策。

当然在交易完成过后,我们也要进行风险管理。

  • 风险管理:确保对资产组合的风险进行有效控制,包括设置止损和仓位管理策略。

  • 回测和优化:使用历史数据进行回测,识别模型的弱点并进行策略的优化。

  • 实时交易:一旦策略在回测中表现出色,就可以将其应用到实际市场中进行交易。

这里面的每一步都可以单独拿出来作为一篇或者几篇文章,我们将在后续的系列里一步步进行展示。

多因子模型的优缺点

多因子模型具有多方面的优势,包括:

  • 多元化:多因子模型整合多个因子,降低了单一因子模型的风险。

  • 稳定性:多因子模型通常能够在不同市场条件下表现稳定,减小了风险。

  • 回报潜力:通过综合多个因子,多因子策略可以提供更高的回报潜力。

然而,多因子模型也存在一些缺点:

  • 复杂性:搭建和维护多因子模型通常需要更多的工作,包括数据处理和编程。

  • 过度拟合:如果不小心选择和管理因子,多因子模型可能会过度拟合历史数据,导致在实际市场中表现不佳。

  • 成本:多因子模型通常需要更多的计算资源和数据,这可能增加了成本。

这些缺点呢,远远盖不过一个稳定收益的大模型的吸引。多因子模型框架搭建起来确实比较困难,在网上呢,也很难找到成品的策略框架可以直接拿过来使用。想想也是合理,作为公司的盈利法宝,模型和因子当然都是不可泄露的。但是,发明者作为专业的开放式平台,我们很乐意提供更多的量化知识,帮助大家构建自己的多因子模型。我们的教学策略可能会比较简单,大家可以在此基础上,添加进入自己的想法,作为一个专业的量化人,构建出来属于自己的因子库和多因子模型。

当然心动不如行动,不管多大的困难,我们也要从第一行代码敲起来。这节课呢,我们就尝试首先搭建一个多因子模型的框架。

作为一个多因子模型,其实在搭建框架之外,我们做的最多的事情就是尝试因子的有效性,因此各个模块函数需要保持复用性,就是在多因子模型中也可以稳定使用。所以呢,这次我们决定使用模板类库的方式,构建各个模块函数,这样呢,即使我们使用单因子或者多个因子去尝试因子的有效性,都是可以的。

为了理解的方便,我们使用最简单的一个个模块函数的方式,方便大家理清每个板块函数的编写方式,当然,熟悉Python的小伙伴可以使用面向对象的编程,将我们的各个模块构造成类的方式,提高代码的稳定性。

首先,我们选择目标合约,这里需要注意的是,我们的目标都是主力的合约,而不同的合约的主力月份是有区分的,所以我们建立一个字典索引,包含不同合约的代码和主力月份。

第二部分,我们定义getTarList函数,用来根据日期获取最新的主力合约代码,这里面需要处理的细节有很多。比如合约代码的大小写,还要根据日期绝对主力合约的年份和月份拼写,郑商所呢,数字只有3位,其他所有四位,比如2024年1月的合约,郑商所表达为“大写代码加401”,其他所是“小写代码加2401”。另外,我们需要根据月份定义,比如大部分合约不能进入交割月,还有其他的合约在交割月的前一个月就会到期,比如23年燃油的1月份合约,到期时间是22年年尾的12月27日,这些特殊的情况我们都需要考虑到。

第三部分,getMainData,获取主力日级别k线,方便后续因子,比如波动率,展期收益率,技术指标ATR,macd等的计算。

第四部分,获取外部因子getOutFactor板块,这里是需要使用k线之外的指标,我们需要在网上进行查询使用。

第五部分,因子计算calFactor。这方面设计的函数可太多了,各个因子的计算都可以编写成为一个单独的函数。我们在后续的因子介绍中将逐步完善。

第六部分,因子处理和组合proFactor。各个不同的因子当然不是直接拿过去使用的,我们需要对因子进行标准化的处理,挑选出来合适的因子进行合成,然后我们针对于不同的品种进行打分,确定对不同品种应该进行的交易操作。

第七部分,交易信号的确定,这里定义成了groupFactor多空组判断。

下面呢是,交易函数trade,我们根据上一步的交易信号获取到多空组列表以后,我们就要判断持仓品种的仓位类型和多空组的判断是否一致,如果一致就继续保持仓位类型,如果不一致,就要进行相应的平仓和相反方向开仓的操作。

因为我们建立的是一个实盘级别的策略,所以移仓换月的函数也是必不可少。

当然,以上的各个板块并不是确定的部分,我们后续在探索的过程中,需要根据各个不同的特殊情况,再进行模块函数的增加和改动。工作量确实不少,大家一起加油。

结语

对于我们而言,从0开始搭建一个多因子模型的框架,因子的有效性和策略的收益我们可以不必那么多的关注,重点在于从“打地基”开始树立多因子的整体框架,我们一步步来,让子弹慢慢飞!

本系列课程旨在为大家介绍多因子模型在商品期货量化交易中的应用,其他相关文章请点击下面链接:


更多内容